BonjourServer.AppDelegate.NetDelegate.Published C# (CSharp) Method

Published() public method

public Published ( MonoTouch.Foundation.NSNetService sender ) : void
sender MonoTouch.Foundation.NSNetService
return void
            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 ();
            }