コード例 #1
0
ファイル: Multicast.cs プロジェクト: smtalha/campustalk
 public Multicast(Unicast uni, MediaElement msgPop, ListView recentList)
 {
     multicastIP       = new HostName(ChatScreen.applicationData.Multicast_ip);
     multicastPort     = ChatScreen.applicationData.Multicast_port;
     unicast           = uni;
     recentMessageList = recentList;
     messageSound      = msgPop;
     socketIsConnected = false;
     packet            = new MulticastPacket(ChatScreen.loggedInUser, true);
     SetUpLocalFolder();
     JoinMulticastGroup();
 }
コード例 #2
0
ファイル: Multicast.cs プロジェクト: smtalha/campustalk
        private async void SocketOnMessageReceived(DatagramSocket sender, DatagramSocketMessageReceivedEventArgs args)
        {
            Conversation WasSelected = null;
            var          myDisp      = CoreApplication.MainView.CoreWindow.Dispatcher;
            await myDisp.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
            {
                if (recentMessageList.SelectedItem != null)
                {
                    WasSelected = recentMessageList.SelectedItem as Conversation;
                }
            });

            var result       = args.GetDataStream();
            var resultStream = result.AsStreamForRead(1024);

            using (var reader = new StreamReader(resultStream))
            {
                string encryptedString = await reader.ReadToEndAsync();

                string text = StringCipher.Decrypt(encryptedString);

                if (text.StartsWith("trending"))
                {
                    string[] splitted        = text.Split(new char[] { '~', '|', '*' });
                    string   senderUsername  = splitted[3];
                    string   trendingMessage = splitted[6];

                    User    trendingUser = null;
                    Message rMessage     = new Message()
                    {
                        Type = Message.MessageType.Text, ReceivedSide = true, Text = trendingMessage, UnRead = true
                    };

                    var disp = CoreApplication.MainView.CoreWindow.Dispatcher;
                    await disp.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
                    {
                        foreach (User u in ChatScreen.availableUsers)
                        {
                            if (u.Username.Equals(senderUsername))
                            {
                                trendingUser = u;
                            }
                        }
                        if (trendingUser == null)
                        {
                            return; // change this to request the user later
                        }
                        if (trendingUser.Username.Equals(ChatScreen.loggedInUser.Username))
                        {
                            return;
                        }

                        rMessage.MsgUser = trendingUser;
                        foreach (Conversation c in ChatScreen.recentMessages)
                        {
                            if (c.MessageUser.Username.Equals("trending"))
                            {
                                if (c.LastMessage.MsgUser != null)
                                {
                                    if (c.LastMessage.Text.Equals(rMessage.Text) && c.LastMessage.MsgUser.Username.Equals(trendingUser.Username))
                                    {
                                        return;
                                    }
                                }

                                if (WasSelected == c)
                                {
                                    rMessage.UnRead = false;
                                }
                                c.Messages.Add(rMessage);
                                c.LastMessage = rMessage;
                                if (ChatScreen.recentMessages.IndexOf(c) != 0)
                                {
                                    ChatScreen.recentMessages.Move(ChatScreen.recentMessages.IndexOf(c), 0);
                                }

                                if (WasSelected != null)
                                {
                                    recentMessageList.SelectedItem = WasSelected;
                                }
                                messageSound.Play();
                                StoreConversations();
                                return;
                            }
                        }
                    });

                    return;
                }


                User incomingUser = getUser(text);

                //return if the user is same as the logged-in user
                if (incomingUser.Username.Equals(ChatScreen.loggedInUser.Username))
                {
                    return;
                }


                foreach (User u in ChatScreen.blockedUsers.ToList())
                {
                    if (u.Username.Equals(incomingUser.Username))
                    {
                        return;
                    }
                }

                foreach (User u in ChatScreen.availableUsers.ToList())
                {
                    if (u.Username.Equals(incomingUser.Username))
                    {
                        var d = CoreApplication.MainView.CoreWindow.Dispatcher;
                        await d.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
                        {
                            //ChatScreen.availableUsers.Remove(u);
                            u.CurrentStatus = incomingUser.CurrentStatus;
                            u.Name          = incomingUser.Name;
                            u.Email         = incomingUser.Email;
                            u.IPAddress     = incomingUser.IPAddress;

                            if (incomingUser.CurrentStatus == User.Status.Offline)
                            {
                                ChatScreen.availableUsers.Remove(u);
                            }
                        });

                        if (getAck(text))
                        {
                            MulticastPacket p = new MulticastPacket(ChatScreen.loggedInUser, false);
                            await SendMessage(Parse(p), multicastPort);

                            if (!ChatScreen.loggedInUser.ProfilePicture.Equals("ms-appx:///Assets/default_profile_picture.png"))
                            {
                                await unicast.SendProfilePicture(incomingUser);
                            }
                            await unicast.RequestPicture(incomingUser);
                        }
                        return;
                    }
                }

                var dispatcher = CoreApplication.MainView.CoreWindow.Dispatcher;

                await dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
                {
                    ChatScreen.availableUsers.Add(incomingUser);
                    foreach (User u in (ChatScreen.favouriteUsers).ToList())
                    {
                        if (u.Username.Equals(incomingUser.Username))
                        {
                            ChatScreen.availableUsers.Move(ChatScreen.availableUsers.IndexOf(incomingUser), 0);
                        }
                    }
                });

                await UpdateMessageUser(incomingUser);

                if (getAck(text))
                {
                    MulticastPacket p = new MulticastPacket(ChatScreen.loggedInUser, false);
                    await SendMessage(Parse(p), multicastPort);

                    if (!ChatScreen.loggedInUser.ProfilePicture.Equals("ms-appx:///Assets/default_profile_picture.png"))
                    {
                        await unicast.SendProfilePicture(incomingUser);
                    }
                    await unicast.RequestPicture(incomingUser);
                }
            }
        }
コード例 #3
0
ファイル: Multicast.cs プロジェクト: smtalha/campustalk
        private string Parse(MulticastPacket p)
        {
            string s = "" + p.UserIP + ":" + p.Username + ":" + p.UserFullName + ":" + p.UserEmail + ":" + p.Status + ":" + p.Ack;

            return(s);
        }
コード例 #4
0
ファイル: Multicast.cs プロジェクト: smtalha/campustalk
        public async Task update()
        {
            MulticastPacket p = new MulticastPacket(ChatScreen.loggedInUser, true);

            await SendMessage(Parse(p), multicastPort);
        }