Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.IO;
- using System.Linq;
- using System.Net;
- using System.Net.Sockets;
- using System.Text;
- using System.Threading;
- using System.Threading.Tasks;
- using System.Windows;
- using System.Windows.Controls;
- using System.Windows.Data;
- using System.Windows.Documents;
- using System.Windows.Input;
- using System.Windows.Media;
- using System.Windows.Media.Imaging;
- using System.Windows.Navigation;
- using System.Windows.Shapes;
- using System.Windows.Threading;
- namespace serverDoWielu
- {
- public partial class MainWindow : Window
- {
- private List<TcpClient> listaClientow = new List<TcpClient>();
- private List<StreamReader> listaSTR = new List<StreamReader>();
- private List<StreamWriter> listaSTW = new List<StreamWriter>();
- StreamReader STR;
- StreamWriter STW;
- private string received;
- private String text_to_send;
- public BackgroundWorker worker1;
- public BackgroundWorker worker2;
- public BackgroundWorker worker3;
- int licznikClientow;
- public MainWindow()
- {
- InitializeComponent();
- worker1 = new BackgroundWorker();
- worker1.DoWork += backgroundWorker1_DoWork;
- worker2 = new BackgroundWorker();
- worker2.DoWork += backgroundWorker2_DoWork;
- worker3 = new BackgroundWorker();
- worker3.DoWork += backgroundWorker3_DoWork;
- }
- private void button_Click(object sender, RoutedEventArgs e)
- {
- worker3.RunWorkerAsync();
- }
- private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
- {
- List<StreamReader> tmp = new List<StreamReader>(listaSTR);
- while (true)
- {
- try
- {
- received = "";
- for (int i = 0; i < licznikClientow; i++)
- {
- //received += listaSTR[i].ReadLine();
- if (!listaSTR[i].EndOfStream)
- {
- received += listaSTR[i].ReadLine();
- text_to_send = received;
- if (text_to_send != "")
- {
- this.textBox.Dispatcher.Invoke(DispatcherPriority.Normal, (ThreadStart)delegate () { textBox.AppendText("->> " + text_to_send + "\n"); });
- worker2.RunWorkerAsync();
- }
- }
- }
- }
- catch (Exception ex)
- {
- MessageBox.Show(ex.Message);
- }
- }
- }
- private void backgroundWorker2_DoWork(object sender, DoWorkEventArgs e)
- {
- List<StreamWriter> tmp = new List<StreamWriter>(listaSTW);
- foreach (var item in tmp)
- {
- item.WriteLine(text_to_send);
- }
- worker2.CancelAsync();
- }
- private void backgroundWorker3_DoWork(object sender, DoWorkEventArgs e)
- {
- TcpListener listener = new TcpListener(IPAddress.Any, 13000);
- bool NieMaZadnegoKlienta = true;
- licznikClientow = 0;
- while (true)
- {
- listener.Start();
- listaClientow.Add(new TcpClient()); // add new
- listaClientow[licznikClientow] = listener.AcceptTcpClient(); //przypisujemy
- listaSTR.Add(new StreamReader( listaClientow[licznikClientow].GetStream() ) ); // to read
- listaSTW.Add(new StreamWriter( listaClientow[licznikClientow].GetStream() ) ); // to send
- listaSTW[licznikClientow].AutoFlush = true; //clear
- if(listaClientow[0].Connected && NieMaZadnegoKlienta) // start threads
- {
- NieMaZadnegoKlienta = false;
- worker1.RunWorkerAsync(); // this thread listens
- worker2.WorkerSupportsCancellation = true; //this one sends
- }
- licznikClientow++;
- }
- }
- private void button1_Click(object sender, RoutedEventArgs e)
- {
- foreach (var item in listaSTW) // sending to all people
- {
- item.WriteLine("@@@@@@@@@@@");
- }
- }
- }
- }
Add Comment
Please, Sign In to add comment