X-Git-Url: http://git.tdb.fi/?p=xinema.git;a=blobdiff_plain;f=source%2Fnetworkinterface.cpp;h=1bf7b4a8e159bfc004d951e48e8dd2a02f9fa7df;hp=74c80dc6263aa9a17963f26ffa3e4da2a4bb09dc;hb=5a79899d5a888e9aa76f29cb889e77979062a4a1;hpb=8c7e5bd0d1f966af2b22293a3a0780c419fb9c95 diff --git a/source/networkinterface.cpp b/source/networkinterface.cpp index 74c80dc..1bf7b4a 100644 --- a/source/networkinterface.cpp +++ b/source/networkinterface.cpp @@ -6,17 +6,23 @@ using namespace std; using namespace Msp; +#include + NetworkInterface::NetworkInterface(Xinema &x): xinema(x) { Net::SockAddr *addr = Net::resolve("::", "34588", Net::INET6); server_sock = new Net::StreamServerSocket(addr->get_family()); server_sock->listen(*addr); + discover_sock = new Net::DatagramSocket(addr->get_family()); + discover_sock->bind(*addr); delete addr; server_sock->signal_data_available.connect(sigc::mem_fun(this, &NetworkInterface::connection_available)); + discover_sock->signal_data_available.connect(sigc::mem_fun(this, &NetworkInterface::discover_request)); event_disp.add(*server_sock); + event_disp.add(*discover_sock); thread = new NetworkThread(*this); } @@ -35,6 +41,16 @@ void NetworkInterface::connection_available() clients.push_back(new Client(xinema, sock)); } +void NetworkInterface::discover_request() +{ + Net::SockAddr *peer_addr; + char rbuf[1024]; + discover_sock->recvfrom(rbuf, sizeof(rbuf), peer_addr); + IO::print("Discovery beacon received from %s\n", peer_addr->str()); + discover_sock->sendto("xinema", 6, *peer_addr); + delete peer_addr; +} + NetworkInterface::NetworkThread::NetworkThread(NetworkInterface &n): network(n),