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()); } }
/// <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)); } }
/// <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)); } }
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)); } }
/// <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); } }
/// <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; } } }
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; } }
/// <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 }); }
/// <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); }
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; } }
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; } }
/// <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(); } }
/// <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); }
/// <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(); } }
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; } }
/// <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(" * ")); }