Files
GoKart/trunk/Common/Net/Acceptor.cs
Andrew 6d74d5b59e source
Created by: Andrew
2016-08-27 22:43:23 -04:00

66 lines
1.5 KiB
C#

using KartExtreme.IO;
using System;
using System.Net;
using System.Net.Sockets;
namespace KartExtreme.Net
{
public sealed class Acceptor
{
public const int Backlog = 25;
public ushort Port { get; private set; }
private readonly TcpListener m_listener;
private bool m_disposed;
public Action<Socket> OnClientAccepted;
public Acceptor(ushort port) : this(IPAddress.Any, port) { }
public Acceptor(IPAddress ip, ushort port)
{
Port = port;
m_listener = new TcpListener(IPAddress.Any, port);
OnClientAccepted = null;
m_disposed = false;
}
public void Start()
{
m_listener.Start(Backlog);
m_listener.BeginAcceptSocket(EndAccept, null);
Log.Inform("Initialized clients listener on {0}.", this.Port);
}
public void Stop()
{
Dispose();
}
private void EndAccept(IAsyncResult iar)
{
if (m_disposed) { return; }
Socket client = m_listener.EndAcceptSocket(iar);
if (OnClientAccepted != null)
OnClientAccepted(client);
if (!m_disposed)
m_listener.BeginAcceptSocket(EndAccept, null);
}
public void Dispose()
{
if (!m_disposed)
{
m_disposed = true;
m_listener.Server.Close();
}
}
}
}