private void OnClientDisconnected(ClientDisconnectedEventArgs e) { ClientDisconnectedEventHandler handler = ClientDisconnected; if (handler != null) { handler(this, e); } }
protected virtual void OnDisconnected(ClientDisconnectedEventArgs e) { ClientDisconnectedEventHandler handler = Disconnected; if (handler != null) { handler(this, e); } }
public ClientListener(IUserSocket userSocket, ClientDisconnectedEventHandler clientDisconnectedEventHandler) { this.userSocket = userSocket; this.clientDisconnectedEventHandler = clientDisconnectedEventHandler; this.listenerThread = new Thread(new ThreadStart(Listen)); active = false; enabled = false; }
private void WaitForClients(object arg) { Settings settings = arg as Settings; keepAlive = new KeepaliveChannel(settings.KeepAlivePort); ClientAuthenticated += Connection_Keeplive_OnClientAuthenticated; ClientDisconnected += StopAllServices; ClientDisconnected += Connection_Keeplive_OnClientDisconnected; keepAlive.DeadClient += Connection_Keepalive_OnDeadClient; OnStarted(); while (true) /*loop among all clients who will connect to me*/ { actualClient = null; IPEndPoint clientEndpoint = null; byte[] buffer = new byte[64]; try { while (true) //loop until a client is authenticated { try { actualClient = listener.Accept(); } catch (Exception) { /*listening socket closed by Stop()*/ goto finish; } clientEndpoint = (IPEndPoint)actualClient.RemoteEndPoint; settings.ClientIP = clientEndpoint.Address; OnClientConnected(clientEndpoint); int recv = actualClient.Receive(buffer); if (recv == 0) /*the client shuts down the Socket connection with the Shutdown method*/ { throw new SocketException(); } bool authenticated = Encoding.Unicode.GetString(buffer).Equals(passwdDigest); if (authenticated) { break; } actualClient.Send(Encoding.Unicode.GetBytes("NO")); actualClient.Shutdown(SocketShutdown.Both); actualClient.Disconnect(true); } } catch (SocketException) { actualClient.Shutdown(SocketShutdown.Both); actualClient.Disconnect(true); continue; } OnClientAuthenticated(); // Client is authenticated. Invoke callbacks and open all channels try { IPAddress clientIP = clientEndpoint.Address; ClipboardNetworkChannel.StartService(settings.ClipboardReceivingPort); InputNetworkChannel.StartService(settings.InputReceivingPort); actualClient.Send(Encoding.Unicode.GetBytes("OK")); ClipboardTrasfer.Target = new IPEndPoint(clientIP, settings.ClipboardTransferPort); //wait synchronously for BYE from client before closing correctly the socket actualClient.Receive(buffer); Console.WriteLine("Received " + Encoding.Unicode.GetString(buffer) + " from client"); } catch (Exception e) { Console.WriteLine("{0}:{1}", e.GetType().Name, e.Message); } finally { Utility.ShutdownSocket(actualClient); OnClientDisconnected(null); } //finished serving this client } finish: OnStopped(); Console.WriteLine("Client accepting channel CLOSED!!! BYE"); }
public void Hub_ClientDisconnected(string connectionId, string ip, int Id_User) { ClientDisconnectedEventHandler clientDisconnected = OnClientDisconnected; if (clientDisconnected != null) clientDisconnected(connectionId, ip, Id_User); }