Example #1
0
        private static void ServerListenerLoop()
        {
            try
            {
                while (true)
                {
                    Response server_response = DataTransferHelper.GetResponseFromServer(Client);

                    switch (server_response.ResponseType)
                    {
                    case "user_signin":
                    {
                        UserSignInResponse userSignInResponse = server_response as UserSignInResponse;
                        InvokeHelper.ApplicationInvoke(() => _chatViewModel.Users.Add(userSignInResponse.User));
                        break;
                    }

                    case "user_signout":
                    {
                        UserSignOutResponse userSignOutResponse = server_response as UserSignOutResponse;
                        for (int i = 0; i < _chatViewModel.Users.Count; i++)
                        {
                            if (_chatViewModel.Users[i].ID == userSignOutResponse.User.ID)
                            {
                                InvokeHelper.ApplicationInvoke(() => _chatViewModel.Users.RemoveAt(i));
                            }
                        }
                        break;
                    }

                    case "auth":
                    {
                        if (server_response.Ok)
                        {
                            ClientUser = (server_response as AuthResponse).User;
                            InvokeHelper.ApplicationInvoke
                            (
                                () =>
                                {
                                    ChatView chatView = new ChatView();
                                    _chatViewModel    = chatView.DataContext as ChatViewModel;
                                    SetView(chatView);
                                }
                            );
                        }
                        else
                        {
                            if (server_response.Error == "user_name_not_exists")
                            {
                                throw new InvalidUserNameException();
                            }
                            else if (server_response.Error == "invalid_password")
                            {
                                throw new InvalidPasswordException();
                            }
                            else if (server_response.Error == "user_is_connected")
                            {
                                throw new Exception("User is connected");
                            }
                        }

                        break;
                    }

                    case "registration":
                    {
                        if (server_response.Ok)
                        {
                            InvokeHelper.ApplicationInvoke(() => ShowSnackBarMessage("User successfully registered"));
                            Disconnect();
                        }
                        else
                        {
                            if (server_response.Error == "user_name_exists")
                            {
                                throw new InvalidUserNameException("This user name already exists");
                            }
                        }

                        break;
                    }

                    case "message":
                    {
                        InvokeHelper.ApplicationInvoke(() => _chatViewModel.Messages.Add((server_response as MessageResponse).Message));
                        break;
                    }

                    case "ban":
                    {
                        throw new UserBannedException();
                    }

                    default:
                        break;
                    }
                }
            }
            catch (UserBannedException e)
            {
                InvokeHelper.ApplicationInvoke(() => ShowSnackBarMessage(e.Message));
            }
            catch (InvalidUserNameException e)
            {
                InvokeHelper.ApplicationInvoke(() => ShowSnackBarMessage(e.Message));
            }
            catch (InvalidPasswordException e)
            {
                InvokeHelper.ApplicationInvoke(() => ShowSnackBarMessage(e.Message));
            }
            catch (SocketException)
            {
                InvokeHelper.ApplicationInvoke(() => ShowSnackBarMessage("Connection with server was destroyed."));
            }
            catch (Exception)
            {}
            finally
            {
                IsConnected = false;
                Client?.Close();
                Client         = null;
                _chatViewModel = null;
                ClientUser     = null;
                InvokeHelper.ApplicationInvoke(() => SetView(new StartView()));
            }
        }
Example #2
0
 public void AddUser(User user)
 {
     InvokeHelper.ApplicationInvoke(() => _userDataBase.Add(user));
     AddUserToDataBase(user);
 }