Example #1
0
        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);
            }
        }
Example #2
0
        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);
            }
        }
Example #3
0
        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);
            }
        }