Beispiel #1
0
        public void HandleGetAccountsResponse(JamPacket packet)
        {
            if (packet.Header.DataType != GetAccountsResponse.DATA_TYPE)
            {
                return;
            }

            App.Current.Dispatcher.Invoke(() =>
            {
                MainWindow main = App.Current.MainWindow as MainWindow;
                GetAccountsResponse response = new GetAccountsResponse(packet.Data, main.Client.Serializer);

                foreach (Tuple <Account, bool> tuple in response.Accounts)
                {
                    Account account = tuple.Item1;
                    bool online     = tuple.Item2;

                    if (account.AccountID != LoggedInAccount.Account.AccountID)
                    {
                        DisplayableAccount displayableAccount = new DisplayableAccount(account, online);
                        Accounts.Add(displayableAccount);
                    }
                }
            });
        }
Beispiel #2
0
        private void Register(object sender, RoutedEventArgs e)
        {
            SaveLoginSettings();
            LoginMessageText      = string.Empty;
            AwaitingLoginResponse = true;
            Cursor = Cursors.Wait;

            MainWindow main = App.Current.MainWindow as MainWindow;

            Task.Run(() =>
            {
                main.Client.Connect(address, port, CONNECT_TIMEOUT);
                if (!main.Client.IsConnected)
                {
                    App.Current.Dispatcher.Invoke(() =>
                    {
                        main.Client.Dispose();
                        loginMessageText      = SERVER_UNREACHABLE;
                        AwaitingLoginResponse = false;
                        if (!WorkInProgress)
                        {
                            Cursor = Cursors.Arrow;
                        }
                    });
                    return;
                }

                RegisterAccountRequest request = new RegisterAccountRequest(username, PasswordBox.Password, main.Client.Serializer);
                JamPacket requestPacket        = new JamPacket(Guid.Empty, Guid.Empty, RegisterAccountRequest.DATA_TYPE, request.GetBytes());
                main.Client.Send(requestPacket);
            });
        }
        private static void RegisterAccount(JamServerConnection serverConnection, JamPacket packet)
        {
            RegisterAccountRequest register = new RegisterAccountRequest(packet.Data, serverConnection.Serializer);

            RegisterAccountResponse response;

            try
            {
                Account createdAccount = AccountFactory.Generate(register.Username, register.Password, Program.Server.HashFactory, true);
                response = new RegisterAccountResponse(RegisterAccountResponse.AccountRegistrationResult.Good, createdAccount, serverConnection.Serializer);

                Console.WriteLine("Registered new Account: {0} - {1}", createdAccount.AccountID, createdAccount.Username);
            }
            catch (DbUpdateException)
            {
                response = new RegisterAccountResponse(RegisterAccountResponse.AccountRegistrationResult.Bad, null, serverConnection.Serializer);
            }
            catch (EntityException)
            {
                serverConnection.Server.Dispose();
                return;
            }

            JamPacket responsePacket = new JamPacket(Guid.Empty, Guid.Empty, RegisterAccountResponse.DATA_TYPE, response.GetBytes());

            serverConnection.Send(responsePacket);
        }
Beispiel #4
0
        public void ReceiveMessage(JamPacket packet)
        {
            if (packet.Header.DataType != SendMessageImperative.DATA_TYPE)
            {
                return;
            }

            App.Current.Dispatcher.Invoke(() =>
            {
                MainWindow main = App.Current.MainWindow as MainWindow;

                SendMessageImperative imperative = new SendMessageImperative(packet.Data, main.Client.Serializer);
                Guid senderID        = packet.Header.Sender;
                DateTime sendTimeUtc = packet.Header.SendTimeUtc;

                DisplayableAccount senderAccount = Accounts.SingleOrDefault(x => x.Account.AccountID == senderID);
                if (senderAccount == null)
                {
                    return;
                }

                DisplayableMessage receivedMessage = new DisplayableMessage(DisplayableMessage.MessageType.Remote, senderAccount, sendTimeUtc, imperative.Message);
                if (SelectedAccount != null && SelectedAccount.Account.AccountID == senderID)
                {
                    receivedMessage.Seen = true;
                }

                senderAccount.AddMessage(receivedMessage);

                NotifyPropertyChanged(nameof(UnseenMessages));
            });
        }
Beispiel #5
0
        public void HandleRegistrationResponse(JamPacket packet)
        {
            if (packet.Header.DataType != RegisterAccountResponse.DATA_TYPE)
            {
                return;
            }

            App.Current.Dispatcher.Invoke(() =>
            {
                MainWindow main = App.Current.MainWindow as MainWindow;
                RegisterAccountResponse response = new RegisterAccountResponse(packet.Data, main.Client.Serializer);

                if (response.Result == RegisterAccountResponse.AccountRegistrationResult.Good)
                {
                    main.Client.Dispose();
                    Login(null, null);
                    return;
                }
                else
                {
                    main.Client.Dispose();
                    LoginMessageText = USERNAME_IN_USE;
                    ClearPassword();
                }

                AwaitingLoginResponse = false;
                if (!WorkInProgress)
                {
                    Cursor = Cursors.Arrow;
                }
            });
        }
Beispiel #6
0
        internal static void Route(JamServerConnection serverConnection, JamPacket packet)
        {
            JamServer server    = serverConnection.Server;
            Guid      recipient = packet.Header.Receipient;

            if (recipient == Guid.Empty)
            {
                InternalServerInterpreter.Interpret(serverConnection, packet);
                return;
            }

            JamServerConnection recipientConnection = server.GetConnection(recipient);

            if (recipientConnection == null)
            {
                server.OnUndelieveredMessageReceived(new JamServer.MessageReceivedEventArgs()
                {
                    ServerConnection = serverConnection, Packet = packet
                });
            }
            else
            {
                recipientConnection.Send(packet);
            }
        }
Beispiel #7
0
        public void Login(string username, string password)
        {
            LoginRequest loginRequest = new LoginRequest(AppSigniture, username, password, Serializer);

            JamPacket packet = new JamPacket(Guid.Empty, Guid.Empty, LoginRequest.DATA_TYPE, loginRequest.GetBytes());

            Send(packet);
        }
Beispiel #8
0
        public void GetAccounts()
        {
            MainWindow main = App.Current.MainWindow as MainWindow;

            GetAccountsRequest request       = new GetAccountsRequest(main.Client.Serializer);
            JamPacket          requestPacket = new JamPacket(Guid.Empty, Guid.Empty, GetAccountsRequest.DATA_TYPE, request.GetBytes());

            main.Client.Send(requestPacket);
        }
        private async void PollConnection(int pollFrequency)
        {
            while (Alive)
            {
                await Task.Delay(pollFrequency);

                PingRequest pingRequest = new PingRequest(DateTime.UtcNow);
                JamPacket   pingPacket  = new JamPacket(PingRequest.DATA_TYPE, pingRequest.GetBytes());
                Send(pingPacket);
            }
        }
 private static void HandleAccountRegistrationResponse(JamPacket packet)
 {
     App.Current.Dispatcher.Invoke(() =>
     {
         MainWindow main = App.Current.MainWindow as MainWindow;
         if (main.ViewFrame.Content is LoginPage page)
         {
             Task.Run(() => page.HandleRegistrationResponse(packet));
         }
     });
 }
 private static void HandleGetAccountsResponse(JamPacket packet)
 {
     App.Current.Dispatcher.Invoke(() =>
     {
         MainWindow main = App.Current.MainWindow as MainWindow;
         if (main.ViewFrame.Content is MessagePage page)
         {
             Task.Run(() => page.HandleGetAccountsResponse(packet));
         }
     });
 }
 private static void HandleOnlineStatusChangedImperative(JamPacket packet)
 {
     App.Current.Dispatcher.Invoke(() =>
     {
         MainWindow main = App.Current.MainWindow as MainWindow;
         if (main.ViewFrame.Content is MessagePage page)
         {
             Task.Run(() => page.HandleAccountOnlineStatusChangedImperative(packet));
         }
     });
 }
 private static void HandleSendMessageImperative(JamPacket packet)
 {
     App.Current.Dispatcher.Invoke(() =>
     {
         MainWindow main = App.Current.MainWindow as MainWindow;
         if (main.ViewFrame.Content is MessagePage page)
         {
             Task.Run(() => page.ReceiveMessage(packet));
         }
     });
 }
Beispiel #14
0
        private void PollConnection(int pollFrequency)
        {
            while (alive)
            {
                Thread.Sleep(pollFrequency);

                PingRequest pingRequest = new PingRequest(DateTime.UtcNow, Serializer);

                JamPacket pingPacket = new JamPacket(Guid.Empty, Guid.Empty, PingRequest.DATA_TYPE, pingRequest.GetBytes());
                Send(pingPacket);
            }
        }
Beispiel #15
0
        internal static void OnClientIdentified(object sender, JamServer.IdentifiedConnectionEventArgs e)
        {
            Console.WriteLine("Client: {0} identified as: {1} - {2}.", e.RemoteEndPoint, e.Account.AccountID, e.Account.Username);

            AccountOnlineStatusChangedImperative imperative = new AccountOnlineStatusChangedImperative(e.Account, true, e.ServerConnection.Serializer);

            JamPacket imperativePacket = new JamPacket(Guid.Empty, Guid.Empty, AccountOnlineStatusChangedImperative.DATA_TYPE, imperative.GetBytes());

            foreach (JamServerConnection connection in e.ServerConnection.Server.GetAllConnections())
            {
                connection.Send(imperativePacket);
            }
        }
        internal static void Interpret(JamServerConnection serverConnection, JamPacket packet)
        {
            switch (packet.Header.DataType)
            {
            case RegisterAccountRequest.DATA_TYPE:
                RegisterAccount(serverConnection, packet);
                break;

            case GetAccountsRequest.DATA_TYPE:
                GetRegisteredAccounts(serverConnection);
                break;
            }
        }
Beispiel #17
0
        public void RespondToPing(JamPacket pingPacket)
        {
            if (pingPacket.Header.DataType != PingRequest.DATA_TYPE)
            {
                return;
            }

            PingRequest  request  = new PingRequest(pingPacket.Data);
            PingResponse response = new PingResponse(request.PingTimeUtc, DateTime.UtcNow);

            JamPacket responsePacket = new JamPacket(PingResponse.DATA_TYPE, response.GetBytes());

            Send(responsePacket);
        }
Beispiel #18
0
        private void Listen()
        {
            while (alive)
            {
                JamPacket packet = JamPacket.Receive(stream);
                if (packet == null)
                {
                    Dispose();
                    return;
                }

                InternalClientInterpreter.Interpret(this, packet);
            }
        }
Beispiel #19
0
        private void Listen()
        {
            while (alive)
            {
                JamPacket packet = JamPacket.Receive(stream);
                if (packet == null)
                {
                    Dispose();
                    return;
                }

                JamPacketRouter.Route(this, packet);
            }
        }
        internal static void Interpret(JamClient client, JamPacket packet)
        {
            switch (packet.Header.DataType)
            {
            case LoginResponse.DATA_TYPE:
                client.HandleLoginResponse(packet);
                break;

            case PingRequest.DATA_TYPE:
                client.RespondToPing(packet);
                break;

            default:
                client.OnMessageReceived(new JamClient.MessageReceivedEventArgs()
                {
                    Packet = packet
                });
                break;
            }
        }
        internal static void Interpret(JamServerConnection serverConnection, JamPacket packet)
        {
            switch (packet.Header.DataType)
            {
            case LoginRequest.DATA_TYPE:
                serverConnection.RespondToLogin(packet);
                break;

            case PingRequest.DATA_TYPE:
                serverConnection.RespondToPing(packet);
                break;

            default:
                serverConnection.Server.OnMessageReceived(new JamServer.MessageReceivedEventArgs()
                {
                    ServerConnection = serverConnection, Packet = packet
                });
                break;
            }
        }
        internal static void Interpret(JamPacket packet)
        {
            switch (packet.Header.DataType)
            {
            case RegisterAccountResponse.DATA_TYPE:
                HandleAccountRegistrationResponse(packet);
                break;

            case GetAccountsResponse.DATA_TYPE:
                HandleGetAccountsResponse(packet);
                break;

            case AccountOnlineStatusChangedImperative.DATA_TYPE:
                HandleOnlineStatusChangedImperative(packet);
                break;

            case SendMessageImperative.DATA_TYPE:
                HandleSendMessageImperative(packet);
                break;
            }
        }
Beispiel #23
0
        public void RespondToPing(JamPacket pingPacket)
        {
            if (pingPacket.Header.DataType != PingRequest.DATA_TYPE)
            {
                return;
            }

            PingRequest request = new PingRequest(pingPacket.Data, Serializer);

            PingResponse response = new PingResponse(request.PingTimeUtc, DateTime.UtcNow, Serializer);

            Guid accountID = Guid.Empty;

            if (Account != null)
            {
                accountID = Account.AccountID;
            }

            JamPacket responsePacket = new JamPacket(pingPacket.Header.Sender, accountID, PingResponse.DATA_TYPE, response.GetBytes());

            Send(responsePacket);
        }
Beispiel #24
0
        private void SendMessage(object sender, System.Windows.Input.KeyEventArgs e)
        {
            if (e.Key == System.Windows.Input.Key.Enter)
            {
                e.Handled = true;
                MainWindow main = App.Current.MainWindow as MainWindow;

                TextBox messageBox = sender as TextBox;
                string  message    = messageBox.Text;

                messageBox.Clear();

                if (message != string.Empty)
                {
                    SendMessageImperative sendMessage = new SendMessageImperative(message, main.Client.Serializer);
                    JamPacket             packet      = new JamPacket(SelectedAccount.Account.AccountID, loggedInAccount.Account.AccountID, SendMessageImperative.DATA_TYPE, sendMessage.GetBytes());
                    main.Client.Send(packet);

                    DisplayableMessage sentMessage = new DisplayableMessage(DisplayableMessage.MessageType.Local, LoggedInAccount, packet.Header.SendTimeUtc, message);
                    SelectedAccount.AddMessage(sentMessage);
                }
            }
        }
Beispiel #25
0
        public void HandleAccountOnlineStatusChangedImperative(JamPacket packet)
        {
            if (packet.Header.DataType != AccountOnlineStatusChangedImperative.DATA_TYPE)
            {
                return;
            }

            App.Current.Dispatcher.Invoke(() =>
            {
                MainWindow main = App.Current.MainWindow as MainWindow;

                AccountOnlineStatusChangedImperative imperative = new AccountOnlineStatusChangedImperative(packet.Data, main.Client.Serializer);
                if (imperative.Account == null)
                {
                    return;
                }

                Guid selectedAccountID = Guid.Empty;
                if (selectedAccount != null)
                {
                    selectedAccountID = SelectedAccount.Account.AccountID;

                    DisplayableAccount account = Accounts.Single(x => x.Account.AccountID == imperative.Account.AccountID);
                    Accounts.Remove(account);

                    account.Online = imperative.Online;
                    Accounts.Add(account);

                    if (selectedAccountID == account.Account.AccountID)
                    {
                        SelectedAccount = account;
                    }

                    NotifyPropertyChanged(nameof(CanSendMessage));
                }
            });
        }
        private static void GetRegisteredAccounts(JamServerConnection serverConnection)
        {
            List <Tuple <Account, bool> > accounts = new List <Tuple <Account, bool> >();

            try
            {
                foreach (Account account in AccountFactory.Accounts)
                {
                    bool online = serverConnection.Server.GetConnection(account.AccountID) != null;
                    accounts.Add(new Tuple <Account, bool>(account, online));
                }
            }
            catch (EntityException)
            {
                serverConnection.Server.Dispose();
                return;
            }

            GetAccountsResponse response = new GetAccountsResponse(accounts, serverConnection.Serializer);

            JamPacket responsePacket = new JamPacket(Guid.Empty, Guid.Empty, GetAccountsResponse.DATA_TYPE, response.GetBytes());

            serverConnection.Send(responsePacket);
        }
Beispiel #27
0
        public void HandleLoginResponse(JamPacket loginResponsePacket)
        {
            if (loginResponsePacket.Header.DataType != LoginResponse.DATA_TYPE)
            {
                return;
            }

            LoginResponse        response   = new LoginResponse(loginResponsePacket.Data, Serializer);
            LoginResultEventArgs resultArgs = new LoginResultEventArgs()
            {
                Result = response.Result
            };

            if (response.Result == LoginResponse.LoginResult.Good)
            {
                Account = response.Account;
                OnLoginResult(resultArgs);
            }
            else
            {
                OnLoginResult(resultArgs);
                Dispose();
            }
        }
Beispiel #28
0
        private void Listen()
        {
            while (Alive)
            {
                JamPacket packet = JamPacket.Receive(stream);
                if (packet == null)
                {
                    Dispose();
                    return;
                }

                if (packet.Header.DataType == PingRequest.DATA_TYPE)
                {
                    RespondToPing(packet);
                }
                else
                {
                    OnMessageReceived(new MessageReceivedEventArgs()
                    {
                        Packet = packet
                    });
                }
            }
        }
        private void Listen()
        {
            while (Alive)
            {
                JamPacket packet = JamPacket.Receive(stream);
                if (packet == null)
                {
                    Dispose();
                    return;
                }

                if (packet.Header.DataType == PingRequest.DATA_TYPE)
                {
                    RespondToPing(packet);
                }
                else if (packet.Header.DataType != PingResponse.DATA_TYPE)
                {
                    server.OnMessageReceived(new JamServer.MessageReceivedEventArgs()
                    {
                        ServerConnection = this, Packet = packet
                    });
                }
            }
        }
Beispiel #30
0
 public void Send(JamPacket packet)
 {
     packetSendQueue.Enqueue(packet);
 }