// login successful public void OnIncomingFriendlistMessage(object sender, IncomingMessageEventArgs e) { _connection.LoggedInAs = XmlDeserializer.GetLoggedInAsInfo(e.Message); var list = XmlDeserializer.DeserializeFriends(e.Message); _windowManager.ShowWindow(new ContactViewModel(_windowManager, list)); CloseView(); //string fr = list.Aggregate("", (current, friend) => current + friend.Email + " " + friend.Nick + " " + friend.UserId + '\n'); }
public async void OnIncomingUserMessage(object sender, IncomingMessageEventArgs args) { await Dispatcher.BeginInvoke(new Action(() => fowaServerLogTextBlock.Text += "Incoming UserMessage:\n")); string message = args.Message; var messageReceiver = XmlDeserializer.GetUserFromUserMessage(message, UserMessageElement.Receiver); var messageSender = XmlDeserializer.GetUserFromUserMessage(message, UserMessageElement.Sender); var userClient = _service.Clients.FirstOrDefault(c => c.Key == messageReceiver.UserId); if (userClient.Value == null) return; // User is not online send ErrorMessage var fowaClient = userClient.Value; //forward Usermessage bool forwardingToClientSuccesful = await fowaClient.WriteToClientStreamAync(new UserMessage(messageSender, messageReceiver, XmlDeserializer.GetMessage(args.Message))); }
public async void OnIncomingRegisterMessage(object sender, IncomingMessageEventArgs args) { var registerInfo = XmlDeserializer.GetRegisterInfo(args.Message); await Dispatcher.BeginInvoke(new Action(() => fowaServerLogTextBlock.Text += "Incoming register message:\n" + '\t' + registerInfo.NickName + "\n\t" + registerInfo.Email + "\n\t" + registerInfo.Pw + "\n\n")); var handleResult = await HandleIncomingLoginOrRegisterMessage(args.FowaClient, registerInfo.Email); bool writeToClientSuccessfull = true; // Not used yet // DB con failed = 0 // user exists = 1 // User does not exists = 2 switch (handleResult) { case 0: // send ErrorMessage --> DB connection failed return; case 1: // send ErrorMessage --> email already exists return; case 2: // register the new user return; } }
// the server will send a (empty) friend list to indicate that the user has successfully registered. public void OnIncomingFriendListMessage(object sender, IncomingMessageEventArgs args) { _connection.LoggedInAs = XmlDeserializer.GetLoggedInAsInfo(args.Message); //you do not have to deserialize the incoming friendlist, you will not have friends yet :) //var list = XmlDeserializer.DeserializeFriends(args.Message); _windowManager.ShowWindow(new ContactViewModel(_windowManager, Enumerable.Empty<Friend>())); CloseView(); }
public void OnIncomingUserMessage(object sender, IncomingMessageEventArgs e) { // get the sender var user = XmlDeserializer.GetUserFromUserMessage(e.Message, UserMessageElement.Sender); var friend = Friends.FirstOrDefault(f => f.UserId == user.UserId); if (friend == null) { /* * user is not a Friend * maybe add him as Friend */ } OpenUserChat(friend); // now a tab is available // find the tab and write the incoming user message to the the chat box int tabIndex = OpenTabs.FirstOrDefault(t => t.Key == user.UserId).Value; UserChatViewModel tab = (UserChatViewModel)MainChatViewModel.Items.ElementAt(tabIndex); tab.WriteToChat(user.Nick + ": " + XmlDeserializer.GetMessage(e.Message)); }
public async void OnIncomingLoginMessage(object sender, IncomingMessageEventArgs args) { // I will try to translate this comment later, but its just a note for me .. sry :D // folgendes würde zu folgender Aushahme führen: // Der aufrufende Thread kann nicht auf dieses Objekt zugreifen, da sich das Objekt im Besitz eines anderen Threads befindet." // fowaServerLogTextBlock.Text = args.Message; var login = XmlDeserializer.GetLoginInfo(args.Message); await Dispatcher.BeginInvoke(new Action(() => fowaServerLogTextBlock.Text += "Incoming Login:\n" + '\t' + login.Email + "\n\t" + login.Pw + "\n\n")); bool writeToClientSuccessfull; // Not used yet // DB con failed = 0 // user exists = 1 // User does not exists = 2 var handleResult = await HandleIncomingLoginOrRegisterMessage(args.FowaClient, login.Email); //if (handleResult == 0 || handleResult == 2) return; // DB con failed = 0 // user exists = 1 // User does not exists = 2 switch (handleResult) { case 0: writeToClientSuccessfull = await args.FowaClient.WriteToClientStreamAync(new ErrorMessage(ErrorMessageKind.LoginError, "Fetching Friends failed.")); return; case 1: // carry on break; case 2: writeToClientSuccessfull = await args.FowaClient.WriteToClientStreamAync(new ErrorMessage(ErrorMessageKind.LoginError, "User not found.")); return; } // Check if password is correct var user = _userFriendService.GetUserbyEmail(login.Email); if (!user.pw.Equals(login.Pw)) { await Dispatcher.BeginInvoke(new Action(() => fowaServerLogTextBlock.Text += "Login failed: Wrong Password.\n----------\n")); writeToClientSuccessfull = await args.FowaClient.WriteToClientStreamAync(new ErrorMessage(ErrorMessageKind.LoginError, "Incorrect Password")); return; } // add user to Clientlist bool addingSuccessful = _service.Clients.TryAdd(user.ID, args.FowaClient); _service.RecentlyConnectedClient.ClientUserId = user.ID; // check if adding was successful // Send Friendlist to user var friends = _userFriendService.GetFriends(user); List<Friend> friendList = friends.Select(friend => new Friend { Email = friend.email, Nick = friend.nick, UserId = friend.ID }).ToList(); FriendListMessage m = new FriendListMessage(new Friend { Email = user.email, Nick = user.nick, UserId = user.ID }, friendList); // send FriendListMessage writeToClientSuccessfull = await args.FowaClient.WriteToClientStreamAync(m); }