void client_GroupChat(object sender, GroupChatEventArgs e)
        {
            var _e = new ChatReceivedEventArgs(new ChatMessage(e.User, e.Font, e.Body, e.Timestamp));

            if (!conversationEventsMap.ContainsKey(e.Group.Name))
            {
                CreateConversation(e.Group, false);
            }

            conversationEventsMap[e.Group.Name].RaiseChatReceived(_e);
        }
        void client_GroupChat(object sender, GroupChatEventArgs e)
        {
            var _e = new ChatReceivedEventArgs(new ChatMessage(e.User, e.Font, e.Body, e.Timestamp));

            if (!conversationEventsMap.ContainsKey(e.Group.Name))
            {
                CreateConversation(e.Group, false);
            }

            conversationEventsMap[e.Group.Name].RaiseChatReceived(_e);
        }
 public void RaiseChatReceived(ChatReceivedEventArgs e)
 {
     ChatReceived.SafeInvoke(this, e);
 }
Пример #4
0
 void OnChatReceived(object sender, ChatReceivedEventArgs e)
 {
     AddMessage(e.Message);
 }
 public void RaiseChatReceived(ChatReceivedEventArgs e)
 {
     ChatReceived.SafeInvoke(this, e);
 }
        void OnChatReceived(object _sender, ChatReceivedEventArgs e)
        {
            App.Current.Dispatcher.BeginInvoke(new Action(() =>
            {
                const int FontSize = 14;

                var message = e.Message.Text;
                var font = e.Message.Font;
                var sender = e.Message.Sender;

                // Add this color to the brush cache if it's not there already
                var brush = App.GetBrush(font.Color);

                Paragraph paragraph;
                if (sender != lastSender)
                {
                    lastSender = sender;
                    paragraph = new Paragraph()
                    {
                        FontSize = FontSize + 2,
                        Foreground = Brushes.Black,
                        FontWeight = FontWeights.Light,
                        Margin = new Thickness(0, 4.0, 0, 2.0),
                        Padding = new Thickness(0, 0, 0, 2.0),
                        BorderBrush = Brushes.LightGray,
                        BorderThickness = new Thickness(0, 0, 0, 1),
                    };
                    paragraph.Inlines.Add(new Run(sender.DisplayName));
                    ChatHistory.Add(paragraph);
                }

                paragraph = new Paragraph()
                {
                    FontFamily = new FontFamily(font.Family),
                    FontSize = FontSize,
                    LineHeight = 3 * FontSize / 2,
                    Foreground = brush,
                    Margin = new Thickness(16.0, 0, 0, 0),
                    TextIndent = 0,
                };

            /*				var path = new System.Windows.Shapes.Path()
                {
                    Stroke = Brushes.Black,
                    StrokeThickness = 2,
                    Data = App.Current.FindResource("CrossGeometry") as Geometry,
                    Width = 12,
                    Height = paragraph.FontSize,
                    Margin = new Thickness(0, 0, 4, 0),
                };

                paragraph.Inlines.Add(new InlineUIContainer(path));*/

                var stops = new List<ChatStop>();

                foreach (var emoteStop in App.EmoticonManager.SearchForEmoticons(message))
                {
                    stops.Add(new ChatStop()
                        {
                            Index = emoteStop.Key,
                            Length = emoteStop.Value.Shortcut.Length,
                            Type = StopType.Emoticon,
                            Data = emoteStop.Value,
                        });
                }

                string[] urls = new string[] {"http://", "https://"};
                foreach (var url in urls)
                {
                    int index = message.IndexOf(url);
                    while (index != -1)
                    {
                        int endIndex = message.IndexOf(' ', index);
                        if (endIndex == -1)
                            endIndex = message.Length - 1;
                        stops.Add(new ChatStop()
                            {
                                Index = index,
                                Length = endIndex - index + 1,
                                Type = StopType.Url,
                            });

                        index = message.IndexOf(url, endIndex);
                    }
                }

                var orderedStops = stops.OrderBy(_ => _.Index);

                int startIndex = 0;
                foreach (var stop in orderedStops)
                {
                    if (stop.Index < startIndex)
                        continue;
                    if (stop.Index != startIndex)
                        paragraph.Inlines.Add(new Run(message.Substring(startIndex, stop.Index - startIndex)));

                    switch (stop.Type)
                    {
                        case StopType.Emoticon:
                            var picture = new EmoteImage()
                            {
                                SnapsToDevicePixels = true,
                                Emote = stop.Data as Emoticon,
                            };

                            paragraph.Inlines.Add(new InlineUIContainer(picture));
                            break;

                        case StopType.Url:
                            var text = message.Substring(stop.Index, stop.Length);
                            var link = new Hyperlink(new Run(text));
                            link.Tag = text;
                            link.Click += OnChatLinkClicked;
                            paragraph.Inlines.Add(link);
                            break;
                    }

                    startIndex = stop.Index + stop.Length;
                }

                paragraph.Inlines.Add(new Run(message.Substring(startIndex)));

                if (font.Style.HasFlag(Protocol.FontStyle.Bold))
                    paragraph.FontWeight = FontWeights.Bold;
                if (font.Style.HasFlag(Protocol.FontStyle.Italic))
                    paragraph.FontStyle = FontStyles.Italic;
                if (font.Style.HasFlag(Protocol.FontStyle.Underline))
                {
                    paragraph.TextDecorations = new TextDecorationCollection();
                    paragraph.TextDecorations.Add(System.Windows.TextDecorations.Underline);
                }

                ChatHistory.Add(paragraph);
            }));
        }
Пример #7
0
 void OnChatReceived(object sender, ChatReceivedEventArgs e)
 {
     AddMessage(e.Message);
 }