Advertisement
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.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;
- 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>();
- private string received;
- private String text_to_send;
- public BackgroundWorker worker1;
- public BackgroundWorker worker2;
- public BackgroundWorker worker3;
- 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(); // po odpaleniu serwera nasluchuje nowych klientow
- }
- private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
- {
- while (true)
- {
- try
- {
- foreach (var item in listaSTR)
- {
- received = item.ReadLine();
- text_to_send = received;
- }
- worker2.RunWorkerAsync();
- }
- catch (Exception ex)
- {
- MessageBox.Show(ex.Message);
- }
- }
- }
- private void backgroundWorker2_DoWork(object sender, DoWorkEventArgs e)//wysyl wiadomosci
- {
- if (true)
- {
- foreach (var item in listaSTW) //wysyłamy do kazdego klienta
- {
- item.WriteLine(text_to_send);
- }
- }
- else
- {
- MessageBox.Show("send failed !");
- }
- worker2.CancelAsync();
- }
- private void backgroundWorker3_DoWork(object sender, DoWorkEventArgs e)
- {
- TcpListener listener = new TcpListener(IPAddress.Any, 13000);
- //listaTcpListener.Add(new TcpListener(IPAddress.Any, 13000)); czy wystarczy 1 listener?
- bool NieMaZadnegoKlienta = true;
- int licznikClientow = 0;
- while (true)
- {
- listener.Start(); // nasluchujemy
- listaClientow.Add(new TcpClient()); // dodajemy nowego
- listaClientow[licznikClientow] = listener.AcceptTcpClient(); //przypisujemy
- listaSTR.Add(new StreamReader( listaClientow[licznikClientow].GetStream() ) ); // do czytania
- listaSTW.Add(new StreamWriter( listaClientow[licznikClientow].GetStream() ) ); // do wysylania wiadomosci
- listaSTW[licznikClientow].AutoFlush = true; //czysci bufor
- if(listaClientow[0].Connected && NieMaZadnegoKlienta) // start watku nasluchiwania przez serwer
- {
- NieMaZadnegoKlienta = false;
- worker1.RunWorkerAsync(); // ten nasluchuje
- worker2.WorkerSupportsCancellation = true; //ten wysla
- }
- licznikClientow++;
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement