Endpoint BroadcastReceiver::GetNextRemote(timeval *timeout) throw (FatalError) { UdpSocket udpSock(INADDR_ANY, mPort, true, 1); sockaddr_storage remoteAddr; socklen_t remoteAddrLength = sizeof(remoteAddr); BroadcastMessage msg; const size_t bytesRead = udpSock.RecvFrom((uint8_t *)&msg, sizeof(msg), timeout, (sockaddr *)&remoteAddr, &remoteAddrLength); TraceBuffer(ZONE_VERBOSE, msg.deviceId, sizeof(msg.deviceId), "%c", "%zu bytes broadcast message received DeviceId: \n", bytesRead); if(msg.IsWiflyBroadcast(bytesRead)) { Trace(ZONE_INFO, "Broadcast detected\n"); Endpoint newRemote(remoteAddr, remoteAddrLength, msg.port, std::string((char *)&msg.deviceId[0])); newRemote.SetScore(1); return LockedInsert(newRemote) ? newRemote : Endpoint(); } return Endpoint(); }
int main(int argc, char* argv[]) { uint32_t seconds = 0; char udpPacketIn[256]; //uint8_t osc_packet_in[256]; uint8_t i = 0; int len = 0; UdpSocket udpSock(4001); udpSock.setDestination(4000, "localhost"); Serial serial; SLIPEncodedSerial slip; SimpleWriter dump; OSCMessage msgIn; printf("cool\n"); // make an osc object // the message wants an OSC address as first argument OSCMessage msg("/sys/renumber"); // msg.add(888); // this just dumps it into the simple writer dump msg.send(dump); printf("\n msg is %d bytes\n", dump.length); // print it out for (i = 0; i < dump.length; i++){ printf("%x ", dump.buffer[i]); } // UDP send udpSock.writeBuffer(dump.buffer, dump.length); // serial send slip.sendMessage(dump.buffer, dump.length, serial); printf("\ndone, now gonna receive\n"); // full udp -> serial -> serial -> udp for (;;){ // receive udp, send to serial len = udpSock.readBuffer(udpPacketIn, 256, 0); if (len > 0){ for (i = 0; i < len; i++){ msgIn.fill(udpPacketIn[i]); } if(!msgIn.hasError()){ msgIn.dispatch("/thing/test", gotone, 0); // send it along msgIn.send(dump); slip.sendMessage(dump.buffer, dump.length, serial); } else { printf("bad message"); } msgIn.empty(); } // receive serial, send udp if(slip.recvMessage(serial)) { udpSock.writeBuffer(slip.decodedBuf, slip.decodedLength); } // sleep for 1ms usleep(1000); } // for;; }