private bool HandleExceptions(Action action, Action onException, RemoteScenarioInfo info) { var strErrPrefix = "Ошибка во время соединения с удаленным сценарием"; try { action?.Invoke(); return(true); } catch (Exception e) { //crutch if (e is AggregatedCommunicationException) { Log.InfoFormat(strErrPrefix + ". {0}; [{2}], удаленное ID:[{1}], [{3}]", e.Message, info.Name, info.ScenarioId, Credentials.GetAddress()); } else if ( SystemUtils.IsFaultExceptionHasCode(e, ServiceFaultCodes.ObjectNotFound) || SystemUtils.IsFaultExceptionHasCode(e, ServiceFaultCodes.DecryptionError) || SystemUtils.IsFaultExceptionHasCode(e, ServiceFaultCodes.ObjectAccessDenied) || SystemUtils.IsFaultExceptionHasCode(e, ServiceFaultCodes.AccessDenied)) { Log.InfoFormat(strErrPrefix + ". " + e.Message + "; [{0}], [{2}], удаленное ID:[{1}], [{3}]", info.Name, info.ScenarioId, Credentials.GetAddress(), e.InnerException?.Message); } else { Log.WarnFormat(e, strErrPrefix + ". Unrecognized exception; [{0}], [{2}], удаленное ID:[{1}], [{3}]", info.Name, info.ScenarioId, Credentials.GetAddress(), e.InnerException?.Message); } onException?.Invoke(); return(false); } }
public static void Register(RemoteScenarioInfo info) { lock (_threadings) if (!_threadings.ContainsKey(info.Credentials)) { _threadings.Add(info.Credentials, new ServerClientThreading(info.Credentials)); } _threadings[info.Credentials].Append(info); }
public static void Unregister(RemoteScenarioInfo info) { lock (_threadings) if (_threadings.ContainsKey(info.Credentials)) { _threadings[info.Credentials].Remove(info); info.SetUnregistered(); } }
public void Remove(RemoteScenarioInfo info) { lock (ServerScenariosInfos) { ServerScenariosInfos.Remove(info); if (!ServerScenariosInfos.Any()) { StopListen(); } } }
public void Append(RemoteScenarioInfo info) { lock (ServerScenariosInfos) if (!ServerScenariosInfos.Any(x => x.Equals(info))) { ServerScenariosInfos.Add(info); } if (!_isListening) { StartListen(); } }
public RemoteScenarioValueChangedArgs(RemoteScenarioInfo info, ScenarioInfo scenInfo) { Info = info; ScenarioInfo = scenInfo; }