Пример #1
0
        protected void OnJoinRoomRequest(JoinRoomHttpRequest request, HttpListenerRequest httpRequest, HttpListenerResponse httpResponse)
        {
            if (accountDatabase.TryGetValue(request.accountId, accountFactory, out TAccount account))
            {
                SendResponse(httpResponse, new JoinRoomHttpResponse((int)JoinRoomHttpResponse.ResultType.IncorrectUsername));

                if (logger.Log(LogType.Trace))
                {
                    logger.Trace($"Sended HTTP server join room response, incorrect id. (id: {request.accountId}, remoteEndPoint: {httpRequest.RemoteEndPoint}, roomId: {request.roomId})");
                }

                return;
            }

            if (request.accessToken != account.AccessToken)
            {
                SendResponse(httpResponse, new JoinRoomHttpResponse((int)JoinRoomHttpResponse.ResultType.IncorrectAccessToken));

                if (logger.Log(LogType.Trace))
                {
                    logger.Trace($"Sended HTTP server join room response, incorrect access token. (id: {request.accountId}, remoteEndPoint: {httpRequest.RemoteEndPoint}, roomId: {request.roomId})");
                }

                return;
            }

            if (!rooms.AddPlayer(request.roomId, account, out RoomInfo roomInfo, out Token connectToken))
            {
                SendResponse(httpResponse, new JoinRoomHttpResponse((int)JoinRoomHttpResponse.ResultType.FailedToJoin));

                if (logger.Log(LogType.Trace))
                {
                    logger.Trace($"Sended HTTP server join room response, failed to join. (id: {request.accountId}, remoteEndPoint: {httpRequest.RemoteEndPoint}, roomId: {request.roomId})");
                }

                return;
            }

            SendResponse(httpResponse, new JoinRoomHttpResponse((int)JoinRoomHttpResponse.ResultType.Success, connectToken));

            if (logger.Log(LogType.Info))
            {
                logger.Info($"Account joined the room. (id: {request.accountId}, remoteEndPoint: {httpRequest.RemoteEndPoint}, roomId: {request.roomId})");
            }
        }
        protected void OnJoinRoomRequest(NameValueCollection queryString, HttpListenerRequest httpRequest, HttpListenerResponse httpResponse)
        {
            IHttpResponse response;

            try
            {
                var request = new JoinRoomHttpRequest(queryString);

                if (accountDatabase.TryGetValue(request.accountId, accountFactory, out TAccount account))
                {
                    response = new JoinRoomHttpResponse((int)JoinRoomHttpResponse.ResultType.IncorrectUsername);
                    SendResponse(httpResponse, response);

                    if (logger.Log(LogType.Trace))
                    {
                        logger.Trace($"Sended HTTP server join room response, incorrect id. (id: {request.accountId}, remoteEndPoint: {httpRequest.RemoteEndPoint}, roomId: {request.roomId})");
                    }

                    return;
                }

                if (request.accessToken != account.AccessToken)
                {
                    response = new JoinRoomHttpResponse((int)JoinRoomHttpResponse.ResultType.IncorrectAccessToken);
                    SendResponse(httpResponse, response);

                    if (logger.Log(LogType.Trace))
                    {
                        logger.Trace($"Sended HTTP server join room response, incorrect access token. (id: {request.accountId}, remoteEndPoint: {httpRequest.RemoteEndPoint}, roomId: {request.roomId})");
                    }

                    return;
                }

                if (!rooms.JoinPlayer(request.roomId, account, out RoomInfo roomInfo, out Token connectToken))
                {
                    response = new JoinRoomHttpResponse((int)JoinRoomHttpResponse.ResultType.FailedToJoin);
                    SendResponse(httpResponse, response);

                    if (logger.Log(LogType.Trace))
                    {
                        logger.Trace($"Sended HTTP server join room response, failed to join. (id: {request.accountId}, remoteEndPoint: {httpRequest.RemoteEndPoint}, roomId: {request.roomId})");
                    }

                    return;
                }

                response = new JoinRoomHttpResponse((int)JoinRoomHttpResponse.ResultType.Success, connectToken);
                SendResponse(httpResponse, response);

                if (logger.Log(LogType.Info))
                {
                    logger.Info($"Account joined the room. (id: {request.accountId}, remoteEndPoint: {httpRequest.RemoteEndPoint}, roomId: {request.roomId})");
                }
            }
            catch
            {
                response = new JoinRoomHttpResponse((int)JoinRoomHttpResponse.ResultType.BadRequest);
                SendResponse(httpResponse, response);

                if (logger.Log(LogType.Trace))
                {
                    logger.Trace($"Bad join room request. (remoteEndPoint: {httpRequest.RemoteEndPoint})");
                }
            }
        }