Пример #1
0
        // 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');
        }
Пример #2
0
        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)));

        }
Пример #3
0
        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;
            }
        }
Пример #4
0
        // 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();
        }
Пример #5
0
        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));

        }
Пример #6
0
        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);
        }