コード例 #1
0
        private void DataIn(IAsyncResult ar)
        {
            if (Source == null || Destination == null)
            {
                return;
            }
            int Readed = 0;

            Connection From = (Connection)ar.AsyncState;
            Connection To   = From.Other;

            try
            {
                Readed = From.NS.EndRead(ar);
            }
            catch
            {
                ForwarderEvent?.Invoke(this, From == Source ? ForwarderEventType.ClientGone : ForwarderEventType.ServerGone);
            }
            if (Readed > 0)
            {
                From.BytesReceived += (ulong)Readed;
                DataTransmitted?.Invoke(this, Readed);

                /*Only enable if the connections behave weirdly. Causes massive performance issues.
                 #if DEBUG
                 * lock ("console")
                 * {
                 *  Console.ForegroundColor = From == Source ? ConsoleColor.Green : ConsoleColor.Yellow;
                 *  Console.Error.WriteLine(b2s(From.Data, Readed));
                 *  Console.ResetColor();
                 * }
                 #endif
                 * //*/
                try
                {
                    To.NS.Write(From.Data, 0, Readed);
                    From.Handle = From.NS.BeginRead(From.Data, 0, BUFFER, DataIn, From);
                }
                catch
                {
                    ForwarderEvent?.Invoke(this, To == Source ? ForwarderEventType.ClientGone : ForwarderEventType.ServerGone);
                }
            }
            else
            {
                ForwarderEvent?.Invoke(this, From == Source ? ForwarderEventType.ClientGone : ForwarderEventType.ServerGone);
            }
        }
コード例 #2
0
ファイル: TransportLayer.cs プロジェクト: jimzrt/hyper
 protected void TransmitCallback(DataChunk dataChunk)
 {
     DataTransmitted?.Invoke(this, new EventArgs <DataChunk>(dataChunk));
 }