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); }
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; } }
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(); } } }
public void AddRequest(int connectionId, BasePacket uar) { RequestSetup rs = new RequestSetup(); rs.id = requestId++; rs.request = uar; rs.connectionId = connectionId; userAccountRequests.Enqueue(rs); }
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); } }
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); }