Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Net;
- using System.Net.Sockets;
- using System.Threading;
- using ChatLib.FormEventArgs;
- namespace ChatLib
- {
- public class ChatServer
- {
- public event EventHandler<NewUserEventArgs> OnNewClient;
- public event EventHandler<MessageEventArgs> OnNewMessage;
- private TcpListener _tcpListener;
- private Thread _thread;
- public bool Run { get; private set; }
- private readonly int _port;
- public List<User> Users { get; } = new List<User>();
- public ChatServer(int port)
- {
- _port = port;
- }
- public void Start()
- {
- if (!Run)
- {
- Run = true;
- _thread = new Thread(() =>
- {
- _tcpListener = new TcpListener(IPAddress.Any, _port);
- _tcpListener.Start();
- while (Run)
- {
- try
- {
- ThreadPool.QueueUserWorkItem(objectState =>
- {
- var user = new User((TcpClient)objectState);
- user.OnMessage += (sender, args) => OnNewMessage?.Invoke(sender, args);
- Users.Add(user);
- user.Listen();
- OnNewClient?.Invoke(this, new NewUserEventArgs(user));
- }, _tcpListener.AcceptTcpClient());
- }
- catch (Exception e)
- {
- Run = false;
- }
- }
- _tcpListener.Stop();
- });
- _thread.Start();
- }
- }
- public void Stop()
- {
- _tcpListener.Stop();
- }
- public void Restart()
- {
- Stop();
- Start();
- }
- public void BroadcastMessage(Message message)
- {
- if(message.Msg == string.Empty)
- return;
- foreach (var user in Users)
- user.WriteMessage(message);
- }
- public void UnicastMessage(User user, Message message)
- {
- if (message.Msg == string.Empty)
- return;
- user.WriteMessage(message);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement