You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
90 lines
2.3 KiB
90 lines
2.3 KiB
using System;
|
|
using System.Net;
|
|
using System.Net.Sockets;
|
|
|
|
namespace SSWMS.Server
|
|
{
|
|
class ServerSocket
|
|
{
|
|
private readonly int _port;
|
|
private Socket _socket;
|
|
public event ConnectedEventHandler Connected;
|
|
public event DisConnectedEventHandler DisConnected;
|
|
public event MessageReceivedEventHandler MessageReceived;
|
|
|
|
public ServerSocket(int port)
|
|
{
|
|
_port = port;
|
|
}
|
|
|
|
public void BeginAccept()
|
|
{
|
|
try
|
|
{
|
|
if (_socket == null)
|
|
{
|
|
_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
|
|
}
|
|
_socket.Bind(new IPEndPoint(IPAddress.Any, _port));
|
|
_socket.Listen(10);
|
|
_socket.BeginAccept(new AsyncCallback(OnAccept), null);
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
}
|
|
|
|
private void OnAccept(IAsyncResult ar)
|
|
{
|
|
try
|
|
{
|
|
Socket socket = _socket.EndAccept(ar);
|
|
BaseSocket baseSocket = new BaseSocket(socket);
|
|
if (Connected != null)
|
|
{
|
|
Connected(baseSocket);
|
|
}
|
|
baseSocket.DisConnected += OnDisConnected;
|
|
baseSocket.MessageReceived += OnMessageReceived;
|
|
baseSocket.BeginReceive();
|
|
_socket.BeginAccept(new AsyncCallback(OnAccept), null);
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
}
|
|
|
|
private void OnDisConnected(BaseSocket socket)
|
|
{
|
|
if (DisConnected != null)
|
|
{
|
|
DisConnected(socket);
|
|
}
|
|
}
|
|
|
|
|
|
private void OnMessageReceived(BaseSocket socket, byte[] message)
|
|
{
|
|
if (MessageReceived != null)
|
|
{
|
|
MessageReceived(socket, message);
|
|
}
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
try
|
|
{
|
|
if (_socket != null)
|
|
{
|
|
_socket.Dispose();
|
|
_socket = null;
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
_socket = null;
|
|
}
|
|
}
|
|
}
|
|
}
|