Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public sealed class SomeTcpServer : Server
- {
- public DbWorker Worker { get; set; }
- public event Action<string> InfoMessage;
- public TcpListener Tcp { get; private set; }
- public IPEndPoint ListeningEndPoint { get; set; } = new IPEndPoint(IPAddress.Any, 1945);
- protected override void BeforeStart()
- {
- Tcp = new TcpListener(ListeningEndPoint);
- Tcp.Start(32);
- PostInfoMessage("Server started");
- }
- protected override void BeforeStop()
- {
- Tcp.Stop();
- }
- protected override void RunSingleIteration()
- {
- TcpClient client = null;
- try
- {
- client = Tcp.AcceptTcpClient();
- }
- catch (SocketException e)
- {
- if (e.SocketErrorCode != SocketError.Interrupted)
- {
- PostInfoMessage($"Failed to accept client - {e}");
- }
- ShouldBeRunning = false;
- return;
- }
- ThreadPool.QueueUserWorkItem(state =>
- {
- var t = (Tuple<SomeTcpServer, TcpClient>) state;
- t.Item1.HandleClient(t.Item2);
- }, new Tuple<SomeTcpServer, TcpClient>(this, client));
- }
- protected override void AfterCycle()
- {
- Tcp.Stop();
- PostInfoMessage("Server stoped");
- }
- private void PostInfoMessage(string obj)
- {
- InfoMessage?.Invoke(obj);
- }
- private void HandleClient(TcpClient cli)
- {
- // TODO: Work with a single client
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement