示例#1
0
        public void Listen()
        {
            try
            {
                TcpListener server = null;
                server = new TcpListener(IPAddress.Parse(_host), Protocol.TCP_PORT);

                server.Start();

                while (_flag.Retrieve((x) => x))
                {
                    if (!server.Pending())
                    {
                        Protocol.Yield();
                        continue;
                    }
                    var client = new ProtocolTcpClient();
                    client.Configure(server.AcceptTcpClient());
                    var message = client.RecvMessage();

                    if (message.Length > 0 && message.Code == MessageCode.CONNECT &&
                        Equals(Protocol.VERSION, message.GetReader().ReadString()))
                    {
                        var name = RandomNameGen.GetName();
                        Console.WriteLine("Connection: {0} => {1}", client.Address, name);
                        _clients.Act(x => x.Add(new UserTcpConnection(name, client)));
                    }
                    else
                    {
                        client.Close();
                    }
                }

                server.Stop();
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }
示例#2
0
 public UserTcpConnection(string name, ProtocolTcpClient client)
 {
     ConnectedUser = new User(name);
     _client       = client;
     Shake();
 }
示例#3
0
 public TcpServerConnection()
 {
     _client = new ProtocolTcpClient();
     _client.IsConnectedChanged += (s, e) => IsConnectedChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Connected)));
 }