Exemple #1
0
 private void OnClientConnected(IAsyncResult ar)
 {
     if (IsRunning)
     {
         PBEServerClient client = null;
         try
         {
             client = new PBEServerClient(_listener.EndAccept(ar), _encryption);
             bool isBanned;
             lock (_bannedIPs)
             {
                 isBanned = _bannedIPs.Contains(client.IP);
             }
             if (isBanned)
             {
                 RefuseClient(client, true);
             }
             else
             {
                 int count;
                 lock (_connectedClients)
                 {
                     count = _connectedClients.Count;
                 }
                 if (count >= _maxConnections)
                 {
                     RefuseClient(client, false);
                 }
                 else
                 {
                     lock (_connectedClients)
                     {
                         _connectedClients.Add(client);
                     }
                     client.IsConnected = true;
                     ClientConnected?.Invoke(this, client);
                     BeginReceive(client);
                 }
             }
         }
         catch (Exception ex)
         {
             NotifyError(ex);
             if (client != null)
             {
                 DisconnectClient(client);
             }
         }
         _listener.BeginAccept(OnClientConnected, _listener);
     }
 }
Exemple #2
0
        public bool DisconnectClient(PBEServerClient client)
        {
            bool b;

            lock (_connectedClients)
            {
                b = _connectedClients.Remove(client);
            }
            if (b)
            {
                client.IsConnected = false;
                client.Socket.Shutdown(SocketShutdown.Both);
                client.Socket.Dispose();
                ClientDisconnected?.Invoke(this, client);
            }
            return(b);
        }
Exemple #3
0
 private void RefuseClient(PBEServerClient client, bool isBanned)
 {
     client.Socket.Shutdown(SocketShutdown.Both);
     client.Socket.Dispose();
     ClientRefused?.Invoke(this, client.IP, isBanned);
 }
Exemple #4
0
 private void BeginReceive(PBEServerClient client)
 {
     byte[] buffer = new byte[2];
     client.Buffer = buffer;
     client.Socket.BeginReceive(buffer, 0, 2, SocketFlags.None, OnReceiveLength, client);
 }