Пример #1
0
        public void StartListening()
        {
            try
            {
                serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                serverSocket.Bind(new IPEndPoint(IPAddress.Any, port));
                serverSocket.Listen(100);

                LogRecorder.Info("AnyscSocketServer start listening...");

                while (true)
                {
                    allDone.Reset();
                    if (!isDisposing)
                    {
                        serverSocket.BeginAccept(new AsyncCallback(AcceptCallback), serverSocket);
                    }
                    allDone.WaitOne();
                }
            }
            catch (System.Net.Sockets.SocketException ex)
            {
                LogRecorder.Error(String.Format("{0}() throw an exception:{1}", System.Reflection.MethodBase.GetCurrentMethod().Name, ex.ToString()));
            }
            catch (Exception ex)
            {
                LogRecorder.Error(String.Format("{0}() throw an exception:{1}", System.Reflection.MethodBase.GetCurrentMethod().Name, ex.ToString()));
                throw;
            }
        }
 /// <summary>
 ///     关闭连接
 /// </summary>
 public void Close()
 {
     if (_connection == null)
     {
         return;
     }
     try
     {
         lock (LockData)
         {
             if (_connection.State == ConnectionState.Open)
             {
                 //Trace.WriteLine("Close Connection", "SqlServerDataBase");
                 _connection.Close();
             }
             //Trace.WriteLine(_count--, "Close");
             _connection = null;
         }
     }
     catch (Exception exception)
     {
         _connection?.Dispose();
         Trace.WriteLine("Close Error", "SqlServerDataBase");
         LogRecorder.Error(exception.ToString());
     }
 }
Пример #3
0
 /// <summary>
 ///     执行命令
 /// </summary>
 /// <param name="parameter">界面传过来的参数</param>
 public void Execute(TParameter parameter)
 {
     try
     {
         if (!CanExecute(parameter))
         {
             return;
         }
         if (_prepareAction1 != null && !_prepareAction1(parameter))
         {
             return;
         }
         if (_prepareAction2 != null && !_prepareAction2(parameter, p => parameter = p))
         {
             return;
         }
         Status = CommandStatus.Executing;
         OnCanExecuteChanged();
         _token = new CancellationToken(false);
         _task  = new Task <TResult>(DoExecute, parameter, _token);
         _task.ContinueWith(OnEnd, TaskContinuationOptions.None);
         _task.Start();
     }
     catch (Exception ex)
     {
         LogRecorder.Error(ex.Message);
         Status = CommandStatus.Faulted;
         OnCanExecuteChanged();
         _endAction?.Invoke(Status, ex, default(TResult));
     }
 }
Пример #4
0
        /// <summary>
        /// 协议错误
        /// </summary>
        /// <param name="exception"></param>
        /// <returns></returns>
        private string ProtocolError(WebException exception)
        {
            try
            {
                var codes = exception.Message.Split(new[] { '(', ')' }, StringSplitOptions.RemoveEmptyEntries);
                if (codes.Length == 3)
                {
                    if (int.TryParse(codes[1], out var s))
                    {
                        switch (s)
                        {
                        case 404:
                            return(ToErrorString(ErrorCode.NetworkError, "页面不存在", "页面不存在"));

                        case 503:
                            return(ToErrorString(ErrorCode.NetworkError, "拒绝访问", "页面不存在"));
                            //default:
                            //    return ToErrorString(ErrorCode.NetworkError, $"错误{s}", exception.Message);
                        }
                    }
                }
                var msg = ReadResponse(exception.Response);
                LogRecorder.Error($"Call {Host}/{ApiName} Error:{msg}");
                return(msg); //ToErrorString(ErrorCode.NetworkError, "未知错误", );
            }
            catch (Exception e)
            {
                Status = WebExceptionStatus.UnknownError;
                LogRecorder.Exception(e);
                return(ToErrorString(ErrorCode.NetworkError, "未知错误", e.Message));
            }
        }
Пример #5
0
 private bool Request(string msg, ref int retry)
 {
     if (++retry > 5)
     {
         LogRecorder.Error($"数据事件服务(EntityEvent)无法连接!\r\n{msg}");
         return(false);
     }
     try
     {
         lock (this)
         {
             _socket.Request(msg);
         }
         return(true);
     }
     catch (Exception e)
     {
         LogRecorder.Exception(e);
         StationProgram.WriteLine($"【EntityEvent】publish error =>{e.Message}");
         retry++;
         Thread.Sleep(10);
         CreateSocket();
         return(Request(msg, ref retry));
     }
 }
Пример #6
0
 /// <summary>
 ///     页面操作处理入口
 /// </summary>
 protected override void OnPageLoaded()
 {
     IsFailed = false;
     Message  = null;
     State    = 0;
     try
     {
         DoActin(_action);
     }
     catch (AgebullBusinessException exception)
     {
         IsFailed = true;
         Message  = exception.Message;
     }
     catch (Exception exception)
     {
         IsFailed = true;
         State    = 3;
         Message  = "*--系统内部错误--*";
         Debug.WriteLine(exception);
         LogRecorder.Error(exception.StackTrace);
         LogRecorder.Error(exception.ToString());
         LogRecorder.MonitorTrace("Exception:" + exception.Message);
     }
 }
Пример #7
0
 /// <summary>
 ///     关闭连接
 /// </summary>
 public void Close()
 {
     if (_connection == null)
     {
         return;
     }
     try
     {
         lock (LockData)
         {
             if (_connection.State == ConnectionState.Open)
             {
                 //Trace.WriteLine("Close Connection", "MySqlDataBase");
                 _connection.Close();
             }
             Connections.Remove(_connection);
             LogRecorder.MonitorTrace($"未关闭总数{Connections.Count}");
             _connection = null;
         }
     }
     catch (Exception exception)
     {
         _connection?.Dispose();
         Debug.WriteLine("Close Error", "MySqlDataBase");
         LogRecorder.Error(exception.ToString());
     }
     finally
     {
         if (_default == this)
         {
             _default = null;
         }
     }
 }
Пример #8
0
        private void ReceiveCallback(IAsyncResult ar)
        {
            try
            {
                StateObject state     = (StateObject)ar.AsyncState;
                Socket      handler   = state.workSocket;
                int         bytesRead = 0;

                bytesRead = handler.EndReceive(ar, out errorCode);

                if (errorCode == SocketError.Success)
                {
                    if (bytesRead > 0)
                    {
                        //process received data
                        if (ServerReceiveDataEventHandler != null)
                        {
                            ServerReceiveDataEventHandler(state.buffer);
                        }
                        //clear buffer
                        Array.Clear(state.buffer, 0, state.buffer.Length);
                        handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, out errorCode, new AsyncCallback(ReceiveCallback), state);
                    }
                }
                else
                {
                    if (errorCode == SocketError.ConnectionReset)
                    {
                        if (state != null && !state.workSocket.Connected)
                        {
                            LogRecorder.Info(string.Format("Clint {0} disconnected.", handler.RemoteEndPoint));

                            if (localClientList.Contains(state))
                            {
                                localClientList.Remove(state);
                                state.workSocket.Dispose();
                            }
                            if (remoteClientList.Contains(state))
                            {
                                remoteClientList.Remove(state);
                                state.workSocket.Dispose();
                            }
                        }
                    }
                }
            }
            catch (System.ObjectDisposedException ex)
            {
                LogRecorder.Error(String.Format("{0}() throw an exception:{1}", System.Reflection.MethodBase.GetCurrentMethod().Name, ex.ToString()));
            }
            catch (Exception ex)
            {
                LogRecorder.Error(String.Format("{0}() throw an exception:{1}", System.Reflection.MethodBase.GetCurrentMethod().Name, ex.ToString()));
                throw;
            }
        }
Пример #9
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="title"></param>
 /// <param name="messages"></param>
 public static void WriteError(string title, params object[] messages)
 {
     LogRecorder.Error("{0} : {1}", title, messages.LinkToString(" > "));
     Push(new ConsoleMessage
     {
         Type     = 3,
         Title    = title,
         Messages = messages
     });
 }
Пример #10
0
        /// <summary>
        ///     页面处理结束
        /// </summary>
        protected override void OnResult()
        {
            Response.Clear();
            try
            {
                if (string.IsNullOrWhiteSpace(CustomJson))
                {
#if NewJson
                    var msg = string.IsNullOrEmpty(Message)
                        ? (IsFailed ? BusinessContext.Current.LastMessage ?? "操作失败" : "操作成功")
                        : Message.Replace('\"', '\'');
                    if (AjaxResult == null)
                    {
                        AjaxResult = new AjaxResult
                        {
                            State    = State,
                            Succeed  = !IsFailed,
                            Message  = msg,
                            Message2 = Message2
                        };
                    }
                    else
                    {
                        AjaxResult.Message  = msg;
                        AjaxResult.Message2 = Message2;
                        AjaxResult.Succeed  = !IsFailed;
                        AjaxResult.State    = State;
                    }
                    CustomJson = JsonConvert.SerializeObject(AjaxResult);
#else
                    var json = new StringBuilder();
                    json.AppendFormat(@"{{""succeed"":{0}", this.IsFailed ? "false" : "true");
                    json.AppendFormat(@",""message"":""{0}""",
                                      string.IsNullOrEmpty(this.Message)
                        ? (this.IsFailed ? "操作失败" : "操作成功")
                        : this.Message.Replace('\"', '\''));
                    if (!string.IsNullOrWhiteSpace(this.ResultData))
                    {
                        json.AppendFormat(@",{0}", this.ResultData);
                    }
                    json.Append('}');
                    this.CustomJson = json.ToString();
#endif
                }
                Response.Write(CustomJson);
            }
            catch (Exception exception)
            {
                LogRecorder.Error(exception.ToString());
                Debug.WriteLine(exception);
                Response.Write(@"{""succeed"":false,""message"":""***系统内部错误**""}");
            }
            LogRecorder.MonitorTrace(CustomJson);
        }
Пример #11
0
 public void Send(Socket handler, byte[] byteData)
 {
     try
     {
         handler.BeginSendTo(byteData, 0, byteData.Length, 0, handler.RemoteEndPoint, new AsyncCallback(SendCallback), handler);
     }
     catch (System.Net.Sockets.SocketException ex)
     {
         LogRecorder.Error(String.Format("{0}() throw an exception:{1}", System.Reflection.MethodBase.GetCurrentMethod().Name, ex.ToString()));
     }
     catch (Exception ex)
     {
         LogRecorder.Error(String.Format("{0}() throw an exception:{1}", System.Reflection.MethodBase.GetCurrentMethod().Name, ex.ToString()));
         throw;
     }
 }
Пример #12
0
 private void SendCallback(IAsyncResult ar)
 {
     try
     {
         Socket handler   = (Socket)ar.AsyncState;
         int    bytesSent = handler.EndSend(ar, out errorCode);
         LogRecorder.Debug(string.Format("Request to {0} success.", handler.RemoteEndPoint));
         if (errorCode != SocketError.Success)
         {
             LogRecorder.Error(String.Format("{0}() throw an exception:{1}", System.Reflection.MethodBase.GetCurrentMethod().Name, errorCode.ToString()));
         }
     }
     catch (Exception)
     {
         throw;
     }
 }
Пример #13
0
        /// <summary>
        ///     协议错误
        /// </summary>
        /// <param name="exception"></param>
        /// <returns></returns>
        private async Task <string> ProtocolError(WebException exception)
        {
            try
            {
                var codes = exception.Message.Split(new[] { '(', ')' }, StringSplitOptions.RemoveEmptyEntries);
                if (codes.Length == 3)
                {
                    if (int.TryParse(codes[1], out var s))
                    {
                        switch (s)
                        {
                        case 404:
                            UserState = HttpOperatorStateType.NotFind;
                            //ZeroState = ZeroOperatorStateType.NotFind;
                            return(ToErrorString(ErrorCode.NetworkError, "页面不存在", "页面不存在"));

                        case 503:
                            UserState = HttpOperatorStateType.Unavailable;
                            //ZeroState = ZeroOperatorStateType.Unavailable;
                            return(ToErrorString(ErrorCode.NetworkError, "拒绝访问", "页面不存在"));
                        }
                    }
                }

                var msg = await ReadResponse(exception.Response);

                LogRecorder.Error("Call {0}/{1} Error:{2}", Host, ApiName, msg);
                return(msg); //ToErrorString(ErrorCode.NetworkError, "未知错误", );
            }
            catch (Exception e)
            {
                UserState = HttpOperatorStateType.LocalException;
                //ZeroState = ZeroOperatorStateType.LocalException;
                LogRecorder.Exception(e);
                return(ToErrorString(ErrorCode.NetworkError, "未知错误", e.Message));
            }
            finally
            {
                exception.Response?.Close();
            }
        }
Пример #14
0
 /// <summary>
 ///     页面处理结束
 /// </summary>
 protected override void OnResult()
 {
     Response.Clear();
     try
     {
         if (string.IsNullOrWhiteSpace(CustomJson))
         {
             var msg = string.IsNullOrEmpty(Message)
                 ? (IsFailed ? ModelContext.LastMessage ?? "操作失败" : "操作成功")
                 : Message.Replace('\"', '\'');
             if (AjaxResult == null)
             {
                 AjaxResult = new AjaxResult
                 {
                     State    = State,
                     Succeed  = !IsFailed,
                     Message  = msg,
                     Message2 = Message2
                 };
             }
             else
             {
                 AjaxResult.Message  = msg;
                 AjaxResult.Message2 = Message2;
                 AjaxResult.Succeed  = !IsFailed;
                 AjaxResult.State    = State;
             }
             CustomJson = JsonConvert.SerializeObject(AjaxResult);
         }
         Response.Write(CustomJson);
     }
     catch (Exception exception)
     {
         LogRecorder.Error(exception.ToString());
         Debug.WriteLine(exception);
         Response.Write(@"{""succeed"":false,""message"":""***系统内部错误**""}");
     }
     LogRecorder.MonitorTrace(CustomJson);
 }
Пример #15
0
        /// <summary>
        ///     协议错误
        /// </summary>
        /// <param name="exception"></param>
        /// <returns></returns>
        private string ProtocolError(WebException exception)
        {
            try
            {
                var codes = exception.Message.Split(new[] { '(', ')' }, StringSplitOptions.RemoveEmptyEntries);
                if (codes.Length == 3)
                {
                    if (int.TryParse(codes[1], out var s))
                    {
                        switch (s)
                        {
                        case 404:
                            Status = RouteStatus.NotFind;
                            return(ToErrorString(ErrorCode.NetworkError, "页面不存在", "页面不存在"));

                        case 503:
                            Status = RouteStatus.Unavailable;
                            return(ToErrorString(ErrorCode.NetworkError, "拒绝访问", "页面不存在"));
                        }
                    }
                }

                Status = RouteStatus.RemoteError;
                var msg = ReadResponse(exception.Response);
                LogRecorder.Error($"Call {Host}/{ApiName} Error:{msg}");
                return(msg); //ToErrorString(ErrorCode.NetworkError, "未知错误", );
            }
            catch (Exception e)
            {
                Status = RouteStatus.LocalException;
                LogRecorder.Exception(e);
                return(ToErrorString(ErrorCode.NetworkError, "未知错误", e.Message));
            }
            finally
            {
                exception.Response?.Close();
            }
        }
Пример #16
0
        private void AcceptCallback(IAsyncResult ar)
        {
            try
            {
                if (!isDisposing)
                {
                    allDone.Set();
                    Socket listener = (Socket)ar.AsyncState;
                    Socket handler  = listener.EndAccept(ar);

                    StateObject state = new StateObject();
                    state.workSocket = handler;
                    //Add client to client list
                    System.Collections.Specialized.StringCollection stringRemoteReaderIpCollection = Settings.Default.RemoteReaderIpCollection;
                    if (stringRemoteReaderIpCollection.Contains(state.workSocket.RemoteEndPoint.ToString().Split(':')[0]))
                    {
                        remoteClientList.Add(state);
                    }
                    else
                    {
                        localClientList.Add(state);
                    }
                    LogRecorder.Info(string.Format("Clint {0} connected.", handler.RemoteEndPoint));

                    handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, out errorCode, new AsyncCallback(ReceiveCallback), state);
                }
            }
            catch (System.ObjectDisposedException ex)
            {
                LogRecorder.Error(String.Format("{0}() throw an exception:{1}", System.Reflection.MethodBase.GetCurrentMethod().Name, ex.ToString()));
            }
            catch (Exception ex)
            {
                LogRecorder.Error(String.Format("{0}() throw an exception:{1}", System.Reflection.MethodBase.GetCurrentMethod().Name, ex.ToString()));
                throw;
            }
        }
Пример #17
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="title"></param>
 /// <param name="messages"></param>
 public static void WriteError(string title, params object[] messages)
 {
     LogRecorder.Error("{0} : {1}", title, messages.LinkToString(" * "));
 }