Esempio n. 1
0
        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[] { });
        }
Esempio n. 2
0
        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();
        }
Esempio n. 3
0
        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());
        }
Esempio n. 4
0
        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!");
            }
        }
Esempio n. 5
0
        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);
            }
        }
Esempio n. 6
0
        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;
            }
        }