private void RemoveClient(SmallClient cl) { lock (lockacceptedsmallclients) { acceptedsmallclients.Remove(cl); } if (SmallServerEvent != null) { SmallServerEvent(this, new SmallServerEventArgs(SmallServerEventArgs.kind.stopclient, "New Connection " + cl.Socket.RemoteEndPoint.ToString(), cl)); } }
private void ServerListenThread() { bool fDone = false; while (!fDone) { try { bool accept = false; lock (lockacceptedsmallclients) { if (acceptedsmallclients.Count < maxConnections) { accept = true; } } if (accept) { Socket sockToClient = tcplistener.AcceptSocket(); if (sockToClient.Connected) { SmallClient cl = new SmallClient(sockToClient); cl.SmallClientEvent += new SmallClient.SmallClientEventHandler(SmallClientEventHandler); lock (lockacceptedsmallclients) { acceptedsmallclients.Add(cl); } // server event if (SmallServerEvent != null) { SmallServerEvent(this, new SmallServerEventArgs(SmallServerEventArgs.kind.newclient, "New Connection " + cl.Socket.RemoteEndPoint.ToString(), cl)); } // check again if socket still running // if not eject it from the list if (!cl.Socket.Connected) { RemoveClient(cl); } //Console.WriteLine("[tid {0}] Client connected", GetCurrentThreadId()); //ClientHandler Handler = new ClientHandler(sockToClient); //Handler.StartRead(); } } } catch (Exception e) { // Console.WriteLine("[tid {0}] Exception in I/O thread - exiting.", // GetCurrentThreadId()); Console.WriteLine(e.Source + " : " + e.Message); fDone = true; } } }
public void StopListening() { // stop listener tcplistener.Stop(); // remove clients lock (lockacceptedsmallclients) { SmallClient[] tmp = new SmallClient[acceptedsmallclients.Count]; acceptedsmallclients.CopyTo(tmp); foreach (SmallClient i in tmp) { i.Dispose(); } } listening = false; // event if (SmallServerEvent != null) { SmallServerEvent(this, new SmallServerEventArgs(SmallServerEventArgs.kind.stoplistening, "Server stop listen", null)); } }
public SmallServerEventArgs(kind kind, string message, SmallClient client) { this.ekind = kind; this.message = message; this.smallclient = client; }