17static unsigned int nCallBackCount=0;
18static _fnNodeJoinCallBack* fnNodeJoinCallBack;
20#define MOBILITY_JOIN_AT_DEFAULT _strdup("0,")
21#define MOBILITY_LEAVE_AT_DEFAULT _strdup("")
23int fn_NetSim_Mobility_configure_NodeJoinProfile(
void* xmlNode,NETSIM_ID nDeviceId)
29 PNODE_JOIN_PROFILE* joinprofile=&NETWORK->ppstruDeviceList[nDeviceId-1]->node_join_profile;
30 getXmlVar(&szValJoin,JOIN_AT,xmlNode,1,_STRING,MOBILITY);
31 getXmlVar(&szValLeave,LEAVE_AT,xmlNode,0,_STRING,MOBILITY);
33 t=strtok(szValJoin,
",");
36 PNODE_JOIN_PROFILE njp = JOIN_PROFILE_ALLOC();
38 njp->time=atof(t)*SECOND;
39 njp->NodeId=nDeviceId;
40 JOIN_PROFILE_ADD(joinprofile,njp);
42 NETWORK->ppstruDeviceList[nDeviceId-1]->node_status=CONNECTED;
47 t=strtok(szValLeave,
",");
50 PNODE_JOIN_PROFILE njp = JOIN_PROFILE_ALLOC();
52 njp->time=atof(t)*SECOND;
53 njp->NodeId=nDeviceId;
54 JOIN_PROFILE_ADD(joinprofile,njp);
56 NETWORK->ppstruDeviceList[nDeviceId-1]->node_status=NOT_CONNECTED;
63int fn_NetSim_Mobility_NodeJoinInit(NETSIM_ID nDevIndex)
65 PNODE_JOIN_PROFILE join=NETWORK->ppstruDeviceList[nDevIndex]->node_join_profile;
66 NetSim_EVENTDETAILS pevent;
67 memset(&pevent,0,
sizeof pevent);
68 pevent.nDeviceId=nDevIndex+1;
69 pevent.nDeviceType=DEVICE_TYPE(nDevIndex+1);
70 pevent.nEventType=TIMER_EVENT;
71 pevent.nProtocolId=PROTOCOL_MOBILITY;
74 pevent.dEventTime = join->time;
75 if(join->action==JOIN)
76 pevent.nSubEventType=NODE_JOIN;
77 else if(join->action==LEAVE)
78 pevent.nSubEventType=NODE_LEAVE;
80 JOIN_PROFILE_NEXT(join);
85int fn_NetSim_Mobility_NodeJoined()
87 extern ANIM_HANDLE animHandle;
89 NETSIM_ID devid = pstruEventDetails->nDeviceId;
90 NETWORK->ppstruDeviceList[devid-1]->node_status = CONNECTED;
93 animation_add_new_entry(animHandle, ANIM_NODEJOIN,
"%d,%lf",
95 pstruEventDetails->dEventTime);
98 for(nLoop=0;nLoop<nCallBackCount;nLoop++)
100 fnNodeJoinCallBack[nLoop](pstruEventDetails->nDeviceId,pstruEventDetails->dEventTime,JOIN);
105int fn_NetSim_Mobility_NodeLeaved()
107 extern ANIM_HANDLE animHandle;
109 NETSIM_ID devid = pstruEventDetails->nDeviceId;
110 NETWORK->ppstruDeviceList[devid-1]->node_status = NOT_CONNECTED;
113 animation_add_new_entry(animHandle, ANIM_NODELEAVE,
"%d,%lf",
115 pstruEventDetails->dEventTime);
118 for(nLoop=0;nLoop<nCallBackCount;nLoop++)
120 fnNodeJoinCallBack[nLoop](pstruEventDetails->nDeviceId,pstruEventDetails->dEventTime,LEAVE);
125_declspec(dllexport)
int fnNodeJoinRegisterCallBackFunction(_fnNodeJoinCallBack fnCallBack)
129 fnNodeJoinCallBack = (_fnNodeJoinCallBack*)calloc(1,
sizeof* fnNodeJoinCallBack);
133 fnNodeJoinCallBack = (_fnNodeJoinCallBack*)realloc(fnNodeJoinCallBack,(nCallBackCount+1)*
sizeof* fnNodeJoinCallBack);
135 fnNodeJoinCallBack[nCallBackCount] = fnCallBack;