public void ServerLoop()
        {
            while (true)
            {
                _thread_mre.WaitOne();
                TcpClient client = _tcp_listener.AcceptTcpClient();

                /*if (_registered_servers == null || _registered_servers.Count == 0)
                 * {
                 *  _registered_servers = DbServer.SelectActiveGameServers();
                 * } */

                var    request      = client.Receive <ClientToHeadServerMessage>();
                Thread clientThread = null;
                switch (request)
                {
                case ClientToHeadServerMessage.ReqServersList:
                    var servers_list         = DbServer.SelectActiveGameServers();
                    var servers_list_handler = new ServersListConnectionProcessor(client, servers_list);
                    clientThread = new Thread(
                        new ThreadStart(servers_list_handler.ProcessConnection)
                        );
                    break;

                case ClientToHeadServerMessage.ReqLogIn:
                    var to_app_message_handler = new AuthenticationConnectionProcessor(
                        client,
                        AuthServer
                        );
                    clientThread = new Thread(
                        new ThreadStart(to_app_message_handler.ProcessLogin)
                        );
                    break;

                case ClientToHeadServerMessage.ReqSignUp:
                    to_app_message_handler = new AuthenticationConnectionProcessor(
                        client,
                        AuthServer
                        );
                    clientThread = new Thread(
                        new ThreadStart(to_app_message_handler.ProcessSignup)
                        );
                    break;
                }
                clientThread?.Start();
            }
        }
예제 #2
0
        public void DispatchClient(TcpClient client)
        {
            var    subsystem_info = client.Receive <SubsystemIdentifier>().Identifier;
            Thread clientThread   = null;

            while (client.Available == 0)
            {
                Thread.Sleep(50);
            }
            if (subsystem_info == "GAME_CLIENT")
            {
                var request = client.Receive <ClientToHeadServerMessage>();
                switch (request)
                {
                case ClientToHeadServerMessage.ReqServersList:
                    var servers_list           = _head_server.DbServer.SelectActiveGameServers();
                    var servers_list_processor = new ServersListProcessor(client, servers_list);
                    clientThread = new Thread(
                        new ThreadStart(servers_list_processor.ProcessConnection)
                        );
                    break;

                case ClientToHeadServerMessage.ReqLogIn:
                    var to_app_message_processor = new AuthenticationConnectionProcessor(
                        client,
                        _head_server.AuthServer
                        );
                    clientThread = new Thread(
                        new ThreadStart(to_app_message_processor.ProcessLogin)
                        );
                    break;

                case ClientToHeadServerMessage.ReqSignUp:
                    to_app_message_processor = new AuthenticationConnectionProcessor(
                        client,
                        _head_server.AuthServer
                        );
                    clientThread = new Thread(
                        new ThreadStart(to_app_message_processor.ProcessSignup)
                        );
                    break;
                }
            }
            else if (subsystem_info == "GAME_SERVER")
            {
                var request = client.Receive <GameToHeadServerMessage>();
                switch (request)
                {
                case GameToHeadServerMessage.ReqRegister:
                    var server_registration_processor = new ServerRegistrationProcessor(
                        client,
                        _head_server
                        );
                    clientThread = new Thread(
                        new ThreadStart(server_registration_processor.ProcessServerRegister)
                        );
                    break;
                }
            }
            clientThread?.Start();
        }