/// <summary> /// Open a new client with default settings (everything beside accept is set to asynchronic). /// </summary> public NetworkClientBase(CommunicationSettings clientCommunicationSettings) { clientMode = NetworkClientMode.None; this.clientCommunicationSettings = clientCommunicationSettings; skt = new NetworkSocketManagerTCP(); skt.OnSocketEvent += new NetworkSocketManagerTCP.DelegateSocketEventMethod(skt_OnSocketEvent); }
/// <summary> /// Open a new client by attaching an existing socket. /// </summary> /// <param name="socketManagerTCP">The socket to attach.</param> public NetworkClientBase(NetworkSocketManagerTCP socketManagerTCP) { clientMode = NetworkClientMode.None; skt = socketManagerTCP; skt.OnSocketEvent += new NetworkSocketManagerTCP.DelegateSocketEventMethod(skt_OnSocketEvent); }
private void Async_Accept_Callback(IAsyncResult ar) { bool bError = false; NetworkSocketManagerTCP AcceptingSocket = null; try { Socket sktAccepted = skt.EndAccept(ar); AcceptingSocket = new NetworkSocketManagerTCP(sktAccepted); } catch { bError = true; } if (OnSocketEvent != null) { if (bError) OnSocketEvent.BeginInvoke(SocketEventTypeEnum.Error, "Async_Accept_Callback Failed.", null, null); else OnSocketEvent.BeginInvoke(SocketEventTypeEnum.Accepted, AcceptingSocket, null, null); } }
private void skt_OnSocketEvent(NetworkSocketManagerTCP.SocketEventTypeEnum EventType, object EventData) { switch (EventType) { case NetworkSocketManagerTCP.SocketEventTypeEnum.None: if (OnClientEvent != null) OnClientEvent.BeginInvoke(ClientEventTypeEnum.None, EventData, null, null); break; case NetworkSocketManagerTCP.SocketEventTypeEnum.Connected: if (OnClientEvent != null) OnClientEvent.BeginInvoke(ClientEventTypeEnum.Connected, EventData, null, null); break; case NetworkSocketManagerTCP.SocketEventTypeEnum.Accepted: if (OnClientEvent != null) { NetworkClientBase nwcbAccepter = new NetworkClientBase((NetworkSocketManagerTCP)EventData); OnClientEvent.BeginInvoke(ClientEventTypeEnum.Accepted, nwcbAccepter, null, null); } break; case NetworkSocketManagerTCP.SocketEventTypeEnum.DataSent: if (OnClientEvent != null) OnClientEvent.BeginInvoke(ClientEventTypeEnum.MessageSent, EventData, null, null); break; case NetworkSocketManagerTCP.SocketEventTypeEnum.DataRecieved: if (((byte[])EventData).Length > 0) { if (OnClientEvent != null) OnClientEvent.BeginInvoke(ClientEventTypeEnum.RawDataRecieved, ((byte[])EventData), null, null); incommingData = ByteArrayOperations.AddByteArrays(incommingData, (byte[])EventData); byte[] data = null; while (ApplicationLayerTransmitionControl.IsIntegratedDataWaiting(incommingData)) { data = ApplicationLayerTransmitionControl. ExtractIntegratedDataFromBuffer(ref incommingData); if (OnClientEvent != null) OnClientEvent.BeginInvoke(ClientEventTypeEnum.MessageRecieved, data, null, null); } if (incommingData.Length > 0) Recieve(); } else if (OnClientEvent != null) OnClientEvent.BeginInvoke(ClientEventTypeEnum.Disconnected, EventData, null, null); break; case NetworkSocketManagerTCP.SocketEventTypeEnum.Disconnected: skt.Dispose(); if (OnClientEvent != null) OnClientEvent.BeginInvoke(ClientEventTypeEnum.Disconnected, EventData, null, null); break; case NetworkSocketManagerTCP.SocketEventTypeEnum.RemoteSideDisconnected: Disconnect(); if (OnClientEvent != null) OnClientEvent.BeginInvoke(ClientEventTypeEnum.RemoteSideDisconnected, EventData, null, null); break; case NetworkSocketManagerTCP.SocketEventTypeEnum.Error: if (OnClientEvent != null) OnClientEvent.BeginInvoke(ClientEventTypeEnum.Error, EventData, null, null); break; } }
/// <summary> /// Accept synchronic. /// </summary> public void Sync_Accept() { bool bError = false; bool bAcceptInvoked = false; NetworkSocketManagerTCP acceptingSocket = null; try { if (BlockingMode) { bAcceptInvoked = true; Socket sktAccepted = skt.Accept(); acceptingSocket = new NetworkSocketManagerTCP(sktAccepted); } else //not blocking mode, check if a socket is pending. if (skt.Poll(1000, SelectMode.SelectRead)) { bAcceptInvoked = true; Socket sktAccepted = skt.Accept(); acceptingSocket = new NetworkSocketManagerTCP(sktAccepted); } } catch { bError = true; } if (OnSocketEvent != null) { if (bError) OnSocketEvent.BeginInvoke(SocketEventTypeEnum.Error, "Sync_Accept Failed.", null, null); else if(bAcceptInvoked) OnSocketEvent.BeginInvoke(SocketEventTypeEnum.Accepted, acceptingSocket, null, null); } }