Ejemplo n.º 1
0
        /// <summary>
        /// 单个线程处理事务
        /// </summary>
        private void Process()
        {
            while (ContinueProcess)
            {
                Handler clientHandler = null;
                lock (Pool.SyncRoot)
                {
                    if (Pool.Count > 0)
                    {
                        clientHandler = Pool.Dequeue();
                    }
                }
                if (clientHandler != null)
                {
                    clientHandler.Process();                      // Provoke client
                    // if client still connect, schedufor later processingle it
                    if (clientHandler.Alive)
                    {
                        Pool.Enqueue(clientHandler);
                    }
                }

                Thread.Sleep(100);
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 线程创建以后,进入该线程的处理事务
        /// </summary>
        public void process()
        {
            int TestingCycle = 5;              // Number of testing cycles
            int ClientNbr    = 0;

            try
            {
                while (TestingCycle > 0)
                {
                    //接受客户端连接请求
                    TcpClient handler = listener.AcceptTcpClient();
                    //得到客户端连接句柄
                    if (handler != null)
                    {
                        Console.WriteLine(lg.ServerSocket_Task_Query + "#{0}!", ++ClientNbr);

                        // 一个新连接请求的处理
                        ConnectionPool.Enqueue(new Handler(handler));

                        --TestingCycle;
                    }
                    else
                    {
                        break;
                    }
                }
            }
            catch (SocketException ex)
            {
                Console.WriteLine(ex.Message);
            }
            listener.Stop();

            // Stop client requests handling
            ClientTask.Stop();
        }
Ejemplo n.º 3
0
        //监听客户端的连接,并创建一个发消息实体
        public static void StartListening1()
        {
            Console.Write("****************************************************\n");
            Console.Write("**                " + lg.ServerSocket_ServerSocket_GMTools_Title + "                      **\n");
            Console.Write("****************************************************\n");
            //Thread thread = new Thread(new ThreadStart(receiverThread));
            //thread.Start();
            //初始化XML文件
            ReadXMLFile xmlFiles = new ReadXMLFile();
            //IPAddress ipAddress = Dns.Resolve(xmlFiles.ServerIP).AddressList[0];
            IPAddress ipAddress = IPAddress.Parse(xmlFiles.ServerIP);
            //初始化数据库连接参数值
            SqlHelper helper = new SqlHelper();

            helper.init(xmlFiles.DatabaseIP, xmlFiles.DBName, xmlFiles.UserName, xmlFiles.PassWord);
            IPEndPoint  ipLocalEndPoint = new IPEndPoint(ipAddress, xmlFiles.ServerPort);
            TaskManager ClientTask;

            // Client Connections Pool
            ConnectionPool ConnectionPool = new ConnectionPool();

            // Client Task to handle client requests
            ClientTask = new TaskManager(ConnectionPool);

            ClientTask.Start();

            TcpListener listener = new TcpListener(ipLocalEndPoint);

            try
            {
                listener.Start();
                int clientCycle = xmlFiles.ServerCnt;
                int ClientNbr   = 0;

                // Start listening for connections.
                Console.WriteLine(lg.ServerSocket_ServerSocket_GMTools_Port + xmlFiles.ServerPort);
                HandlerManager handlers = new HandlerManager();
                while (clientCycle > 0)
                {
                    TcpClient handler = listener.AcceptTcpClient();
                    if (handler != null)
                    {
                        Console.WriteLine(lg.ServerSocket_ServerSocket_GMTools_Accept + lg.ServerSocket_ServerSocket_GMTools_Client + "#{0}!", ++ClientNbr);
                        Console.WriteLine(lg.ServerSocket_ServerSocket_GMTools_Validate);
                        handlers.registerHandler(new Handler(handler));
                        // An incoming connection needs to be processed.
                        ConnectionPool.Enqueue(new Handler(handler));
                        //--clientCycle ;
                    }
                    else
                    {
                        Console.WriteLine(lg.ServerSocket_ServerSocket_GMTools_Client + "#{0}" + lg.ServerSocket_Handler_UserLeft, ClientNbr);
                        break;
                    }
                }
                listener.Stop();
                ClientTask.Stop();
                UserInfoAPI userAPI = new UserInfoAPI();
                userAPI.GM_UpdateActiveUser(1, 0);
            }
            catch (IOException e)
            {
                Console.WriteLine(e.ToString());
            }
            catch (SocketException ex)
            {
                Console.WriteLine(ex.Message);
            }

            Console.WriteLine("\nHit enter to continue...");
            Console.Read();
        }