Exemple #1
0
        private void MenuItem_Click(object sender, RoutedEventArgs e)
        {
            if (lstvClients.SelectedItem == null)
            {
                return;
            }
            OpenFileDialog dlgOpen = new OpenFileDialog();

            dlgOpen.CheckFileExists = dlgOpen.CheckPathExists = true;
            if (dlgOpen.ShowDialog() != true)
            {
                return;
            }
            var bw = new BinaryWriter(tcpClient.GetStream());

            bw.Write((byte)Command.SendFile);
            BinaryFormatter bf = new BinaryFormatter();

            bf.Serialize(tcpClient.GetStream(), lstvClients.SelectedItem);
            byte[] bytes;
            using (FileStream file = new FileStream(dlgOpen.FileName, FileMode.Open, FileAccess.Read))
            {
                bytes = new byte[file.Length];
                file.Read(bytes, 0, (int)file.Length);
            }
            string ext = dlgOpen.FileName.Substring(dlgOpen.FileName.LastIndexOf("."));

            bf.Serialize(tcpClient.GetStream(), ext);
            bf.Serialize(tcpClient.GetStream(), bytes);

            ChatListItem newItem = new ChatListItem()
            {
                messageDate    = DateTime.Now.ToString(),
                messageSender  = login,
                messageContent = SendFileFlowDoc("")
            };

            lstChat.Items.Add(newItem);
        }
Exemple #2
0
        private void ListenToServer(Object obj)
        {
            var             client     = obj as TcpClient;
            bool            isContinue = true;
            BinaryFormatter bf         = new BinaryFormatter();

            while (isContinue)
            {
                var r = new BinaryReader(client.GetStream());
                switch ((Command)r.ReadByte())
                {
                case Command.RefreshClientList:
                    List <string> lst = bf.Deserialize(tcpClient.GetStream()) as List <string>;
                    Application.Current.Dispatcher.Invoke(() => {
                        lstvClients.ItemsSource = lst;
                    });
                    break;

                case Command.Receive:
                    ChatMessage message = bf.Deserialize(tcpClient.GetStream()) as ChatMessage;
                    Application.Current.Dispatcher.Invoke(() => {
                        FlowDocument newDoc = new FlowDocument();
                        newDoc.FontFamily   = new FontFamilyConverter().ConvertFrom("Segoe UI") as FontFamily;
                        newDoc.FontSize     = 12;
                        newDoc.PagePadding  = new Thickness()
                        {
                            Left = 0, Right = 0, Bottom = 0, Top = 0
                        };
                        newDoc.Blocks.Add(new Paragraph());
                        newDoc.LineHeight = 20;
                        var inlines       = (newDoc.Blocks.FirstBlock as Paragraph).Inlines;
                        for (int i = 0; i < message.Content.Count; i++)
                        {
                            if (message.Content[i].StartsWith("::smile::"))
                            {
                                inlines.Add(new Image());
                                var newImage    = ((inlines.LastInline as InlineUIContainer).Child as Image);
                                newImage.Source = new ImageSourceConverter().ConvertFrom(smiles[message.Content[i].Substring(9)]) as ImageSource;
                                newImage.Height = 16;
                                Thickness thick = new Thickness()
                                {
                                    Left = 3, Top = 0, Right = 3, Bottom = -4
                                };
                                newImage.Margin            = thick;
                                newImage.VerticalAlignment = VerticalAlignment.Bottom;
                            }
                            else
                            {
                                inlines.Add(new Run(message.Content[i]));
                            }
                        }
                        lstChat.Items.Add(
                            new ChatListItem()
                        {
                            messageDate    = message.DateAndTime,
                            messageSender  = message.Sender,
                            messageContent = newDoc
                        }
                            );
                    });
                    break;

                case Command.ReceiveFile:
                    string fileSender = bf.Deserialize(tcpClient.GetStream()) as string;
                    fileExt = bf.Deserialize(tcpClient.GetStream()) as string;
                    file    = bf.Deserialize(tcpClient.GetStream()) as byte[];
                    Application.Current.Dispatcher.Invoke(() => {
                        ChatListItem newItem = new ChatListItem()
                        {
                            messageDate    = DateTime.Now.ToString(),
                            messageSender  = fileSender,
                            messageContent = SendFileFlowDoc("sendfile")
                        };
                        lstChat.Items.Add(newItem);
                    });
                    break;

                case Command.Error:
                    string error = bf.Deserialize(tcpClient.GetStream()) as string;
                    Application.Current.Dispatcher.Invoke(() => {
                        MessageBox.Show(error);
                    });
                    break;

                case Command.Exit:
                    MessageBox.Show("Connection to Server terminated");
                    tcpClient.Close();
                    tcpClient = null;
                    Application.Current.Dispatcher.Invoke(() => {
                        Close();
                    });
                    break;
                }
            }
        }