NetSim Source Code Help v14.4
All 13 Components
 
Loading...
Searching...
No Matches
NodeJoin.c
1/************************************************************************************
2* Copyright (C) 2023 *
3* TETCOS, Bangalore. India *
4* *
5* Tetcos owns the intellectual property rights in the Product and its content. *
6* The copying, redistribution, reselling or publication of any or all of the *
7* Product or its content without express prior written consent of Tetcos is *
8* prohibited. Ownership and / or any other right relating to the software and all *
9* intellectual property rights therein shall remain at all times with Tetcos. *
10* *
11* Author: Shashi Kant Suman *
12* *
13* ---------------------------------------------------------------------------------*/
14#include "main.h"
15#include "Mobility.h"
16#include "Animation.h"
17static unsigned int nCallBackCount=0;
18static _fnNodeJoinCallBack* fnNodeJoinCallBack;
19
20#define MOBILITY_JOIN_AT_DEFAULT _strdup("0,")
21#define MOBILITY_LEAVE_AT_DEFAULT _strdup("")
22
23int fn_NetSim_Mobility_configure_NodeJoinProfile(void* xmlNode,NETSIM_ID nDeviceId)
24{
25 char* szValJoin;
26 char* szValLeave;
27 char* t;
28 char* s;
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);
32 s=szValJoin;
33 t=strtok(szValJoin,",");
34 while(t && *t)
35 {
36 PNODE_JOIN_PROFILE njp = JOIN_PROFILE_ALLOC();
37 njp->action = JOIN;
38 njp->time=atof(t)*SECOND;
39 njp->NodeId=nDeviceId;
40 JOIN_PROFILE_ADD(joinprofile,njp);
41 if(atoi(t) == 0)
42 NETWORK->ppstruDeviceList[nDeviceId-1]->node_status=CONNECTED;
43 t=strtok(NULL,",");
44 }
45 free(s);
46 s=szValLeave;
47 t=strtok(szValLeave,",");
48 while(t && *t)
49 {
50 PNODE_JOIN_PROFILE njp = JOIN_PROFILE_ALLOC();
51 njp->action = LEAVE;
52 njp->time=atof(t)*SECOND;
53 njp->NodeId=nDeviceId;
54 JOIN_PROFILE_ADD(joinprofile,njp);
55 if(atoi(t) == 0)
56 NETWORK->ppstruDeviceList[nDeviceId-1]->node_status=NOT_CONNECTED;
57 t=strtok(NULL,",");
58 }
59 free(s);
60 return 0;
61}
62
63int fn_NetSim_Mobility_NodeJoinInit(NETSIM_ID nDevIndex)
64{
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;
72 while(join)
73 {
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;
79 fnpAddEvent(&pevent);
80 JOIN_PROFILE_NEXT(join);
81 }
82 return 0;
83}
84
85int fn_NetSim_Mobility_NodeJoined()
86{
87 extern ANIM_HANDLE animHandle;
88 unsigned int nLoop;
89 NETSIM_ID devid = pstruEventDetails->nDeviceId;
90 NETWORK->ppstruDeviceList[devid-1]->node_status = CONNECTED;
91
92 //Call animation
93 animation_add_new_entry(animHandle, ANIM_NODEJOIN, "%d,%lf",
94 devid,
95 pstruEventDetails->dEventTime);
96
97 //call all the callback function
98 for(nLoop=0;nLoop<nCallBackCount;nLoop++)
99 {
100 fnNodeJoinCallBack[nLoop](pstruEventDetails->nDeviceId,pstruEventDetails->dEventTime,JOIN);
101 }
102 return 0;
103}
104
105int fn_NetSim_Mobility_NodeLeaved()
106{
107 extern ANIM_HANDLE animHandle;
108 unsigned int nLoop;
109 NETSIM_ID devid = pstruEventDetails->nDeviceId;
110 NETWORK->ppstruDeviceList[devid-1]->node_status = NOT_CONNECTED;
111
112 //Call animation
113 animation_add_new_entry(animHandle, ANIM_NODELEAVE, "%d,%lf",
114 devid,
115 pstruEventDetails->dEventTime);
116
117 //call all the callback function
118 for(nLoop=0;nLoop<nCallBackCount;nLoop++)
119 {
120 fnNodeJoinCallBack[nLoop](pstruEventDetails->nDeviceId,pstruEventDetails->dEventTime,LEAVE);
121 }
122 return 0;
123}
124
125_declspec(dllexport) int fnNodeJoinRegisterCallBackFunction(_fnNodeJoinCallBack fnCallBack)
126{
127 if(!nCallBackCount)
128 {
129 fnNodeJoinCallBack = (_fnNodeJoinCallBack*)calloc(1,sizeof* fnNodeJoinCallBack);
130 }
131 else
132 {
133 fnNodeJoinCallBack = (_fnNodeJoinCallBack*)realloc(fnNodeJoinCallBack,(nCallBackCount+1)*sizeof* fnNodeJoinCallBack);
134 }
135 fnNodeJoinCallBack[nCallBackCount] = fnCallBack;
136 nCallBackCount++;
137 return 0;
138}