/// <summary>
        /// Method ProcessReceive.
        /// </summary>
        /// <param name="receiveSocketAsyncEventArgs">Instance of SocketAsyncEventArgs.</param>
        private void ProcessReceive(SocketAsyncEventArgs receiveSocketAsyncEventArgs)
        {
            if (receiveSocketAsyncEventArgs != null && receiveSocketAsyncEventArgs.BytesTransferred > 0 && receiveSocketAsyncEventArgs.SocketError == SocketError.Success)
            {
                IPEndPoint sessionIPEndPoint = null;

                try
                {
                    sessionIPEndPoint = this._clientSocket.LocalEndPoint as IPEndPoint;
                }
                catch
                {
                }

                try
                {
                    Interlocked.Add(ref this._totalBytesReceived, receiveSocketAsyncEventArgs.BytesTransferred);

                    this.RaiseEvent(
                        this.DataReceived,
                        new AsyncSocketSessionEventArgs(
                            this.SessionId,
                            sessionIPEndPoint,
                            receiveSocketAsyncEventArgs.Buffer,
                            receiveSocketAsyncEventArgs.BytesTransferred,
                            receiveSocketAsyncEventArgs.Offset,
                            receiveSocketAsyncEventArgs.UserToken));

                    try
                    {
                        bool willRaiseEvent = this._clientSocket.ReceiveAsync(receiveSocketAsyncEventArgs);
                        if (!willRaiseEvent)
                        {
                            this.ProcessReceive(receiveSocketAsyncEventArgs);
                        }
                    }
                    catch
                    {
                        throw;
                    }
                }
                catch (Exception e)
                {
                    InternalLogger.Log(e);

                    this.RaiseEvent(
                        this.ErrorOccurred,
                        new AsyncSocketErrorEventArgs(
                            AsyncSocketTcpClientConstants.TcpClientReceiveException,
                            e,
                            AsyncSocketErrorCodeEnum.TcpClientReceiveException));
                }
            }
            else
            {
                IPEndPoint sessionIPEndPoint = null;

                try
                {
                    sessionIPEndPoint = this._clientSocket.LocalEndPoint as IPEndPoint;
                }
                catch
                {
                }

                this.RaiseEvent(this.Disconnected, new AsyncSocketSessionEventArgs(this.SessionId, sessionIPEndPoint));
            }
        }
        public bool Send(int sessionId, byte[] buffer)
        {
            this.CheckDisposed();

            if (!this.IsListening)
            {
                return(false);
            }

            SocketAsyncEventArgs sessionSocketAsyncEventArgs = null;

            lock (this._syncRoot)
            {
                if (this._sessionDictionary.ContainsKey(sessionId))
                {
                    sessionSocketAsyncEventArgs = this._sessionDictionary[sessionId];
                }
            }

            if (sessionSocketAsyncEventArgs != null)
            {
                Socket sessionSocket = sessionSocketAsyncEventArgs.UserToken as Socket;

                if (sessionSocket != null)
                {
                    SocketAsyncEventArgs sendSocketAsyncEventArgs = null;

                    try
                    {
                        sendSocketAsyncEventArgs           = new SocketAsyncEventArgs();
                        sendSocketAsyncEventArgs.UserToken = sessionSocket;
                        sendSocketAsyncEventArgs.SetBuffer(buffer, 0, buffer.Length);
                        sendSocketAsyncEventArgs.Completed += this.SendSocketAsyncEventArgsCompleted;

                        try
                        {
                            bool willRaiseEvent = sessionSocket.SendAsync(sendSocketAsyncEventArgs);
                            if (!willRaiseEvent)
                            {
                                this.ProcessSend(sendSocketAsyncEventArgs);
                            }

                            return(true);
                        }
                        catch
                        {
                            throw;
                        }
                    }
                    catch (Exception e)
                    {
                        if (sendSocketAsyncEventArgs != null)
                        {
                            sendSocketAsyncEventArgs.Completed -= this.SendSocketAsyncEventArgsCompleted;
                            sendSocketAsyncEventArgs.UserToken  = null;
                            sendSocketAsyncEventArgs.Dispose();
                            sendSocketAsyncEventArgs = null;
                        }

                        InternalLogger.Log(e);

                        this.RaiseEvent(
                            this.ErrorOccurred,
                            new AsyncSocketErrorEventArgs(
                                AsyncSocketTcpServerConstants.TcpServerSendException,
                                e,
                                AsyncSocketErrorCodeEnum.TcpServerSendException));
                    }
                }
            }

            return(false);
        }
        /// <summary>
        /// Establishes a connection to a remote host.
        /// </summary>
        /// <param name="throwOnError">true to throw any exception that occurs.-or- false to ignore any exception that occurs.</param>
        /// <returns>true if succeeded; otherwise, false.</returns>
        public bool Start(bool throwOnError = false)
        {
            this.CheckDisposed();

            if (!this.IsConnected)
            {
                try
                {
                    IPEndPoint remoteIPEndPoint = new IPEndPoint(IPAddress.Parse(this.RemoteIP), this.RemotePort);

                    this.CloseConnectSocketAsyncEventArgs();
                    this.CloseClientSocket();
                    this.CloseReceiveSocketAsyncEventArgs();

                    this._clientSocket = new Socket(remoteIPEndPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
                    this._clientSocket.SetSocketOption(SocketOptionLevel.Tcp, SocketOptionName.NoDelay, true);
                    this._clientSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
                    this._clientSocket.UseOnlyOverlappedIO = true;

                    this._connectSocketAsyncEventArgs = new SocketAsyncEventArgs();
                    this._connectSocketAsyncEventArgs.RemoteEndPoint = remoteIPEndPoint;
                    this._connectSocketAsyncEventArgs.UserToken      = this._clientSocket;
                    this._connectSocketAsyncEventArgs.Completed     += this.ConnectSocketAsyncEventArgsCompleted;

                    this.SessionId = this._clientSocket.GetHashCode();

                    try
                    {
                        bool willRaiseEvent = this._clientSocket.ConnectAsync(this._connectSocketAsyncEventArgs);
                        if (!willRaiseEvent)
                        {
                            this.ProcessConnect();
                        }

                        Debug.WriteLine(AsyncSocketTcpClientConstants.TcpClientStartSucceeded);

                        this.RaiseEvent(this.Started);

                        return(true);
                    }
                    catch
                    {
                        throw;
                    }
                }
                catch (Exception e)
                {
                    Debug.WriteLine(AsyncSocketTcpClientConstants.TcpClientStartException);

                    InternalLogger.Log(e);

                    this.RaiseEvent(
                        this.ErrorOccurred,
                        new AsyncSocketErrorEventArgs(
                            AsyncSocketTcpClientConstants.TcpClientStartException,
                            e,
                            AsyncSocketErrorCodeEnum.TcpClientStartException));

                    if (throwOnError)
                    {
                        throw;
                    }
                }
            }

            return(false);
        }
Exemplo n.º 4
0
        public void WriteToStringWriterTests()
        {
            try
            {
                // Expected result is the same for both types of method invocation.
                const string expected = "Warn WWW\nError EEE\nFatal FFF\nTrace TTT\nDebug DDD\nInfo III\n";

                InternalLogger.LogLevel         = LogLevel.Trace;
                InternalLogger.IncludeTimestamp = false;
                {
                    StringWriter writer1 = new StringWriter()
                    {
                        NewLine = "\n"
                    };
                    InternalLogger.LogWriter = writer1;

                    // Named (based on LogLevel) public methods.
                    InternalLogger.Warn("WWW");
                    InternalLogger.Error("EEE");
                    InternalLogger.Fatal("FFF");
                    InternalLogger.Trace("TTT");
                    InternalLogger.Debug("DDD");
                    InternalLogger.Info("III");

                    TestWriter(expected, writer1);
                }
                {
                    //
                    // Reconfigure the LogWriter.

                    StringWriter writer2 = new StringWriter()
                    {
                        NewLine = "\n"
                    };
                    InternalLogger.LogWriter = writer2;

                    // Invoke Log(LogLevel, string) for every log level.
                    InternalLogger.Log(LogLevel.Warn, "WWW");
                    InternalLogger.Log(LogLevel.Error, "EEE");
                    InternalLogger.Log(LogLevel.Fatal, "FFF");
                    InternalLogger.Log(LogLevel.Trace, "TTT");
                    InternalLogger.Log(LogLevel.Debug, "DDD");
                    InternalLogger.Log(LogLevel.Info, "III");

                    TestWriter(expected, writer2);
                }
                {
                    //
                    // Reconfigure the LogWriter.

                    StringWriter writer2 = new StringWriter()
                    {
                        NewLine = "\n"
                    };
                    InternalLogger.LogWriter = writer2;

                    // Invoke Log(LogLevel, string) for every log level.
                    InternalLogger.Log(LogLevel.Warn, () => "WWW");
                    InternalLogger.Log(LogLevel.Error, () => "EEE");
                    InternalLogger.Log(LogLevel.Fatal, () => "FFF");
                    InternalLogger.Log(LogLevel.Trace, () => "TTT");
                    InternalLogger.Log(LogLevel.Debug, () => "DDD");
                    InternalLogger.Log(LogLevel.Info, () => "III");

                    TestWriter(expected, writer2);
                }
            }
            finally
            {
                InternalLogger.Reset();
            }
        }
Exemplo n.º 5
0
        public void ExceptionTests()
        {
            using (new InternalLoggerScope())
            {
                InternalLogger.LogLevel         = LogLevel.Trace;
                InternalLogger.IncludeTimestamp = false;

                var ex1 = new Exception("e1");
                var ex2 = new Exception("e2", new Exception("inner"));
                var ex3 = new NLogConfigurationException("config error");
                var ex4 = new NLogConfigurationException("config error", ex2);
                var ex5 = new PathTooLongException();
                ex5.Data["key1"] = "value1";
                Exception ex6 = null;

                const string prefix = " Exception: ";

                {
                    string expected =
                        "Warn WWW1" + prefix + ex1 + Environment.NewLine +
                        "Error EEE1" + prefix + ex2 + Environment.NewLine +
                        "Fatal FFF1" + prefix + ex3 + Environment.NewLine +
                        "Trace TTT1" + prefix + ex4 + Environment.NewLine +
                        "Debug DDD1" + prefix + ex5 + Environment.NewLine +
                        "Info III1" + Environment.NewLine;

                    StringWriter consoleOutWriter = new StringWriter()
                    {
                        NewLine = Environment.NewLine
                    };

                    // Redirect the console output to a StringWriter.
                    InternalLogger.LogWriter = consoleOutWriter;

                    // Named (based on LogLevel) public methods.

                    InternalLogger.Warn(ex1, "WWW1");
                    InternalLogger.Error(ex2, "EEE1");
                    InternalLogger.Fatal(ex3, "FFF1");
                    InternalLogger.Trace(ex4, "TTT1");
                    InternalLogger.Debug(ex5, "DDD1");
                    InternalLogger.Info(ex6, "III1");

                    consoleOutWriter.Flush();
                    var strings = consoleOutWriter.ToString();

                    Assert.Equal(expected, strings);
                }
                {
                    string expected =
                        "Warn WWW2" + prefix + ex1 + Environment.NewLine +
                        "Error EEE2" + prefix + ex2 + Environment.NewLine +
                        "Fatal FFF2" + prefix + ex3 + Environment.NewLine +
                        "Trace TTT2" + prefix + ex4 + Environment.NewLine +
                        "Debug DDD2" + prefix + ex5 + Environment.NewLine +
                        "Info III2" + Environment.NewLine;

                    StringWriter consoleOutWriter = new StringWriter()
                    {
                        NewLine = Environment.NewLine
                    };

                    // Redirect the console output to a StringWriter.
                    InternalLogger.LogWriter = consoleOutWriter;

                    // Named (based on LogLevel) public methods.

                    InternalLogger.Warn(ex1, () => "WWW2");
                    InternalLogger.Error(ex2, () => "EEE2");
                    InternalLogger.Fatal(ex3, () => "FFF2");
                    InternalLogger.Trace(ex4, () => "TTT2");
                    InternalLogger.Debug(ex5, () => "DDD2");
                    InternalLogger.Info(ex6, () => "III2");

                    consoleOutWriter.Flush();
                    var strings = consoleOutWriter.ToString();
                    Assert.Equal(expected, strings);
                }
                {
                    string expected =
                        "Warn WWW3" + prefix + ex1 + Environment.NewLine +
                        "Error EEE3" + prefix + ex2 + Environment.NewLine +
                        "Fatal FFF3" + prefix + ex3 + Environment.NewLine +
                        "Trace TTT3" + prefix + ex4 + Environment.NewLine +
                        "Debug DDD3" + prefix + ex5 + Environment.NewLine +
                        "Info III3" + Environment.NewLine;

                    StringWriter consoleOutWriter = new StringWriter()
                    {
                        NewLine = Environment.NewLine
                    };

                    // Redirect the console output to a StringWriter.
                    InternalLogger.LogWriter = consoleOutWriter;

                    // Named (based on LogLevel) public methods.

                    InternalLogger.Log(ex1, LogLevel.Warn, "WWW3");
                    InternalLogger.Log(ex2, LogLevel.Error, "EEE3");
                    InternalLogger.Log(ex3, LogLevel.Fatal, "FFF3");
                    InternalLogger.Log(ex4, LogLevel.Trace, "TTT3");
                    InternalLogger.Log(ex5, LogLevel.Debug, "DDD3");
                    InternalLogger.Log(ex6, LogLevel.Info, "III3");

                    consoleOutWriter.Flush();
                    var strings = consoleOutWriter.ToString();
                    Assert.Equal(expected, strings);
                }
                {
                    string expected =
                        "Warn WWW4" + prefix + ex1 + Environment.NewLine +
                        "Error EEE4" + prefix + ex2 + Environment.NewLine +
                        "Fatal FFF4" + prefix + ex3 + Environment.NewLine +
                        "Trace TTT4" + prefix + ex4 + Environment.NewLine +
                        "Debug DDD4" + prefix + ex5 + Environment.NewLine +
                        "Info III4" + Environment.NewLine;

                    StringWriter consoleOutWriter = new StringWriter()
                    {
                        NewLine = Environment.NewLine
                    };

                    // Redirect the console output to a StringWriter.
                    InternalLogger.LogWriter = consoleOutWriter;

                    // Named (based on LogLevel) public methods.

                    InternalLogger.Log(ex1, LogLevel.Warn, () => "WWW4");
                    InternalLogger.Log(ex2, LogLevel.Error, () => "EEE4");
                    InternalLogger.Log(ex3, LogLevel.Fatal, () => "FFF4");
                    InternalLogger.Log(ex4, LogLevel.Trace, () => "TTT4");
                    InternalLogger.Log(ex5, LogLevel.Debug, () => "DDD4");
                    InternalLogger.Log(ex6, LogLevel.Info, () => "III4");

                    var strings = consoleOutWriter.ToString();
                    Assert.Equal(expected, strings);
                }
            }
        }
Exemplo n.º 6
0
        public void WriteToConsoleOutTests()
        {
            // Expected result is the same for both types of method invocation.
            const string expected = "Warn WWW\nError EEE\nFatal FFF\nTrace TTT\nDebug DDD\nInfo III\n";

            using (var loggerScope = new InternalLoggerScope(true))
            {
                InternalLogger.LogLevel         = LogLevel.Trace;
                InternalLogger.IncludeTimestamp = false;
                InternalLogger.LogToConsole     = true;

                {
                    StringWriter consoleOutWriter1 = new StringWriter()
                    {
                        NewLine = "\n"
                    };

                    // Redirect the console output to a StringWriter.
                    loggerScope.SetConsoleOutput(consoleOutWriter1);

                    // Named (based on LogLevel) public methods.
                    InternalLogger.Warn("WWW");
                    InternalLogger.Error("EEE");
                    InternalLogger.Fatal("FFF");
                    InternalLogger.Trace("TTT");
                    InternalLogger.Debug("DDD");
                    InternalLogger.Info("III");

                    TestWriter(expected, consoleOutWriter1);
                }

                //
                // Redirect the console output to another StringWriter.
                {
                    StringWriter consoleOutWriter2 = new StringWriter()
                    {
                        NewLine = "\n"
                    };
                    loggerScope.SetConsoleOutput(consoleOutWriter2);

                    // Invoke Log(LogLevel, string) for every log level.
                    InternalLogger.Log(LogLevel.Warn, "WWW");
                    InternalLogger.Log(LogLevel.Error, "EEE");
                    InternalLogger.Log(LogLevel.Fatal, "FFF");
                    InternalLogger.Log(LogLevel.Trace, "TTT");
                    InternalLogger.Log(LogLevel.Debug, "DDD");
                    InternalLogger.Log(LogLevel.Info, "III");

                    TestWriter(expected, consoleOutWriter2);
                }

                //lambdas
                {
                    StringWriter consoleOutWriter1 = new StringWriter()
                    {
                        NewLine = "\n"
                    };

                    // Redirect the console output to a StringWriter.
                    loggerScope.SetConsoleOutput(consoleOutWriter1);

                    // Named (based on LogLevel) public methods.
                    InternalLogger.Warn(() => "WWW");
                    InternalLogger.Error(() => "EEE");
                    InternalLogger.Fatal(() => "FFF");
                    InternalLogger.Trace(() => "TTT");
                    InternalLogger.Debug(() => "DDD");
                    InternalLogger.Info(() => "III");

                    TestWriter(expected, consoleOutWriter1);
                }
            }
        }
 public void Log <TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func <TState, Exception, string> formatter)
 {
     InternalLogger.Log(logLevel, eventId, state, exception, formatter);
     XLog(logLevel, formatter.Invoke(state, exception));
 }