/// <summary> /// Whenever the "newuser" command is recieved, this method is called to /// add the new users information into the database /// </summary> /// <param name="Recv">Array of parms sent by the server</param> private void CreateNewUser(Dictionary <string, string> Recv) { // Make sure the user doesnt exist already try { // Check to see if user exists if (DatabaseUtility.UserExists(databaseDriver, Recv["nick"])) { Stream.SendAsync(@"\error\\err\516\fatal\\errmsg\This account name is already in use!\id\1\final\"); Disconnect(DisconnectReason.CreateFailedUsernameExists); return; } // We need to decode the Gamespy specific encoding for the password string Password = GamespyUtils.DecodePassword(Recv["passwordenc"]); string Cc = (RemoteEndPoint.AddressFamily == AddressFamily.InterNetwork) //? GeoIP.GetCountryCode(RemoteEndPoint.Address) //: "US"; ? "US" : "US"; // Attempt to create account. If Pid is 0, then we couldnt create the account. TODO: Handle Unique Nickname if ((PlayerId = DatabaseUtility.CreateUser(databaseDriver, Recv["nick"], Password, Recv["email"], Cc, Recv["nick"])) == 0) { PresenceServer.SendError(Stream, 516, "An error oncurred while creating the account!"); Disconnect(DisconnectReason.CreateFailedDatabaseError); return; } Stream.SendAsync(@"\nur\\userid\{0}\profileid\{0}\id\1\final\", PlayerId); } catch (Exception e) { // Check for invalid query params if (e is KeyNotFoundException) { PresenceServer.SendError(Stream, 516, "Invalid response received from the client!"); } else { PresenceServer.SendError(Stream, 516, "An error oncurred while creating the account!"); LogWriter.Log.Write("An error occured while trying to create a new User account :: " + e.Message, LogLevel.Error); } Disconnect(DisconnectReason.GeneralError); return; } }