private void outgoingReceive(IAsyncResult ar) { kSocketTransferItem TransferItem = (kSocketTransferItem)ar.AsyncState; try { int bytesRead = TransferItem.TransferSocket.EndReceive(ar); if (bytesRead > 0) { Array.Resize(ref TransferItem.TempData, bytesRead); TransferItem.TransferedData.AddRange(TransferItem.TempData.ToList()); Array.Resize(ref TransferItem.TempData, TransferItem.TransferSize); TransferItem.TransferSocket.BeginReceive(TransferItem.TempData, 0, TransferItem.TransferSize, SocketFlags.Partial, new AsyncCallback(incomingReceive), TransferItem); } if (bytesRead != TransferItem.TransferSize) { if (!IsEndOfMessage(TransferItem.TransferedData.ToArray(), kSocketTransferItem.TransferSplitData)) { TransferItem.TransferSocket.BeginReceive(TransferItem.TempData, 0, TransferItem.TransferSize, SocketFlags.Partial, new AsyncCallback(incomingReceive), TransferItem); } else { kSocketTransferItem _TransferItem = TransferItem; Array.Clear(TransferItem.TempData, 0, TransferItem.TempData.Length); TransferItem.TransferedData.RemoveRange(TransferItem.TransferedData.Count() - kSocketTransferItem.TransferSplitData.Length, kSocketTransferItem.TransferSplitData.Length); this.DataReceived?.Invoke(_TransferItem, _TransferItem.TransferSocket); } } } catch (Exception) { this.OutgoingDisconnected?.Invoke(TransferItem.TransferSocket); this.RemoteSockets.Remove(TransferItem.TransferSocket); } }
private void incomingAccept(IAsyncResult ar) { string clientIP = ""; try { Socket inSock = (System.Net.Sockets.Socket)ar.AsyncState; Socket clientSock = inSock.EndAccept(ar); clientIP = (clientSock.RemoteEndPoint as IPEndPoint).Address.ToString(); inSock.BeginAccept(new AsyncCallback(incomingAccept), inSock); this.IncomingConnected?.Invoke(clientSock); this.RemoteSockets.Add(clientSock); kSocketTransferItem TransferItem = new kSocketTransferItem(this.SocketBufferSize) { TransferSocket = clientSock }; clientSock.BeginReceive(TransferItem.TempData, 0, TransferItem.TransferSize, SocketFlags.Partial, new AsyncCallback(incomingReceive), TransferItem); this.ChannelLog?.Invoke(ChannelLogTypes.ClientConnected, String.Concat("Client connected from ", clientIP)); inSock = null; clientSock = null; } catch (Exception ex) { this.IncomingDisconnected?.Invoke((System.Net.Sockets.Socket)ar.AsyncState); this.RemoteSockets.Remove((System.Net.Sockets.Socket)ar.AsyncState); this.ChannelError?.Invoke(ChannelErrorTypes.ConnectError, ex.Message.ToString(), ex, (System.Net.Sockets.Socket)ar.AsyncState); } }
private void outgoingConnect(IAsyncResult ar) { try { Socket inSock = (Socket)ar.AsyncState; inSock.EndConnect(ar); kSocketTransferItem TransferItem = new kSocketTransferItem(this.SocketBufferSize) { TransferSocket = inSock }; inSock.BeginReceive(TransferItem.TempData, 0, TransferItem.TransferSize, SocketFlags.Partial, new AsyncCallback(outgoingReceive), TransferItem); this.ChannelLog?.Invoke(ChannelLogTypes.ClientConnected, "Client has successfully connected to listener"); this.OutgoingConnected?.Invoke((Socket)ar.AsyncState); inSock = null; } catch (Exception ex) { this.ChannelError?.Invoke(ChannelErrorTypes.ConnectError, ex.Message.ToString(), ex, (Socket)ar.AsyncState); } }