X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=src%2FMoof%2FService.cc;h=400006ba2eb6ee59a4e4dad2391b90dd3a55240a;hp=a5fae0f33862c05fd0d251e97593baca008ac881;hb=3fd6f206f0e64122b7cb289907a1a780b6ed2dc9;hpb=2a97ae825077e5b75aee35b1c1ada221a4ae7b26 diff --git a/src/Moof/Service.cc b/src/Moof/Service.cc index a5fae0f..400006b 100644 --- a/src/Moof/Service.cc +++ b/src/Moof/Service.cc @@ -10,16 +10,70 @@ **************************************************************************/ #include "Service.hh" +#include "Socket.hh" + + +#define SOLICIT 0x1234ABCD +#define RESPONSE 0xABCD1234 namespace Mf { -ServiceFinder::ServiceFinder(const std::string& service, int type) +int Service::handlePacket(SocketMultiplexer& sock, + Packet& packet, + const SocketAddress& address) { + uint32_t magic = 0; + + try + { + packet >> magic; + } + catch (...) + { + return -1; + } + + if (magic == SOLICIT) + { + Packet out; + out << RESPONSE << mAddress.service() << mText; + sock.socket().write(out); + return 0; + } + return -1; } -void ServiceFinder::update(Scalar t, Scalar dt) +int ServiceFinder::handlePacket(SocketMultiplexer& sock, + Packet& packet, + const SocketAddress& address) +{ + try + { + uint32_t magic; + packet >> magic; + if (magic == RESPONSE) + { + std::string service; + std::string text; + + packet >> service >> text; + if (service == mService) + { + mServices.push_back(Service(address, text)); + return 0; + } + } + } + catch (...) + { + } + + return -1; +} + +ServiceFinder::ServiceFinder(const std::string& service, int type) { }