private static async Task Register(ConnectedClient client) { string registerUsername = client.reader.ReadString(); string registerPassword = client.reader.ReadString(); string registerEmail = client.reader.ReadString(); string isValid = CheckAccountInfoIsValid(registerUsername, registerPassword, registerEmail); if (isValid != "Valid") { client.Write(MessageType.RegisterError, new string[] { isValid }); return; } string registerSalt = ""; var registerHashedPassword = Passwords.Hash(registerPassword, out registerSalt); Databases.Accounts.Users.Add(new User() { Username = registerUsername, PasswordHash = registerHashedPassword, Email = registerEmail, Salt = registerSalt, CreationDate = DateTime.UtcNow, LastLoginDate = DateTime.UtcNow }); await Databases.Accounts.SaveChangesAsync(); OutputLogAddInvoke($"User account {registerUsername} has been created!"); client.Write(MessageType.RegisterConfirmed, new string[] { }); }
private static async Task Login(ConnectedClient client) { string loginUsername = client.reader.ReadString(); string loginSentPassword = client.reader.ReadString(); var user = await Databases.Accounts.Users.FindAsync(loginUsername); //Username checks if (user == null) { client.Write(MessageType.LoginError, new string[] { ResErrors.ErrorUsernameDoesNotExist }); return; } if (user.LoggedIn == true) { client.Write(MessageType.LoginError, new string[] { ResErrors.ErrorUserIsAlreadyLoggedIn }); return; } if (!Passwords.Verify(loginSentPassword, user.PasswordHash)) { client.Write(MessageType.LoginError, new string[] { ResErrors.ErrorPasswordIncorrect }); return; } client.Write(MessageType.LoginConfirmed, new string[] { }); client.SetUserName(loginUsername); OutputLogAddInvoke($"Player {client.UserName} has logged in!"); UpdatePlayerCountInvoke(); }
private static void SendCharacterList(ConnectedClient client) { Character[] characters = Databases.GetCharactersForAccount(client.UserName).ToArray(); List <string> messages = new List <string>(); messages.Add(characters.Length.ToString()); foreach (Character c in characters) { messages.AddRange(GetCharacterMessagesToSend(c)); } client.Write(MessageType.CharacterList, messages.ToArray()); }
public async static void ListenForConnection() { while (listener != null) { if (!listener.Pending()) { continue; } TcpClient client = await listener.AcceptTcpClientAsync(); NetworkStream stream = client.GetStream(); ConnectedClient newClient = new ConnectedClient(client, stream); connectedClients.Add(newClient); newClient.Write(MessageType.Handshake, new string[] { "RPGGameServer" }); OutputLogAddInvoke("Incoming connection!"); } }
private void AcceptSocketCallback(IAsyncResult ar) { try { if (!listening) { return; } TcpListener myTcpListener = (TcpListener)ar.AsyncState; Socket s = myTcpListener.EndAcceptSocket(ar); ConnectedClient nieuweClient = new ConnectedClient(s); nieuweClient.DataOntvangen += Client_DataOntvangen; Clients.Add(nieuweClient); nieuweClient.BeginRead(); nieuweClient.Write("Verbonden"); myTcpListener.BeginAcceptSocket(new AsyncCallback(AcceptSocketCallback), myTcpListener); } catch (Exception ex) { txtOntvangen.AppendText(ex.Message + Environment.NewLine); } }
private void DataOntvangenVanClient(ConnectedClient client, string data) { txtOntvangen.Text += data + Environment.NewLine; string[] data2 = data.Split(';'); switch (data2[0]) { case "Login": DataRow[] rijen = ChatDatabase.Tables[0].Select("gebruikersnaam='" + data2[1] + "'", "id ASC"); if (rijen.Length == 0) { client.Write("Gebruiker bestaat niet"); } else if (rijen.First().Field <string>(2) == data2[2]) { lstGebruikers.Items.Add(data2[1]); client.User_ID = rijen.First().Field <int>(0); client.Write("Ingelogd;" + client.User_ID.ToString() + "," + data2[1]); foreach (ConnectedClient cl in Clients) { if (cl.CanWrite & (cl.User_ID != -1)) { cl.Write(string.Join(";", (new string[] { "Online users" }).Union(Clients .Except(new ConnectedClient[] { cl }) .Where(T => T.User_ID != -1) .Select(T => T.User_ID + "," + ChatDatabase.Tables[0].Select("id=" + T.User_ID.ToString(), "id ASC").First().Field <string>(1)) ).ToArray())); } } } else { client.Write("Foutief wachtwoord"); } break; case "Logout": client.Write("Uitgelogd"); lstGebruikers.Items.Remove(ChatDatabase.Tables[0].Select("id=" + client.User_ID.ToString()).First().Field <string>(1)); client.User_ID = -1; foreach (ConnectedClient cl in Clients.Except(new ConnectedClient[] { client })) { if (cl.CanWrite & (cl.User_ID != -1)) { cl.Write(string.Join(";", (new string[] { "Online users" }).Union(Clients .Except(new ConnectedClient[] { cl }) .Where(T => T.User_ID != -1) .Select(T => T.User_ID + "," + ChatDatabase.Tables[0].Select("id=" + T.User_ID.ToString(), "id ASC").First().Field <string>(1)) ).ToArray())); } } client.DataOntvangen -= Client_DataOntvangen; client.StopListening(); break; case "Registreer": DataRow[] rijen2 = ChatDatabase.Tables[0].Select("gebruikersnaam='" + data2[1] + "'", "id ASC"); if (data2[1].Replace(" ", "").Replace("\r", "").Replace("\n", "").Replace("\t", "") == "") { client.Write("Geef een gebruikersnaam op"); } else if (data2[2].Replace(" ", "").Replace("\r", "").Replace("\n", "").Replace("\t", "") == "") { client.Write("Geef een wachtwoord op"); } else if (rijen2.Length == 0) { DataRow nieuw = ChatDatabase.Tables[0].NewRow(); nieuw.SetField <string>(1, data2[1]); nieuw.SetField <string>(2, data2[2]); ChatDatabase.Tables[0].Rows.Add(nieuw); client.Write("Gebruiker aangemaakt"); ChatDatabase.WriteXml(db_file); } else { client.Write("Gebruikersnaam niet meer beschikbaar"); } break; case "Bericht": // Bericht;ik.id;ik.user;dest.id;bericht ConnectedClient[] dest = Clients.Where(T => T.User_ID == Convert.ToInt32(data2[3])).ToArray(); if (dest.Length == 1) { dest[0].Write(data); } DataRow nieuw2 = ChatDatabase.Tables[1].NewRow(); nieuw2.SetField <int>(1, Convert.ToInt32(data2[1])); nieuw2.SetField <int>(2, Convert.ToInt32(data2[3])); nieuw2.SetField <string>(3, data2[4]); //nieuw2.SetField<bool>(4, dest.Length == 1); //nieuw2.SetField<bool>(5, false); ChatDatabase.Tables[1].Rows.Add(nieuw2); ChatDatabase.WriteXml(db_file); break; } }