コード例 #1
0
        private void HandleClientComm(object client)
        {
            //Console.WriteLine("Client connected");

            var tcpClient = (TcpClient)client;

            lock (this)
            {
                m_clients.Add(tcpClient);
            }

            m_clientListener.onClientConnect();

            try
            {
                var clientStream   = tcpClient.GetStream();
                var bufferedStream = new BufferedStream(clientStream);
                var streamReader   = new StreamReader(bufferedStream);

                while (tcpClient.Connected)
                {
                    string message;
                    try
                    {
                        //blocks until a client sends a message
                        //bytesRead = clientStream.Read(message, 0, 4096);
                        message = streamReader.ReadLine();
                    }
                    catch
                    {
                        //a socket error has occured
                        break;
                    }

                    // End of message
                    if (message != null)
                    {
                        //Console.WriteLine("Message received");
                        m_clientListener?.onClientMessage(message, tcpClient);
                        //else
                        //{
                        //Console.WriteLine("Message missed, no listener");
                        //}
                    }
                    else
                    {
                        //Console.WriteLine("No message from client, close socket.");
                        break;
                    }
                }
            }
            catch (InvalidOperationException)
            {
            }
            finally
            {
                lock (this)
                {
                    m_clients.Remove(tcpClient);
                }
                //tcpClient.Close();
                tcpClient.Dispose();
                //Console.WriteLine("Client disconnected");
            }
        }