91 lines
2.3 KiB
91 lines
2.3 KiB
1 year ago
|
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;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|