Advertisement
Guest User

Untitled

a guest
Jan 23rd, 2020
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.51 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Net;
  4. using System.Net.Sockets;
  5. using System.Threading;
  6. using ChatLib.FormEventArgs;
  7.  
  8. namespace ChatLib
  9. {
  10.     public class ChatServer
  11.     {
  12.         public event EventHandler<NewUserEventArgs> OnNewClient;
  13.         public event EventHandler<MessageEventArgs> OnNewMessage;
  14.  
  15.         private TcpListener _tcpListener;
  16.         private Thread _thread;
  17.         public bool Run { get; private set; }
  18.         private readonly int _port;
  19.  
  20.         public List<User> Users { get; } = new List<User>();
  21.  
  22.         public ChatServer(int port)
  23.         {
  24.             _port = port;
  25.         }
  26.  
  27.         public void Start()
  28.         {
  29.             if (!Run)
  30.             {
  31.                 Run = true;
  32.  
  33.                 _thread = new Thread(() =>
  34.                 {
  35.                     _tcpListener = new TcpListener(IPAddress.Any, _port);
  36.                     _tcpListener.Start();
  37.  
  38.                     while (Run)
  39.                     {
  40.                         try
  41.                         {
  42.                             ThreadPool.QueueUserWorkItem(objectState =>
  43.                             {
  44.                                 var user = new User((TcpClient)objectState);
  45.                                 user.OnMessage += (sender, args) => OnNewMessage?.Invoke(sender, args);
  46.                                 Users.Add(user);
  47.                                 user.Listen();
  48.                                 OnNewClient?.Invoke(this, new NewUserEventArgs(user));
  49.                             }, _tcpListener.AcceptTcpClient());
  50.                         }
  51.                         catch (Exception e)
  52.                         {
  53.                             Run = false;
  54.                         }
  55.                     }
  56.  
  57.                     _tcpListener.Stop();
  58.                 });
  59.  
  60.                 _thread.Start();
  61.             }
  62.         }
  63.  
  64.         public void Stop()
  65.         {
  66.             _tcpListener.Stop();
  67.         }
  68.  
  69.         public void Restart()
  70.         {
  71.             Stop();
  72.             Start();
  73.         }
  74.  
  75.         public void BroadcastMessage(Message message)
  76.         {
  77.             if(message.Msg == string.Empty)
  78.                 return;
  79.  
  80.             foreach (var user in Users)
  81.                 user.WriteMessage(message);
  82.         }
  83.  
  84.         public void UnicastMessage(User user, Message message)
  85.         {
  86.             if (message.Msg == string.Empty)
  87.                 return;
  88.  
  89.             user.WriteMessage(message);
  90.         }
  91.     }
  92. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement