Guest User

Untitled

a guest
Aug 15th, 2016
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.66 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.IO;
  5. using System.Linq;
  6. using System.Net;
  7. using System.Net.Sockets;
  8. using System.Text;
  9. using System.Threading;
  10. using System.Threading.Tasks;
  11. using System.Windows;
  12. using System.Windows.Controls;
  13. using System.Windows.Data;
  14. using System.Windows.Documents;
  15. using System.Windows.Input;
  16. using System.Windows.Media;
  17. using System.Windows.Media.Imaging;
  18. using System.Windows.Navigation;
  19. using System.Windows.Shapes;
  20. using System.Windows.Threading;
  21.  
  22. namespace serverDoWielu
  23. {
  24.     public partial class MainWindow : Window
  25.     {
  26.        
  27.         private List<TcpClient> listaClientow = new List<TcpClient>();
  28.         private List<StreamReader> listaSTR = new List<StreamReader>();
  29.         private List<StreamWriter> listaSTW = new List<StreamWriter>();
  30.         StreamReader STR;
  31.         StreamWriter STW;
  32.  
  33.         private string received;
  34.         private String text_to_send;                                            
  35.         public BackgroundWorker worker1;
  36.         public BackgroundWorker worker2;
  37.         public BackgroundWorker worker3;
  38.         int licznikClientow;
  39.  
  40.         public MainWindow()
  41.         {
  42.             InitializeComponent();
  43.             worker1 = new BackgroundWorker();
  44.             worker1.DoWork += backgroundWorker1_DoWork;
  45.             worker2 = new BackgroundWorker();
  46.             worker2.DoWork += backgroundWorker2_DoWork;
  47.             worker3 = new BackgroundWorker();
  48.             worker3.DoWork += backgroundWorker3_DoWork;
  49.         }
  50.  
  51.         private void button_Click(object sender, RoutedEventArgs e)
  52.         {
  53.             worker3.RunWorkerAsync();
  54.         }
  55.         private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
  56.         {
  57.             List<StreamReader> tmp = new List<StreamReader>(listaSTR);
  58.             while (true)
  59.             {
  60.                 try
  61.                 {
  62.                     received = "";
  63.                     for (int i = 0; i < licznikClientow; i++)
  64.                     {
  65.                         //received += listaSTR[i].ReadLine();
  66.                         if (!listaSTR[i].EndOfStream)
  67.                         {
  68.                             received += listaSTR[i].ReadLine();
  69.                             text_to_send = received;
  70.                             if (text_to_send != "")
  71.                             {
  72.                                 this.textBox.Dispatcher.Invoke(DispatcherPriority.Normal, (ThreadStart)delegate () { textBox.AppendText("->> " + text_to_send + "\n"); });
  73.                                 worker2.RunWorkerAsync();
  74.                             }
  75.                         }
  76.                     }
  77.                    
  78.                 }
  79.                 catch (Exception ex)
  80.                 {
  81.                     MessageBox.Show(ex.Message);
  82.                 }
  83.             }
  84.         }
  85.         private void backgroundWorker2_DoWork(object sender, DoWorkEventArgs e)
  86.         {
  87.            
  88.                 List<StreamWriter> tmp = new List<StreamWriter>(listaSTW);
  89.  
  90.                 foreach (var item in tmp)      
  91.                 {
  92.                     item.WriteLine(text_to_send);
  93.                 }  
  94.            
  95.            
  96.             worker2.CancelAsync();
  97.         }
  98.         private void backgroundWorker3_DoWork(object sender, DoWorkEventArgs e)
  99.         {
  100.             TcpListener listener = new TcpListener(IPAddress.Any, 13000);
  101.            
  102.             bool NieMaZadnegoKlienta = true;
  103.            licznikClientow = 0;
  104.             while (true)
  105.             {
  106.                 listener.Start();
  107.                 listaClientow.Add(new TcpClient()); // add new
  108.                 listaClientow[licznikClientow] = listener.AcceptTcpClient(); //przypisujemy
  109.                 listaSTR.Add(new StreamReader(  listaClientow[licznikClientow].GetStream() ) );  // to read
  110.                 listaSTW.Add(new StreamWriter(  listaClientow[licznikClientow].GetStream() ) );   // to send
  111.                 listaSTW[licznikClientow].AutoFlush = true; //clear
  112.                 if(listaClientow[0].Connected && NieMaZadnegoKlienta) // start threads
  113.                 {
  114.                     NieMaZadnegoKlienta = false;
  115.                     worker1.RunWorkerAsync();  // this thread listens
  116.                     worker2.WorkerSupportsCancellation = true; //this one sends
  117.                 }
  118.                 licznikClientow++;
  119.             }
  120.         }
  121.  
  122.         private void button1_Click(object sender, RoutedEventArgs e)
  123.         {
  124.             foreach (var item in listaSTW)     // sending to all people
  125.             {
  126.                 item.WriteLine("@@@@@@@@@@@");
  127.             }
  128.         }
  129.     }
  130. }
Add Comment
Please, Sign In to add comment