public override void Published (NSNetService sender)
{
ThreadStart ts = new ThreadStart (delegate {
using (var pool = new NSAutoreleasePool ()) {
try {
string hostName = String.Format ("{0}.local", Dns.GetHostName ());
IPHostEntry hostEntry = Dns.GetHostEntry (hostName);
IPAddress serverAddress = hostEntry.AddressList[1];
_controller._tcpServer = new TcpListener (serverAddress, sender.Port);
_controller._tcpServer.Start ();
Log ("server started");
int maxReadSize = 1024;
byte[] requestBuffer = new Byte[maxReadSize];
while (true) {
TcpClient connectingClient = _controller._tcpServer.AcceptTcpClient ();
using (NetworkStream netStream = connectingClient.GetStream ()) {
int size = netStream.Read (requestBuffer, 0, requestBuffer.Length);
string request = Encoding.ASCII.GetString (requestBuffer, 0, size);
Log (String.Format ("server received: {0}", request));
string response = String.Format ("server echoed: {0}", request);
byte[] responseBuffer = Encoding.ASCII.GetBytes (response);
netStream.Write (responseBuffer, 0, responseBuffer.Length);
Log (response);
}
connectingClient.Close ();
}
} catch (SocketException e) {
Log (String.Format ("SocketException: {0}, Native Error Code = {0}", e.Message, e.NativeErrorCode));
}
}
});
Thread t = new Thread (ts);
t.Start ();
}