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.
150 lines
3.7 KiB
150 lines
3.7 KiB
using System;
|
|
using System.Net;
|
|
using System.Net.Sockets;
|
|
using System.Text;
|
|
|
|
namespace SSWMS.Server
|
|
{
|
|
public delegate void ConnectedEventHandler(BaseSocket socket);
|
|
public delegate void DisConnectedEventHandler(BaseSocket socket);
|
|
public delegate void MessageReceivedEventHandler(BaseSocket socket, byte[] message);
|
|
|
|
public class BaseSocket
|
|
{
|
|
private readonly byte[] _buffer = new byte[1024];
|
|
protected Socket _socket;
|
|
public string RemoteIP;
|
|
public int RemotePort;
|
|
public bool Connected
|
|
{
|
|
get
|
|
{
|
|
return _socket != null && _socket.Connected;
|
|
}
|
|
}
|
|
public event DisConnectedEventHandler DisConnected;
|
|
public event MessageReceivedEventHandler MessageReceived;
|
|
|
|
public BaseSocket(Socket socket)
|
|
{
|
|
_socket = socket;
|
|
if (_socket != null)
|
|
{
|
|
RemoteIP = (_socket.RemoteEndPoint as IPEndPoint).Address.ToString();
|
|
RemotePort = (_socket.RemoteEndPoint as IPEndPoint).Port;
|
|
}
|
|
}
|
|
|
|
public void BeginReceive()
|
|
{
|
|
try
|
|
{
|
|
if (_socket != null)
|
|
{
|
|
_socket.BeginReceive(_buffer, 0, _buffer.Length, SocketFlags.None, new AsyncCallback(OnReceive), null);
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
}
|
|
|
|
public void OnReceive(IAsyncResult iar)
|
|
{
|
|
try
|
|
{
|
|
int iReceived = _socket.EndReceive(iar);
|
|
if (iReceived > 0)
|
|
{
|
|
byte[] message = new byte[iReceived];
|
|
Array.Copy(_buffer, message, iReceived);
|
|
if (MessageReceived != null)
|
|
{
|
|
MessageReceived.BeginInvoke(this, message, null, null);
|
|
}
|
|
_socket.BeginReceive(_buffer, 0, _buffer.Length, SocketFlags.None, new AsyncCallback(OnReceive), null);
|
|
}
|
|
else
|
|
{
|
|
if (DisConnected != null)
|
|
{
|
|
DisConnected(this);
|
|
}
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
if (DisConnected != null)
|
|
{
|
|
DisConnected(this);
|
|
}
|
|
}
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
try
|
|
{
|
|
if (_socket != null)
|
|
{
|
|
_socket.Dispose();
|
|
_socket = null;
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
_socket = null;
|
|
}
|
|
}
|
|
|
|
public void Send(byte[] message)
|
|
{
|
|
try
|
|
{
|
|
if (_socket != null)
|
|
{
|
|
_socket.Send(message);
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
}
|
|
|
|
public void BeginSend(byte[] message)
|
|
{
|
|
try
|
|
{
|
|
if (_socket != null)
|
|
{
|
|
_socket.BeginSend(message, 0, message.Length, SocketFlags.None, null, null);
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
}
|
|
|
|
public void Send(string message)
|
|
{
|
|
try
|
|
{
|
|
Send(Encoding.ASCII.GetBytes(message));
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
}
|
|
|
|
public void BeginSend(string message)
|
|
{
|
|
try
|
|
{
|
|
BeginSend(Encoding.ASCII.GetBytes(message));
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
}
|
|
}
|
|
}
|