private void SendMessage(string messageToSend, string sender, string receiver) { Sb.Append(UserName + ": " + messageToSend + '\n'); ChatText = Sb.ToString(); ChatHubProxy.Invoke("SendMessage", messageToSend, sender, receiver); YourText = ""; }
/// <summary> /// a new user is being registrated, if the user name is not already exist. /// the user will not login automatically, only if he clicks the login button /// </summary> public void Register() { try { if (string.IsNullOrWhiteSpace(UserName) || string.IsNullOrWhiteSpace(Password)) { MessageBox.Show("You must choose a User Name and a Password, do not leave the fields empty"); return; } User newUser = new User { UserName = UserName, Password = Password }; bool userAdded = ChatHubProxy.Invoke <bool>("GetNewUser", newUser).Result; // userAdded is true if the new user was registrated if (!userAdded) { MessageBox.Show("User name already exist! please choose another user name"); } else { MessageBox.Show("You are now registered to the system, you can login now"); EnableButtonRegister = false; } } catch (Exception e) { MessageBox.Show("an error occurred while trying to register. we're sorry for the inconvenient"); Logger.LOG.WriteToLog("Failed register a new user" + Environment.NewLine + DateTime.Now.ToString() + Environment.NewLine + "Exception details: " + e.ToString() + "," + e.GetType().FullName + Environment.NewLine); return; } }
/// <summary> /// check if the user can connect to the selected user in order to chat /// </summary> /// <returns>boolean, to tell if the user is available or not</returns> public bool CanConnectToUserChat() { if (SelectedName == null) { return(false); } string selectedUserName = SelectedName.UserName; bool responseValidateAvailabilityOfOtherUser = ChatHubProxy.Invoke <bool>("ValidateAvailabilityOfOtherUser", selectedUserName, GameOrChatRequestEnum.Chat).Result; if (responseValidateAvailabilityOfOtherUser) { ChatHubProxy.Invoke("AskUserToStartChat", selectedUserName, UserName); } return(responseValidateAvailabilityOfOtherUser); }
/// <summary> /// /// </summary> public void Login() { /// <summary> /// when the user is logging-in he get all the names of the registreted users, and their status of connection (available, on-game, on-chat...). any update of the status of other user, or of new user that registreted will appear /// </summary> /// <param name="usersWithStatus"></param> ChatHubProxy.On("UpdateAllUsersNamesAndConnectionStatus", (List <UserWithStatus> usersWithStatus) => { Application.Current.Dispatcher.BeginInvoke(new Action(() => { usersWithStatus = usersWithStatus.Where(x => x.UserName != UserName).ToList(); UsersNamesWithStatus = ConvertListToObservableCollection(usersWithStatus); })); }); try { if (string.IsNullOrWhiteSpace(UserName) || string.IsNullOrWhiteSpace(Password)) { MessageBox.Show("You must enter a User Name and a Password, do not leave the fields empty"); return; } User user = new User { UserName = UserName, Password = Password }; Response response = ChatHubProxy.Invoke <Response>("ValidateLogin", user).Result; if (response.IsOk1) { EnableButtonLogin = false; // after login, can't do another login EnableButtonRegister = false; // after login, can't do registreting MessageBox.Show(response.Message1); } else if (!response.IsOk1) { MessageBox.Show(response.Message1); } } catch (Exception e) { Logger.LOG.WriteToLog("Failed login in ChatViewModel" + Environment.NewLine + DateTime.Now.ToString() + Environment.NewLine + "Exception details: " + e.ToString() + "," + e.GetType().FullName + Environment.NewLine); } }
/// <summary> /// when a client connect to the server, he is registering to events from the server by "ChatHubProxy.On..." /// </summary> public void ConnectToServer() { /// <summary> /// getting a request from other user to chat with him /// </summary> /// <param name="senderName"></param> ChatHubProxy.On("ChatRequest", (string senderName) => { Application.Current.Dispatcher.BeginInvoke(new Action(() => { bool approve = ApproveChatInvitation(senderName); ChatHubProxy.Invoke("ApproveToChat", approve, UserName, senderName); // send a bolean to the server and than to the other user, if he wants to chat with him or not })); }); /// <summary> /// getting a request from other user to play backgammon with him /// </summary> /// <param name="senderName"></param> ChatHubProxy.On("GameRequest", (string senderName) => { Application.Current.Dispatcher.BeginInvoke(new Action(() => { bool approve = ApproveGameInvitation(senderName); ChatHubProxy.Invoke("ApproveToGame", approve, UserName, senderName); // // send a bolean to the server and than to the other user, if he wants to play bacgammon with him or not })); }); /// <summary> /// get an approve or disapprove to his own chat request from the server (the server get it from the other user) /// </summary> /// <param name="approve">boolean, that approve the chat request from the other user</param> /// <param name="otherUser">string, the name of the other user on the chat</param> ChatHubProxy.On("responseOfChatRequestToSender", (bool approve, string otherUser) => { Application.Current.Dispatcher.BeginInvoke(new Action(() => { if (approve) { MessageBox.Show("Chat will start!"); ChatRoom chatRoom = new ChatRoom(UserName, otherUser, ChatHubProxy); chatRoom.Show(); } else { MessageBox.Show("Some other time..."); } })); }); /// <summary> /// get an approve or disapprove to his own game request from the server (the server get it from the other user) /// </summary> /// <param name="approve">boolean, that approve the game request from the other user</param> /// <param name="otherUser">string, the name of the other user on the game</param> /// <param name="startGameUser">string, the user that sent the request, he will be the one that starts the game -> the "Red"</param> ChatHubProxy.On("responseOfGameRequestToSender", (bool approve, string otherUser, string startGameUser) => { Application.Current.Dispatcher.BeginInvoke(new Action(() => { if (approve) { string msg = "Game will start!\nPlease click the disc and then the cube in order to move a disc,\nTo get an eaten cube back to the board click only on the cube,\n"; if (UserName.Equals(startGameUser)) { msg += "You are the Red,\nYou start!"; } else if (otherUser.Equals(startGameUser)) { msg += "You are the Black,\nThe Red starts"; } MessageBox.Show(msg); Application.Current.MainWindow.Content = new Game(UserName, otherUser, ChatHubProxy, startGameUser); } else { MessageBox.Show("Some other time..."); } })); }); HubConnection.Start().Wait(); }