/// <summary> /// Отправка данных на исполнение. /// </summary> /// <param name="invoked_data">Данные для исполнения.</param> public void Invoke(DataInvoke invoked_data) { switch (InvokeType) { case InvokeType.Manual: break; case InvokeType.Local: case InvokeType.Remote: invoked_data.InvokeType = InvokeType; break; case InvokeType.Auto: invoked_data.InvokeType = GetAutoInvokeType(); break; } _queueInvoker.Enqueue(invoked_data); }
/// <summary> /// Возвращает подходящий сервис для исполнения. /// </summary> /// <param name="invoked_data">Исполняемые данные.</param> /// <param name="invoke_type">Тип исполнения.</param> /// <returns>Серис исполнения.</returns> public IInvokeService GetInvokeService(DataInvoke invoked_data, InvokeType invoke_type = InvokeType.Manual) { switch (invoke_type) { case InvokeType.Manual: switch (invoked_data.InvokeType) { case InvokeType.Remote: return(_remoteInvokeService); case InvokeType.Local: return(_serviceDictionary[invoked_data.Method.MethodType]); } break; case InvokeType.Remote: return(_remoteInvokeService); case InvokeType.Local: return(_serviceDictionary[invoked_data.Method.MethodType]); } throw new Exception(string.Format("InvokeServiceFactory.GetInvokeService -> Тип {0} недопустим.", invoked_data.InvokeType)); }
/// <summary> /// Событие при извлечении из очереди. /// </summary> /// <param name="invoked_data">Данные для исполнения.</param> private void OnDequeue(DataInvoke invoked_data) { InvokeMethod(invoked_data, OnAfterInvoke); }
/// <summary> /// Исполнение метода. /// </summary> /// <param name="invoked_data">Исполняемые данные.</param> /// <param name="callback">Функция, вызываемая по окончанию исполнения.</param> protected abstract void InvokeMethod(DataInvoke invoked_data, Action <DataInvoke> callback);