/// <summary> /// Sends a generic login request /// </summary> public void SignIn(MstProperties data, SignInCallback callback, IClientSocket connection) { Logs.Debug("Signing in..."); if (!connection.IsConnected) { callback.Invoke(null, "Not connected to server"); return; } IsNowSigningIn = true; // We first need to get an aes key // so that we can encrypt our login data Mst.Security.GetAesKey(aesKey => { if (aesKey == null) { IsNowSigningIn = false; callback.Invoke(null, "Failed to log in due to security issues"); return; } var encryptedData = Mst.Security.EncryptAES(data.ToBytes(), aesKey); connection.SendMessage((short)MstMessageCodes.SignInRequest, encryptedData, (status, response) => { IsNowSigningIn = false; if (status != ResponseStatus.Success) { ClearAuthToken(); callback.Invoke(null, response.AsString("Unknown error")); return; } AccountInfo = response.Deserialize(new AccountInfoPacket()); IsSignedIn = true; if (RememberMe) { SaveAuthToken(AccountInfo.Token); } else { ClearAuthToken(); } callback.Invoke(AccountInfo, null); OnSignedInEvent?.Invoke(); }); }, connection); }
/// <summary> /// Sends a registration request to given connection /// </summary> public void SignUp(MstProperties data, SuccessCallback callback, IClientSocket connection) { if (IsNowSigningIn) { callback.Invoke(false, "Signing in is already in progress"); return; } if (IsSignedIn) { callback.Invoke(false, "Already signed in"); return; } if (!connection.IsConnected) { callback.Invoke(false, "Not connected to server"); return; } // We first need to get an aes key // so that we can encrypt our login data Mst.Security.GetAesKey(aesKey => { if (aesKey == null) { callback.Invoke(false, "Failed to register due to security issues"); return; } var encryptedData = Mst.Security.EncryptAES(data.ToBytes(), aesKey); connection.SendMessage((short)MstMessageCodes.SignUp, encryptedData, (status, response) => { if (status != ResponseStatus.Success) { callback.Invoke(false, response.AsString("Unknown error")); return; } callback.Invoke(true, null); OnSignedUpEvent?.Invoke(); }); }, connection); }
/// <summary> /// Sends a new password to server /// </summary> public void ChangePassword(MstProperties data, SuccessCallback callback, IClientSocket connection) { if (!connection.IsConnected) { callback.Invoke(false, "Not connected to server"); return; } connection.SendMessage((short)MstMessageCodes.ChangePassword, data.ToBytes(), (status, response) => { if (status != ResponseStatus.Success) { callback.Invoke(false, response.AsString("Unknown error")); return; } callback.Invoke(true, null); OnPasswordChangedEvent?.Invoke(); }); }
/// <summary> /// Sends a request to create a lobby, using a specified factory /// </summary> public void CreateLobby(string factory, MstProperties options, CreateLobbyCallback calback, IClientSocket connection) { if (!connection.IsConnected) { calback.Invoke(null, "Not connected"); return; } options.Set(MstDictKeys.lobbyFactoryId, factory); connection.SendMessage((short)MstMessageCodes.CreateLobby, options.ToBytes(), (status, response) => { if (status != ResponseStatus.Success) { calback.Invoke(null, response.AsString("Unknown error")); return; } var lobbyId = response.AsInt(); calback.Invoke(lobbyId, null); }); }
/// <summary> /// Retrieves a list of public games, which pass a provided filter. /// (You can implement your own filtering by extending modules or "classes" /// that implement <see cref="IGamesProvider"/>) /// </summary> public void FindGames(MstProperties filter, FindGamesCallback callback, IClientSocket connection) { if (!connection.IsConnected) { Games = new List <GameInfoPacket>(); Logs.Error("Not connected"); callback.Invoke(Games); return; } connection.SendMessage((short)MstMessageCodes.FindGamesRequest, filter.ToBytes(), (status, response) => { if (status != ResponseStatus.Success) { Games = new List <GameInfoPacket>(); Logs.Error(response.AsString("Unknown error while requesting a list of games")); callback.Invoke(Games); return; } Games = response.DeserializeList(() => new GameInfoPacket()).ToList(); callback.Invoke(Games); }); }
/// <summary> /// Set's lobby user properties (current player sets his own properties, /// which can be accessed by game server and etc.) /// </summary> public void SetMyProperties(MstProperties properties, SuccessCallback callback, IClientSocket connection) { connection.SendMessage((short)MstMessageCodes.SetMyLobbyProperties, properties.ToBytes(), Mst.Create.SuccessCallback(callback)); }
/// <summary> /// Sends a generic login request /// </summary> public void SignIn(MstProperties data, SignInCallback callback, IClientSocket connection) { Logs.Debug("Signing in..."); if (!connection.IsConnected) { callback.Invoke(null, "Not connected to server"); return; } IsNowSigningIn = true; // We first need to get an aes key // so that we can encrypt our login data Mst.Security.GetAesKey(aesKey => { if (aesKey == null) { IsNowSigningIn = false; callback.Invoke(null, "Failed to log in due to security issues"); return; } var encryptedData = Mst.Security.EncryptAES(data.ToBytes(), aesKey); connection.SendMessage((short)MstMessageCodes.SignIn, encryptedData, (status, response) => { IsNowSigningIn = false; if (status != ResponseStatus.Success) { ClearAuthToken(); callback.Invoke(null, response.AsString("Unknown error")); return; } // Parse account info var accountInfoPacket = response.Deserialize(new AccountInfoPacket()); AccountInfo = new ClientAccountInfo() { Id = accountInfoPacket.Id, Username = accountInfoPacket.Username, Email = accountInfoPacket.Email, PhoneNumber = accountInfoPacket.PhoneNumber, Facebook = accountInfoPacket.Facebook, Token = accountInfoPacket.Token, IsAdmin = accountInfoPacket.IsAdmin, IsGuest = accountInfoPacket.IsGuest, IsEmailConfirmed = accountInfoPacket.IsEmailConfirmed, Properties = accountInfoPacket.Properties, }; // If RememberMe is checked on and we are not guset, then save auth token if (RememberMe && !AccountInfo.IsGuest && !string.IsNullOrEmpty(AccountInfo.Token)) { SaveAuthToken(AccountInfo.Token); } else { ClearAuthToken(); } IsSignedIn = true; callback.Invoke(AccountInfo, null); OnSignedInEvent?.Invoke(); }); }, connection); }