Exemplo n.º 1
0
 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));
     }
 }
Exemplo n.º 2
0
        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;
                }
            }
        }
Exemplo n.º 3
0
 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));
     }
 }
Exemplo n.º 4
0
 public SmallServerEventArgs(kind kind, string message, SmallClient client)
 {
     this.ekind       = kind;
     this.message     = message;
     this.smallclient = client;
 }