X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=src%2FMoof%2FService.cc;h=3432ae6ac12c763857fe25d558442a18f192f66f;hp=43689afdee09a0c62975f2ce92298d581b5f3613;hb=2f239b9ba2a556a5ca810cfffc60552a56a4fe86;hpb=7ade2da0367685e098181d7124c9ba145a010626 diff --git a/src/Moof/Service.cc b/src/Moof/Service.cc index 43689af..3432ae6 100644 --- a/src/Moof/Service.cc +++ b/src/Moof/Service.cc @@ -10,25 +10,72 @@ **************************************************************************/ #include "Service.hh" +#include "Socket.hh" + + +#define SOLICIT 0x1234ABCD +#define RESPONSE 0xABCD1234 namespace Mf { -ServiceBroadcaster::ServiceBroadcaster(const std::string& name) +int Service::handlePacket(SocketMultiplexer& sock, + Packet& packet, + const SocketAddress& address) { -} + uint32_t magic = 0; -void ServiceBroadcaster::update(Scalar t, Scalar dt) -{ -} + try + { + packet >> magic; + } + catch (...) + { + return -1; + } + if (magic == SOLICIT) + { + Packet out; + out << RESPONSE << mType << mName << mText; + sock.socket().write(out); + return 0; + } + return -1; +} -ServiceLocator::ServiceLocator(const std::string& name) +int ServiceFinder::handlePacket(SocketMultiplexer& sock, + Packet& packet, + const SocketAddress& address) { + try + { + uint32_t magic; + packet >> magic; + if (magic == RESPONSE) + { + std::string type; + packet >> type; + if (type == mType) + { + std::string name; + std::string text; + packet >> name >> text; + mServices.insert(std::make_pair(name, + Service(address, name, text))); + return 0; + } + } + } + catch (...) + { + } + + return -1; } -void ServiceLocator::update(Scalar t, Scalar dt) +ServiceFinder::ServiceFinder(const std::string& type, int sockType) { }