Esempio n. 1
0
        private void ProcessProfileCreateCharacterRequest(RequestSetup requestInProcess)
        {
            ProfileCreateCharacterRequest request = requestInProcess.request as ProfileCreateCharacterRequest;
            int characterId = accountQuerier.CreateCharacterProfile(
                request.accountId,
                request.productName.MakeString(),
                request.characterName.MakeString(),
                request.state);

            if (characterId == -1)
            {
                // We could return a result here - however the game server could request a load, and when that fails it'll know something is up
                Console.Error.WriteLine("Failed to create new character: accountId: {0}, productName: {1}, characterName: {2}, state: {3}",
                                        request.accountId, request.productName, request.characterName, request.state);
            }

            ProfileCreateCharacterResponse response = (ProfileCreateCharacterResponse)IntrepidSerialize.TakeFromPool(PacketType.ProfileCreateCharacterResponse);

            response.accountId   = request.accountId;
            response.characterId = characterId;

            ConnectionState cs = connections[requestInProcess.connectionId];

            cs.Send(response);
        }
Esempio n. 2
0
        void SubmitNewQuery()
        {
            if (requestInProcess != null)
            {
                if (connections.ContainsKey(requestInProcess.connectionId))
                {
                    switch (requestInProcess.request.PacketType)
                    {
                    case PacketType.UserAccountRequest:
                        ProcessUserAccountRequest(requestInProcess);
                        break;

                    case PacketType.ProfileCreateCharacterRequest:
                        ProcessProfileCreateCharacterRequest(requestInProcess);
                        break;

                    case PacketType.ProfileUpdateCharacter:
                        ProcessProfileUpdateCharacter(requestInProcess);
                        break;

                    default:
                        throw new Exception(string.Format("Unsupported packet type: {0}", requestInProcess.request.PacketType));
                    }
                }

                requestInProcess = null;
            }
        }
Esempio n. 3
0
        void FindNewDbQuery()
        {
            if (requestInProcess == null)
            {
                lock (connectionsLock)
                {
                    foreach (var v in connections)// TODO: if there are multiple connections, then we will need to classify each request to match it to the the connection from which it came
                    {
                        ConnectionState connection = v.Value;
                        if (connection.HasNewData() == true)
                        {
                            List <BasePacket> packets = connection.RetrieveData();
                            foreach (var packet in packets)
                            {
                                AddRequest(connection.connectionId, packet);
                            }
                            break;
                        }
                    }
                }

                if (userAccountRequests.Count > 0)
                {
                    requestInProcess = userAccountRequests.Dequeue();
                }
            }
        }
Esempio n. 4
0
        public void AddRequest(int connectionId, BasePacket uar)
        {
            RequestSetup rs = new RequestSetup();

            rs.id           = requestId++;
            rs.request      = uar;
            rs.connectionId = connectionId;

            userAccountRequests.Enqueue(rs);
        }
Esempio n. 5
0
        private void ProcessProfileUpdateCharacter(RequestSetup requestInProcess)
        {
            ProfileUpdateCharacter request = requestInProcess.request as ProfileUpdateCharacter;
            bool result = accountQuerier.UpdateCharacterProfile(
                request.characterId,
                request.state);

            if (!result)
            {
                // If this fails there is little the game can do about it, so possibly not worth telling it
                Console.Error.WriteLine("Failed to update character: characterId: {0}, state: {1}",
                                        request.characterId, request.state);
            }
        }
Esempio n. 6
0
        private void ProcessUserAccountRequest(RequestSetup requestInProcess)
        {
            UserAccountRequest request   = requestInProcess.request as UserAccountRequest;
            PlayerSaveState    saveState = accountQuerier.GetPlayerSaveState(
                request.username.MakeString(),
                request.password.MakeString(),
                request.product_name.MakeString());

            UserAccountResponse response = (UserAccountResponse)IntrepidSerialize.TakeFromPool(PacketType.UserAccountRequest);

            response.connectionId   = request.connectionId;
            response.isValidAccount = saveState != null;
            if (saveState != null)
            {
                response.state = saveState;
            }

            ConnectionState cs = connections[requestInProcess.connectionId];

            cs.Send(response);
        }