Esempio n. 1
0
        private void HandleClient()
        {
            try {
                var isDisconnected = false;
                var message        = "";
                using (var ms = new MemoryStream()) {
                    var receiveBuffer = new byte[BufferSize];
                    do
                    {
                        var receiveSize = _ns.Read(receiveBuffer, 0, receiveBuffer.Length);
                        if (receiveSize == 0)
                        {
                            isDisconnected = true;
                            break;
                        }
                        ms.Write(receiveBuffer, 0, receiveSize);
                    } while (_ns.DataAvailable);
                    message = isDisconnected ?
                              "Disconnected" :
                              ChatMessage.FromBytes(ms.GetBuffer()).Body;
                }
                Message = message;
            }
            catch (Exception ex) {
                var socketException = ex.InnerException as SocketException;
                var message         = socketException == null?
                                      ex.GetAllMessages() :
                                          ((SocketError)socketException.ErrorCode).ToString();

                Message = message;
            }
        }
Esempio n. 2
0
        private void HandleClient(Object state)
        {
            using (var client = _listener.AcceptTcpClient())
                using (var ns = client.GetStream()) {
                    if (ns.CanTimeout)
                    {
                        ns.ReadTimeout  = Timeout * 1000;
                        ns.WriteTimeout = Timeout * 1000;
                    }
                    var endPoint      = client.Client.RemoteEndPoint as IPEndPoint;
                    var clientAddress = endPoint != null?
                                        endPoint.Address.ToString() + ":" + endPoint.Port.ToString() :
                                            null;

                    Message = "Connected: " + clientAddress;
                    try {
                        var isDisconnected = false;
                        while (!isDisconnected &&
                               client.GetState() == TcpState.Established &&
                               _listener.Active)
                        {
                            Thread.Sleep(100);
                            if (!ns.DataAvailable)
                            {
                                continue;
                            }
                            ChatMessage message = new ChatMessage();
                            using (var ms = new MemoryStream()) {
                                var receiveBuffer = new byte[BufferSize];
                                do
                                {
                                    var receiveSize = ns.Read(receiveBuffer, 0, receiveBuffer.Length);
                                    if (receiveSize == 0)
                                    {
                                        isDisconnected = true;
                                        break;
                                    }
                                    ms.Write(receiveBuffer, 0, receiveSize);
                                } while (ns.DataAvailable);
                                if (!isDisconnected)
                                {
                                    message = ChatMessage.FromBytes(ms.GetBuffer());
                                }
                            }
                            var response = this.NotifyMessageReceived(message);
                            if (!isDisconnected)
                            {
                                var bytes = response.ToBytes();
                                ns.Write(bytes, 0, bytes.Length);
                            }
                        }
                    }
                    catch (Exception ex) {
                        var socketException = ex.InnerException as SocketException;
                        var message         = socketException == null?
                                              ex.GetAllMessages() :
                                                  ((SocketError)socketException.ErrorCode).ToString() + ": " + clientAddress;

                        Message = message;
                    }
                    Message = "Disconnected: " + clientAddress;
                }
        }