예제 #1
0
        void BeginConnect_Callback(IAsyncResult iar)
        {
            try
            {
                ClientSock.EndConnect(iar);

                //At this point we are connected to the destination

                if (OnClientConnected != null)
                {
                    OnClientConnected.Invoke();
                }

                SReceivedData ReceivedData = new SReceivedData
                {
                    NextBufferSize = -1,
                    Buffer         = new byte[4]
                };

                ClientSock.BeginReceive(ReceivedData.Buffer, 0, 4, SocketFlags.None, BeginReceive_Callback, ReceivedData);
            }
            catch
            {
                Reconnect();
            }
        }
예제 #2
0
        void HandleReceivedBuffer(int ReceivedDataSize, SReceivedData ReceivedData)
        {
            if (ReceivedDataSize != ReceivedData.Buffer.Length)
            {
                ClientSock.BeginReceive(ReceivedData.Buffer, ReceivedDataSize, ReceivedData.Buffer.Length - ReceivedDataSize, SocketFlags.None, BeginReceive_Callback, ReceivedData);
            }
            else
            {
                if (ReceivedData.NextBufferSize == -1)
                {
                    ReceivedData.NextBufferSize = BitConverter.ToInt32(ReceivedData.Buffer, 0);
                    ReceivedData.Buffer         = new byte[ReceivedData.NextBufferSize];
                    ClientSock.BeginReceive(ReceivedData.Buffer, 0, ReceivedData.NextBufferSize, SocketFlags.None, BeginReceive_Callback, ReceivedData);
                }
                else
                {
                    if (OnClientReceivedData != null)
                    {
                        OnClientReceivedData.Invoke(ReceivedData.Buffer);
                    }

                    ReceivedData.NextBufferSize = -1;
                    ReceivedData.Buffer         = new byte[4];
                    ClientSock.BeginReceive(ReceivedData.Buffer, 0, ReceivedData.Buffer.Length, SocketFlags.None, BeginReceive_Callback, ReceivedData);
                }
            }
        }
예제 #3
0
        void BeginReceive_Callback(IAsyncResult iar)
        {
            try
            {
                SReceivedData ReceivedData = (SReceivedData)iar.AsyncState;

                int DataReceived = 0;

                if (CServerSocket.FinishReceiveData(ref DataReceived, ClientSock, iar))
                {
                    HandleReceivedBuffer(DataReceived, ReceivedData);
                }
                else
                {
                    HandleDisconnect();
                }
            }
            catch
            {
                HandleDisconnect();
            }
        }