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; } } } }