示例#1
0
        private void Listen()
        {
            ThreadPool.QueueUserWorkItem(_ =>
            {
                while (_isListening)
                {
                    var session = new WebSocketSession(_tcpListener.AcceptTcpClient());
                    session.HandshakeCompleted += (__, ___) =>
                    {
                        Console.WriteLine($"{session.Id}| Handshake Valid.");
                        Clients.Add(session);
                    };

                    session.Disconnected += (__, ___) =>
                    {
                        Console.WriteLine($"{session.Id}| Disconnected.");
                        Clients.Remove(session);

                        ClientDisconnected?.Invoke(this, session);
                        session.Dispose();
                    };

                    Console.WriteLine($"{session.Id}| Connected.");
                    ClientConnected?.Invoke(this, session);
                    session.Start();
                }

                _tcpListener.Stop();
            });
        }
示例#2
0
    public void Listen(int port)
    {
        if (_listening)
        {
            throw new Exception("Already listening!");
        }
        _listening = true;

        var server = new TcpListener(IPAddress.Any, port);

        server.Start();

        Console.WriteLine("WS Server - UP");

        ThreadPool.QueueUserWorkItem(_ =>
        {
            while (_listening)
            {
                var session = new WebSocketSession(server.AcceptTcpClient());
                session.HandshakeCompleted += (__, ___) =>
                {
                    Console.WriteLine($"{session.Id}| Handshake Valid.");
                    Clients.Add(session);
                };

                session.Disconnected += (__, ___) =>
                {
                    Console.WriteLine($"{session.Id}| Disconnected.");
                    Clients.Remove(session);

                    ClientDisconnected?.Invoke(this, session);
                    session.Dispose();
                };

                Console.WriteLine($"{session.Id}| Connected.");
                ClientConnected?.Invoke(this, session);
                session.Start();
            }

            server.Stop();
        });
    }