Dependencies:   XBeeLib mbed HvZAlphaNumLib HvZServerLib

Committer:
etherealflaim
Date:
Sun Dec 12 19:38:47 2010 +0000
Revision:
1:d1b5cd8b2c18
Parent:
0:9cdba0589ba2

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
etherealflaim 0:9cdba0589ba2 1 #include "mbed.h"
etherealflaim 0:9cdba0589ba2 2 #include "iHvZ.hpp"
etherealflaim 0:9cdba0589ba2 3 #include "if/net/netudpsocket.h"
etherealflaim 0:9cdba0589ba2 4
etherealflaim 0:9cdba0589ba2 5 #include "udp.hpp"
etherealflaim 0:9cdba0589ba2 6
etherealflaim 0:9cdba0589ba2 7 UDP::UDP(iHvZ *game, PinName eth_in)
etherealflaim 0:9cdba0589ba2 8 : m_game(game), m_eth(eth_in), m_eth_int(eth_in),
etherealflaim 0:9cdba0589ba2 9 m_pNetUdpSocket(NULL), m_pCbItem(NULL), m_pCbMeth(NULL), m_pCb(NULL),
etherealflaim 1:d1b5cd8b2c18 10 //conn(IpAddr(192,168,1,2),IpAddr(255,255,255,0), IpAddr(), IpAddr())
etherealflaim 0:9cdba0589ba2 11 {
etherealflaim 0:9cdba0589ba2 12 // Set the game ID
etherealflaim 0:9cdba0589ba2 13 char mac[8];
etherealflaim 0:9cdba0589ba2 14 char macaddr[12+1];
etherealflaim 0:9cdba0589ba2 15 eth.address(mac);
etherealflaim 0:9cdba0589ba2 16 sprintf(macaddr, "%02X%02X%02X%02X%02X%02X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
etherealflaim 0:9cdba0589ba2 17 m_game->id(macaddr);
etherealflaim 0:9cdba0589ba2 18
etherealflaim 0:9cdba0589ba2 19 //m_eth_int.rise(this, &UDP::check);
etherealflaim 0:9cdba0589ba2 20 m_eth_chk.attach(this, &UDP::check, 5);
etherealflaim 0:9cdba0589ba2 21 registered = 0;
etherealflaim 0:9cdba0589ba2 22 }
etherealflaim 0:9cdba0589ba2 23
etherealflaim 0:9cdba0589ba2 24 UDP::~UDP()
etherealflaim 0:9cdba0589ba2 25 {
etherealflaim 0:9cdba0589ba2 26 close();
etherealflaim 0:9cdba0589ba2 27 }
etherealflaim 0:9cdba0589ba2 28
etherealflaim 0:9cdba0589ba2 29 void UDP::check()
etherealflaim 0:9cdba0589ba2 30 {
etherealflaim 0:9cdba0589ba2 31 // debounce (if attached to a button)
etherealflaim 0:9cdba0589ba2 32 wait(.1);
etherealflaim 0:9cdba0589ba2 33 //if (m_eth)
etherealflaim 0:9cdba0589ba2 34 //{
etherealflaim 0:9cdba0589ba2 35 // usb.printf("- Connection found, starting sync\r\n");
etherealflaim 0:9cdba0589ba2 36 ethlink();
etherealflaim 0:9cdba0589ba2 37 //}
etherealflaim 0:9cdba0589ba2 38 m_eth_chk.attach(this, &UDP::check, 10);
etherealflaim 0:9cdba0589ba2 39 }
etherealflaim 0:9cdba0589ba2 40
etherealflaim 0:9cdba0589ba2 41 int UDP::sendto(const char* buf, int len, Host* pHost)
etherealflaim 0:9cdba0589ba2 42 {
etherealflaim 0:9cdba0589ba2 43 UDPErr udpSocketErr = checkInst();
etherealflaim 0:9cdba0589ba2 44 if(udpSocketErr)
etherealflaim 0:9cdba0589ba2 45 return udpSocketErr;
etherealflaim 0:9cdba0589ba2 46 return m_pNetUdpSocket->sendto(buf, len, pHost);
etherealflaim 0:9cdba0589ba2 47 }
etherealflaim 0:9cdba0589ba2 48
etherealflaim 0:9cdba0589ba2 49 int UDP::recvfrom(char* buf, int len, Host* pHost)
etherealflaim 0:9cdba0589ba2 50 {
etherealflaim 0:9cdba0589ba2 51 UDPErr udpSocketErr = checkInst();
etherealflaim 0:9cdba0589ba2 52 if(udpSocketErr)
etherealflaim 0:9cdba0589ba2 53 return udpSocketErr;
etherealflaim 0:9cdba0589ba2 54 return m_pNetUdpSocket->recvfrom(buf, len, pHost);
etherealflaim 0:9cdba0589ba2 55 }
etherealflaim 0:9cdba0589ba2 56
etherealflaim 0:9cdba0589ba2 57 UDPErr UDP::close()
etherealflaim 0:9cdba0589ba2 58 {
etherealflaim 0:9cdba0589ba2 59 if(!m_pNetUdpSocket)
etherealflaim 0:9cdba0589ba2 60 return UDPSOCKET_SETUP;
etherealflaim 0:9cdba0589ba2 61 m_pNetUdpSocket->resetOnEvent();
etherealflaim 0:9cdba0589ba2 62 UDPErr udpSocketErr = (UDPErr) m_pNetUdpSocket->close(); //Close (can already be closed)
etherealflaim 0:9cdba0589ba2 63 Net::releaseUdpSocket(m_pNetUdpSocket); //And release it so it can be freed when properly removed
etherealflaim 0:9cdba0589ba2 64 m_pNetUdpSocket = NULL;
etherealflaim 0:9cdba0589ba2 65 return udpSocketErr;
etherealflaim 0:9cdba0589ba2 66 }
etherealflaim 0:9cdba0589ba2 67
etherealflaim 0:9cdba0589ba2 68 void UDP::ethlink()
etherealflaim 0:9cdba0589ba2 69 {
etherealflaim 0:9cdba0589ba2 70 Serial usb(USBTX,USBRX);
etherealflaim 0:9cdba0589ba2 71 usb.printf("Checking for Ethernet connection...\r\n");
etherealflaim 0:9cdba0589ba2 72
etherealflaim 1:d1b5cd8b2c18 73 Host game_server(IpAddr(128, 61, 89, 71), HVZ_PORT, HVZ_HOSTNAME);
etherealflaim 1:d1b5cd8b2c18 74 //Host game_server(IpAddr(192, 168, 1, 1), HVZ_PORT, HVZ_HOSTNAME);
etherealflaim 0:9cdba0589ba2 75
etherealflaim 0:9cdba0589ba2 76 /* Function to call upon Server response */
etherealflaim 0:9cdba0589ba2 77 setOnEvent(this, &UDP::read);
etherealflaim 0:9cdba0589ba2 78
etherealflaim 0:9cdba0589ba2 79 if( !eth.link() ) return;
etherealflaim 0:9cdba0589ba2 80 usb.printf(" - Link active\r\n");
etherealflaim 0:9cdba0589ba2 81
etherealflaim 0:9cdba0589ba2 82 m_game->alphanumdisplay_device().display('*');
etherealflaim 0:9cdba0589ba2 83
etherealflaim 0:9cdba0589ba2 84 if( registered == 0 ) {
etherealflaim 0:9cdba0589ba2 85 conn.setup();
etherealflaim 0:9cdba0589ba2 86
etherealflaim 0:9cdba0589ba2 87 //Get the MAC address of this device
etherealflaim 0:9cdba0589ba2 88 eth.address((char *)mac.octet);
etherealflaim 0:9cdba0589ba2 89
etherealflaim 0:9cdba0589ba2 90 // Send to Game Server until receive a response
etherealflaim 0:9cdba0589ba2 91 // and wait for a response
etherealflaim 0:9cdba0589ba2 92 do {
etherealflaim 0:9cdba0589ba2 93
etherealflaim 0:9cdba0589ba2 94 register_device(mac, &game_server);
etherealflaim 0:9cdba0589ba2 95 wait(0.1);
etherealflaim 0:9cdba0589ba2 96
etherealflaim 0:9cdba0589ba2 97 Net::poll();
etherealflaim 0:9cdba0589ba2 98
etherealflaim 0:9cdba0589ba2 99 } while ( memcmp("i",&(srvr_resp[0]),1) );
etherealflaim 0:9cdba0589ba2 100
etherealflaim 0:9cdba0589ba2 101 printf("srvr_resp = %s\r\n", srvr_resp);
etherealflaim 0:9cdba0589ba2 102
etherealflaim 0:9cdba0589ba2 103 // If the response is an acknowledgement
etherealflaim 0:9cdba0589ba2 104 // get the IDs from the response and
etherealflaim 0:9cdba0589ba2 105 // set the game device and tag IDs
etherealflaim 0:9cdba0589ba2 106 if( get_ack_err(srvr_resp,HVZ_REG) ) {
etherealflaim 0:9cdba0589ba2 107 set_ids(srvr_resp);
etherealflaim 0:9cdba0589ba2 108 //printf( "deviceID = %s\r\n", m_game->id() );
etherealflaim 0:9cdba0589ba2 109 //printf( "tagID = %s\r\n", m_game->tagid() );
etherealflaim 0:9cdba0589ba2 110
etherealflaim 0:9cdba0589ba2 111 // Clear the response string
etherealflaim 0:9cdba0589ba2 112 memset(srvr_resp,0,sizeof(srvr_resp));
etherealflaim 0:9cdba0589ba2 113
etherealflaim 0:9cdba0589ba2 114 // Upon registration there will be no tags or
etherealflaim 0:9cdba0589ba2 115 // updates for this device, so just return here
etherealflaim 0:9cdba0589ba2 116 return;
etherealflaim 0:9cdba0589ba2 117 }
etherealflaim 0:9cdba0589ba2 118
etherealflaim 0:9cdba0589ba2 119 // Set as already registered
etherealflaim 0:9cdba0589ba2 120 registered = 1;
etherealflaim 0:9cdba0589ba2 121
etherealflaim 0:9cdba0589ba2 122 // Clear the response string
etherealflaim 0:9cdba0589ba2 123 memset(srvr_resp,0,sizeof(srvr_resp));
etherealflaim 0:9cdba0589ba2 124 }
etherealflaim 0:9cdba0589ba2 125
etherealflaim 0:9cdba0589ba2 126 // Submit any tags to the server
etherealflaim 0:9cdba0589ba2 127 // and wait for a response
etherealflaim 0:9cdba0589ba2 128 do {
etherealflaim 0:9cdba0589ba2 129 send_tag(&game_server, m_game->get_victims());
etherealflaim 0:9cdba0589ba2 130 wait(0.1);
etherealflaim 0:9cdba0589ba2 131
etherealflaim 0:9cdba0589ba2 132 Net::poll();
etherealflaim 0:9cdba0589ba2 133 //} while ( memcmp("i",&(srvr_resp[0]),1) );
etherealflaim 0:9cdba0589ba2 134 } while ( 'i' != srvr_resp[0] );
etherealflaim 0:9cdba0589ba2 135
etherealflaim 0:9cdba0589ba2 136 printf("srvr_resp = %s\r\n", srvr_resp);
etherealflaim 0:9cdba0589ba2 137
etherealflaim 0:9cdba0589ba2 138 // On successfully reporting tags to Server
etherealflaim 0:9cdba0589ba2 139 // clear the tagged list
etherealflaim 0:9cdba0589ba2 140 if( get_ack_err(srvr_resp,HVZ_TAG) )
etherealflaim 0:9cdba0589ba2 141 m_game->clear_victims();
etherealflaim 0:9cdba0589ba2 142
etherealflaim 0:9cdba0589ba2 143 // Clear the response string
etherealflaim 0:9cdba0589ba2 144 memset(srvr_resp,0,sizeof(srvr_resp));
etherealflaim 0:9cdba0589ba2 145
etherealflaim 0:9cdba0589ba2 146 // Next request updates to the server
etherealflaim 0:9cdba0589ba2 147 do {
etherealflaim 0:9cdba0589ba2 148 // If the deviceID is set at update request
etherealflaim 0:9cdba0589ba2 149 send_pull(&game_server);
etherealflaim 0:9cdba0589ba2 150
etherealflaim 0:9cdba0589ba2 151 wait(0.1);
etherealflaim 0:9cdba0589ba2 152
etherealflaim 0:9cdba0589ba2 153 Net::poll();
etherealflaim 0:9cdba0589ba2 154 //} while ( !srvr_resp[0] );
etherealflaim 0:9cdba0589ba2 155 } while ( 'i' != srvr_resp[0] );
etherealflaim 0:9cdba0589ba2 156
etherealflaim 0:9cdba0589ba2 157 printf("srvr_resp = %s\r\n", srvr_resp);
etherealflaim 0:9cdba0589ba2 158
etherealflaim 0:9cdba0589ba2 159 // If pull request ack, update settings of the game
etherealflaim 0:9cdba0589ba2 160 if( get_ack_err(srvr_resp,HVZ_PULL) )
etherealflaim 0:9cdba0589ba2 161 update_settings(srvr_resp);
etherealflaim 0:9cdba0589ba2 162
etherealflaim 0:9cdba0589ba2 163 // Clear the response string
etherealflaim 0:9cdba0589ba2 164 memset(srvr_resp,0,sizeof(srvr_resp));
etherealflaim 0:9cdba0589ba2 165
etherealflaim 0:9cdba0589ba2 166 // Display a completion mark
etherealflaim 0:9cdba0589ba2 167 m_game->alphanumdisplay_device().display('^');
etherealflaim 0:9cdba0589ba2 168 wait(1);
etherealflaim 0:9cdba0589ba2 169 m_game->alphanumdisplay_device().display(m_game->status()==STATUS_HUMAN?'H':'Z');
etherealflaim 0:9cdba0589ba2 170 }
etherealflaim 0:9cdba0589ba2 171
etherealflaim 0:9cdba0589ba2 172 void UDP::read(UDPSocketEvent e)
etherealflaim 0:9cdba0589ba2 173 {
etherealflaim 1:d1b5cd8b2c18 174 Host host(IpAddr(128, 61, 89, 71), HVZ_PORT, HVZ_HOSTNAME);
etherealflaim 1:d1b5cd8b2c18 175 //Host host(IpAddr(192, 168, 1, 1), HVZ_PORT, HVZ_HOSTNAME);
etherealflaim 0:9cdba0589ba2 176
etherealflaim 0:9cdba0589ba2 177 if ( e == UDPSOCKET_READABLE )
etherealflaim 0:9cdba0589ba2 178 {
etherealflaim 0:9cdba0589ba2 179 while( int len = recvfrom(srvr_resp, sizeof(srvr_resp), &host) )
etherealflaim 0:9cdba0589ba2 180 {
etherealflaim 0:9cdba0589ba2 181 if( len <= 0 )
etherealflaim 0:9cdba0589ba2 182 break;
etherealflaim 0:9cdba0589ba2 183 }
etherealflaim 0:9cdba0589ba2 184 }
etherealflaim 0:9cdba0589ba2 185 }
etherealflaim 0:9cdba0589ba2 186
etherealflaim 0:9cdba0589ba2 187 void UDP::set_ids(char *response)
etherealflaim 0:9cdba0589ba2 188 {
etherealflaim 0:9cdba0589ba2 189 char buf[9];
etherealflaim 0:9cdba0589ba2 190
etherealflaim 0:9cdba0589ba2 191 /* First set the deviceID */
etherealflaim 0:9cdba0589ba2 192 memcpy(buf,response+13,8);
etherealflaim 0:9cdba0589ba2 193 buf[8] = '\0';
etherealflaim 0:9cdba0589ba2 194 m_game->id(buf);
etherealflaim 0:9cdba0589ba2 195
etherealflaim 0:9cdba0589ba2 196 /* Next set the tagID */
etherealflaim 0:9cdba0589ba2 197 memcpy(buf,response+22,8);
etherealflaim 0:9cdba0589ba2 198 buf[8] = '\0';
etherealflaim 0:9cdba0589ba2 199 m_game->life(buf);
etherealflaim 0:9cdba0589ba2 200
etherealflaim 0:9cdba0589ba2 201 m_game->save();
etherealflaim 0:9cdba0589ba2 202 }
etherealflaim 0:9cdba0589ba2 203
etherealflaim 0:9cdba0589ba2 204 void UDP::update_settings(char *response)
etherealflaim 0:9cdba0589ba2 205 {
etherealflaim 0:9cdba0589ba2 206 char *tok;
etherealflaim 0:9cdba0589ba2 207 // Clear the lives so we can add them all back
etherealflaim 0:9cdba0589ba2 208 m_game->clear_lives();
etherealflaim 0:9cdba0589ba2 209
etherealflaim 0:9cdba0589ba2 210 // Start tokenizing the response
etherealflaim 0:9cdba0589ba2 211 tok = strtok(response,"\001");
etherealflaim 0:9cdba0589ba2 212
etherealflaim 0:9cdba0589ba2 213 typedef enum { RNONE,RDEV,RLIVES,RSTUN,RINC } readtype;
etherealflaim 0:9cdba0589ba2 214 readtype type = RNONE;
etherealflaim 0:9cdba0589ba2 215
etherealflaim 0:9cdba0589ba2 216 while (tok != NULL)
etherealflaim 0:9cdba0589ba2 217 {
etherealflaim 0:9cdba0589ba2 218 //printf ("%s\r\n",tok);
etherealflaim 0:9cdba0589ba2 219 tok = strtok (NULL, "\001");
etherealflaim 0:9cdba0589ba2 220
etherealflaim 0:9cdba0589ba2 221 if( strcmp(tok,"deviceid") == 0 ) {
etherealflaim 0:9cdba0589ba2 222 type = RDEV;
etherealflaim 0:9cdba0589ba2 223 continue;
etherealflaim 0:9cdba0589ba2 224 }
etherealflaim 0:9cdba0589ba2 225
etherealflaim 0:9cdba0589ba2 226 else if( strcmp(tok,"tagids") == 0 ) {
etherealflaim 0:9cdba0589ba2 227 type = RLIVES;
etherealflaim 0:9cdba0589ba2 228 continue;
etherealflaim 0:9cdba0589ba2 229 }
etherealflaim 0:9cdba0589ba2 230
etherealflaim 0:9cdba0589ba2 231 else if( strcmp(tok,"stuntime") == 0 ) {
etherealflaim 0:9cdba0589ba2 232 type = RSTUN;
etherealflaim 0:9cdba0589ba2 233 continue;
etherealflaim 0:9cdba0589ba2 234 }
etherealflaim 0:9cdba0589ba2 235
etherealflaim 0:9cdba0589ba2 236 else if( strcmp(tok,"incubate") == 0 ) {
etherealflaim 0:9cdba0589ba2 237 type = RINC;
etherealflaim 0:9cdba0589ba2 238 continue;
etherealflaim 0:9cdba0589ba2 239 }
etherealflaim 0:9cdba0589ba2 240
etherealflaim 0:9cdba0589ba2 241 switch (type)
etherealflaim 0:9cdba0589ba2 242 {
etherealflaim 0:9cdba0589ba2 243 case RDEV:
etherealflaim 0:9cdba0589ba2 244 m_game->id(tok);
etherealflaim 0:9cdba0589ba2 245 break;
etherealflaim 0:9cdba0589ba2 246 case RLIVES:
etherealflaim 0:9cdba0589ba2 247 m_game->life(tok);
etherealflaim 0:9cdba0589ba2 248 continue; // possibility of more than one
etherealflaim 0:9cdba0589ba2 249 case RSTUN:
etherealflaim 0:9cdba0589ba2 250 m_game->stun_duration((unsigned)atoi(tok));
etherealflaim 0:9cdba0589ba2 251 break;
etherealflaim 0:9cdba0589ba2 252 case RINC:
etherealflaim 0:9cdba0589ba2 253 m_game->incubation_time((unsigned)atoi(tok));
etherealflaim 0:9cdba0589ba2 254 break;
etherealflaim 0:9cdba0589ba2 255 }
etherealflaim 0:9cdba0589ba2 256
etherealflaim 0:9cdba0589ba2 257 // go back to no parsing
etherealflaim 0:9cdba0589ba2 258 type = RNONE;
etherealflaim 0:9cdba0589ba2 259 }
etherealflaim 0:9cdba0589ba2 260
etherealflaim 0:9cdba0589ba2 261 m_game->save();
etherealflaim 0:9cdba0589ba2 262 }
etherealflaim 0:9cdba0589ba2 263
etherealflaim 0:9cdba0589ba2 264 void UDP::send_pull(Host *host)
etherealflaim 0:9cdba0589ba2 265 {
etherealflaim 0:9cdba0589ba2 266 char data[64];
etherealflaim 0:9cdba0589ba2 267 // char buff[12];
etherealflaim 0:9cdba0589ba2 268 //
etherealflaim 0:9cdba0589ba2 269 // memset(data,0,sizeof(data));
etherealflaim 0:9cdba0589ba2 270
etherealflaim 0:9cdba0589ba2 271 // if( type == PULL_DEV )
etherealflaim 0:9cdba0589ba2 272 // sprintf(buff, "%c%c%c%c%c%c%c%c", pullId[0], pullId[1], pullId[2],
etherealflaim 0:9cdba0589ba2 273 // pullId[3], pullId[4], pullId[5], pullId[6], pullId[7]);
etherealflaim 0:9cdba0589ba2 274
etherealflaim 0:9cdba0589ba2 275 // else
etherealflaim 0:9cdba0589ba2 276 // sprintf(buff, "%02X%02X%02X%02X%02X%02X", pullId[0], pullId[1], pullId[2],
etherealflaim 0:9cdba0589ba2 277 // pullId[3], pullId[4], pullId[5]);
etherealflaim 0:9cdba0589ba2 278
etherealflaim 0:9cdba0589ba2 279 // strcat(data, "iHvZ\001pull\001");
etherealflaim 0:9cdba0589ba2 280 // strcat(data, buff);
etherealflaim 0:9cdba0589ba2 281 // strcat(data, "\001end");
etherealflaim 0:9cdba0589ba2 282
etherealflaim 0:9cdba0589ba2 283 sprintf(data, "iHvZ\001pull\001%s\001end", m_game->id().c_str());
etherealflaim 0:9cdba0589ba2 284
etherealflaim 0:9cdba0589ba2 285 sendto(data, strlen(data), host);
etherealflaim 0:9cdba0589ba2 286 }
etherealflaim 0:9cdba0589ba2 287
etherealflaim 0:9cdba0589ba2 288 inline void UDP::send_tag(Host *host, vector<string> taggedIDs)
etherealflaim 0:9cdba0589ba2 289 {
etherealflaim 0:9cdba0589ba2 290 int totalsize = 32;
etherealflaim 0:9cdba0589ba2 291
etherealflaim 0:9cdba0589ba2 292 for (int i = 0; i < taggedIDs.size(); i++)
etherealflaim 0:9cdba0589ba2 293 {
etherealflaim 0:9cdba0589ba2 294 totalsize += taggedIDs[i].size();
etherealflaim 0:9cdba0589ba2 295 }
etherealflaim 0:9cdba0589ba2 296
etherealflaim 0:9cdba0589ba2 297 char tmp[totalsize];
etherealflaim 0:9cdba0589ba2 298
etherealflaim 0:9cdba0589ba2 299 // Clear out buffers
etherealflaim 0:9cdba0589ba2 300 memset(tmp, 0, sizeof(tmp));
etherealflaim 0:9cdba0589ba2 301
etherealflaim 0:9cdba0589ba2 302 // Append tagIDs
etherealflaim 0:9cdba0589ba2 303 for (int i = 0; i < taggedIDs.size(); i++)
etherealflaim 0:9cdba0589ba2 304 {
etherealflaim 0:9cdba0589ba2 305 strcat(tmp, taggedIDs[i].c_str());
etherealflaim 0:9cdba0589ba2 306 strcat(tmp, "\001");
etherealflaim 0:9cdba0589ba2 307 }
etherealflaim 0:9cdba0589ba2 308 string tagids = tmp;
etherealflaim 0:9cdba0589ba2 309
etherealflaim 0:9cdba0589ba2 310 sprintf(tmp, "iHvZ\001tag\001%s\001%send", m_game->id().c_str(), tagids.c_str());
etherealflaim 0:9cdba0589ba2 311
etherealflaim 0:9cdba0589ba2 312 sendto(tmp, strlen(tmp), host);
etherealflaim 0:9cdba0589ba2 313 }
etherealflaim 0:9cdba0589ba2 314
etherealflaim 0:9cdba0589ba2 315 void UDP::resetOnEvent() //Disable callback
etherealflaim 0:9cdba0589ba2 316 {
etherealflaim 0:9cdba0589ba2 317 m_pCb = NULL;
etherealflaim 0:9cdba0589ba2 318 m_pCbItem = NULL;
etherealflaim 0:9cdba0589ba2 319 m_pCbMeth = NULL;
etherealflaim 0:9cdba0589ba2 320 }
etherealflaim 0:9cdba0589ba2 321
etherealflaim 0:9cdba0589ba2 322 void UDP::onNetUdpSocketEvent(NetUdpSocketEvent e)
etherealflaim 0:9cdba0589ba2 323 {
etherealflaim 0:9cdba0589ba2 324 if(m_pCbItem && m_pCbMeth)
etherealflaim 0:9cdba0589ba2 325 (m_pCbItem->*m_pCbMeth)((UDPSocketEvent) e);
etherealflaim 0:9cdba0589ba2 326 else if(m_pCb)
etherealflaim 0:9cdba0589ba2 327 m_pCb((UDPSocketEvent) e);
etherealflaim 0:9cdba0589ba2 328 }
etherealflaim 0:9cdba0589ba2 329
etherealflaim 0:9cdba0589ba2 330 UDPErr UDP::checkInst()
etherealflaim 0:9cdba0589ba2 331 {
etherealflaim 0:9cdba0589ba2 332 if(!m_pNetUdpSocket)
etherealflaim 0:9cdba0589ba2 333 {
etherealflaim 0:9cdba0589ba2 334 m_pNetUdpSocket = Net::udpSocket();
etherealflaim 0:9cdba0589ba2 335 if(!m_pNetUdpSocket)
etherealflaim 0:9cdba0589ba2 336 {
etherealflaim 0:9cdba0589ba2 337 return UDPSOCKET_IF; //Interface did not return a socket (usually because a default interface does not exist)
etherealflaim 0:9cdba0589ba2 338 }
etherealflaim 0:9cdba0589ba2 339 m_pNetUdpSocket->setOnEvent(this, &UDP::onNetUdpSocketEvent);
etherealflaim 0:9cdba0589ba2 340 }
etherealflaim 0:9cdba0589ba2 341 return UDPSOCKET_OK;
etherealflaim 0:9cdba0589ba2 342 }