private void onUpdated(object sender, DataArgs <ISolutionEvents> e)
 {
     if (e.Data != null)
     {
         tool.refresh();
     }
 }
Beispiel #2
0
        public bool DeclareResponseCallback(string messageId, Action <string> callback, int?timeout)
        {
            bool success = true;

            try
            {
                if (callback == null)
                {
                    throw new CoreException("Callback is null");
                }
                Trace.TraceInformation($"Declare response callback. MessageId={messageId}");
                responceCallbacks.AddOrUpdate(messageId, callback, (k, v) => callback);
                return(true);
            }
            catch (Exception ex)
            {
                success = false;
                throw ex;
            }
            finally
            {
                if (success && timeout.HasValue)
                {
                    Task.Delay(timeout.Value).ContinueWith(res =>
                    {
                        Action <string> cb;
                        if (responceCallbacks.TryRemove(messageId, out cb) && cb != null)
                        {
                            var errContext = new DataArgs <object>(new CoreException($"Callback timeout expired. MessageId=[{messageId}]"));
                            callback(errContext.ToJson());
                        }
                    });
                }
            }
        }
Beispiel #3
0
        public Task <DataArgs <ViaElement> > ResponseError <T>(DataArgs <T> data)
        {
            data.result = false;
            var data_str = data.ToJson(true);

            return(Response(data_str));
        }
Beispiel #4
0
 /// <summary>
 /// TODO: event with common settings for IEntryPointCore
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void onDebugModeUpdated(object sender, DataArgs <bool> e)
 {
     fire(new CoreCommandArgs()
     {
         Type = CoreCommandType.RawCommand,
         Args = new object[] { new KeyValuePair <string, bool>("DebugMode", e.Data) }
     });
 }
Beispiel #5
0
        private Task <DataArgs <ViaElement> > RequestAsync <T>(string serviceName, string exchangeType, string queryName, DataArgs <T> queryData, string responceHandlerName, string responseHandlerData, Action <string> callback, MessageEntryParam parameters)
        {
            var responseResolve = parameters?.NeedResponseResolve ?? false;

            //TODO: подумать ExchangeTypes.EXCHANGETYPE_DIRECT для responceHandlers?
            var responseKind = callback == null ? ExchangeTypes.EXCHANGETYPE_FANOUT : ExchangeTypes.EXCHANGETYPE_DIRECT;

            var replayTo      = responseResolve ? Dispatcher.SelfServiceName : Dispatcher.GetConnectionByExchangeType(responseKind);
            var queryDataJson = queryData.ToJson();

            //записываем  текущее состояние запроса
            var currentViaElement = new ViaElement()
            {
                replyTo             = replayTo,
                mqWorkKind          = responseKind,
                messageId           = Guid.NewGuid().ToString(),
                queryHandlerName    = queryName,
                appId               = Dispatcher.AppId,
                priority            = parameters?.Priority ?? 0,
                doResolve           = responseResolve,
                responseHandlerName = responceHandlerName,
                responseHandlerData = responseHandlerData
            };

            this._via.queue.Push(currentViaElement);

            var properties = Dispatcher.Connection.CreateChannelProperties();

            properties.CorrelationId = ReceivedMessage?.Properties?.CorrelationId ?? parameters?.TransactionId ?? Guid.NewGuid().ToString();
            properties.ContentType   = currentViaElement.queryHandlerName;
            properties.MessageId     = currentViaElement.messageId;
            properties.ReplyTo       = currentViaElement.replyTo;
            properties.Priority      = currentViaElement.priority == 0 ? (byte)1 : currentViaElement.priority;
            properties.Headers       = new Dictionary <string, object>();
            properties.Headers.TryAdd(MessageBasicPropertiesHeaders.VIA, this._via.ToJson());
            properties.Headers.TryAdd(MessageBasicPropertiesHeaders.DIRECTION, MessageBasicPropertiesHeaders.DIRECTION_VALUE_REQUEST);
            properties.Headers.TryAdd(MessageBasicPropertiesHeaders.WORKKIND, responseKind);
            properties.Headers.TryAdd(MessageBasicPropertiesHeaders.WORKKIND_TYPE, MessageBasicPropertiesHeaders.WORKKIND_TYPE_VALUE);
            properties.Headers.TryAdd(MessageBasicPropertiesHeaders.VIA_TYPE, MessageBasicPropertiesHeaders.VIA_TYPE_VALUE);

            exchangeType = ExchangeTypes.Get(exchangeType);

            var link = LinkTypes.GetLinkByExchangeType(exchangeType);

            var routingKey = string.Empty;

            if (exchangeType == ExchangeTypes.EXCHANGETYPE_FANOUT)
            {
                routingKey = serviceName;
            }
            else if (responseKind == ExchangeTypes.EXCHANGETYPE_DIRECT)
            {
                routingKey = parameters?.AppId;
                if (string.IsNullOrEmpty(routingKey))
                {
                    throw new CoreException("Relation [Direct to Direct] - AppId must be initialized");
                }
            }

            var exchangeName = exchangeType == ExchangeTypes.EXCHANGETYPE_FANOUT ? "" : serviceName;

            return(Push(currentViaElement, parameters?.NeedRequestResolve ?? true, link, serviceName, exchangeName, routingKey, exchangeType, queryDataJson, properties)
                   .ContinueWith((result) =>
            {
                if (callback != null)
                {
                    if (result.Exception != null)
                    {
                        callback(new DataArgs <object>(result.Exception).ToJson());
                    }
                    else
                    {
                        Dispatcher.DeclareResponseCallback(currentViaElement.messageId, callback, parameters?.Timeout);
                    }
                }
                return result.Result;
            }));
        }
Beispiel #6
0
        //public Task<CallbackMessageEventArgs<ViaElement>> RequestAsync(string serviceName, string exchangeType, string queryName, object queryData, string responceHandlerName, object responseHandlerData, MessageEntryParam parameters)
        //{
        //    var responseHandlerDataStr = responseHandlerData?.ToJson(true);
        //    return RequestAsync(serviceName, exchangeType, queryName, queryData, responceHandlerName, responseHandlerDataStr, null, parameters);
        //}

        public Task <DataArgs <ViaElement> > RequestAsync <T>(string serviceName, string exchangeType, string queryName, DataArgs <T> queryData, string responceHandlerName, string responseHandlerData, MessageEntryParam parameters)
        {
            return(RequestAsync(serviceName, exchangeType, queryName, queryData, responceHandlerName, responseHandlerData, null, parameters));
        }
Beispiel #7
0
 public Task <DataArgs <ViaElement> > RequestAsync <T>(string serviceName, string exchangeType, string queryName, DataArgs <T> queryData, Action <string> callback, MessageEntryParam parameters)
 {
     return(RequestAsync(serviceName, exchangeType, queryName, queryData, null, null, callback, parameters));
 }
Beispiel #8
0
        private Task <DataArgs <ViaElement> > Push(ViaElement via, bool requestResolve, string link, string service, string exchangeName, string routingKey, string exchangeType, string queryData, IBasicProperties properties)
        {
            DataArgs <ViaElement> messageEventArgs = new DataArgs <ViaElement>();

            if (requestResolve)
            {
                //Для начала надо узнать в какие очереди посылать запросы
                return(this.Dispatcher.Resolve(service, link)
                       .ContinueWith(resolver_link =>
                {
                    //try
                    //{
                    if (resolver_link.Exception != null)
                    {
                        messageEventArgs.SetException(resolver_link.Exception);
                    }
                    var link_str = resolver_link.Result;
                    var exchange = ExchangeTypes.GetExchangeName(link_str, null, exchangeType);
                    bool isFanout = ExchangeType.Fanout.Equals(exchangeType, StringComparison.CurrentCultureIgnoreCase);

                    var rk = isFanout ? exchange : routingKey;

                    var options = new ProducerParam()
                    {
                        RoutingKey = rk
                    };

                    if (!isFanout)
                    {
                        options.ExchangeParam = new ChannelExchangeParam()
                        {
                            Name = exchange,
                            Type = exchangeType ?? ExchangeTypes.EXCHANGETYPE_FANOUT
                        };
                    }

                    var data = Encoding.UTF8.GetBytes(queryData);
                    //посылаем сообщение
                    Dispatcher.Connection.Publish(options, data, properties);
                    messageEventArgs.result = true;
                    messageEventArgs.data = via;
                    //}
                    //catch (Exception ex)
                    //{
                    //    messageEventArgs.SetException(ex);
                    //}
                    return messageEventArgs;
                }));
            }
            else
            {
                return(Task.Run(() =>
                {
                    //try
                    //{
                    //для запросов, где очереди известны
                    var options = new ProducerParam()
                    {
                        RoutingKey = routingKey
                    };
                    if (!string.IsNullOrEmpty(exchangeName))
                    {
                        options.ExchangeParam = new ChannelExchangeParam()
                        {
                            Name = exchangeName,
                            Type = exchangeType ?? ExchangeTypes.EXCHANGETYPE_FANOUT
                        };
                    }

                    var data = Encoding.UTF8.GetBytes(queryData);
                    //посылаем сообщение
                    Dispatcher.Connection.Publish(options, data, properties);
                    //}
                    //catch (Exception ex)
                    //{
                    //    messageEventArgs.result = false;
                    //    messageEventArgs.SetException(ex);
                    //}
                    return messageEventArgs;
                }));
            }
        }
Beispiel #9
0
        public virtual void Run(DataArgs args)
        {

        }
Beispiel #10
0
        public Task <DataArgs <ViaElement> > ResponseOk <T>(DataArgs <T> data)
        {
            var data_str = data.ToJson(true);

            return(Response(data_str));
        }
Beispiel #11
0
        public Task <DataArgs <ViaElement> > ResponseOk <T>(T data)
        {
            var dataArgs = new DataArgs <T>(data);

            return(ResponseOk <T>(dataArgs));
        }
Beispiel #12
0
 /// <summary>
 /// 設置參數,子類需要實現對參數的處理
 /// </summary>
 /// <param name="args"></param>
 public virtual void SetArgs(DataArgs args)
 {
 }
 private void onUpdated(object sender, DataArgs<ISolutionEvents> e)
 {
     tool.refresh();
 }
 /// <summary>
 /// TODO: event with common settings for IEntryPointCore
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void onDebugModeUpdated(object sender, DataArgs<bool> e)
 {
     fire(new CoreCommandArgs()
     { 
         Type = CoreCommandType.RawCommand,
         Args = new object[] { new KeyValuePair<string, bool>("DebugMode", e.Data) }
     });
 }
 private void dgvActions_DragDropSortedRow(object sender, DataArgs<DataGridViewExt.MovingRow> e)
 {
     logic.moveEventItem(e.Data.from, e.Data.to);
 }
Beispiel #16
0
 /// <summary>
 /// Process a received BCom frame
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void OnBComDataReceived(object sender, DataArgs e)
 {
     e.frame.Dump();
     client.Publish($"BCom/{e.frame.Source.ToString("X8")}/rx", e.frame.Export().ToByteArr());
 }
Beispiel #17
0
        public Task <DataArgs <ViaElement> > ResponseError(Exception ex)
        {
            var dataArgs = new DataArgs <object>(ex);

            return(ResponseError(dataArgs));
        }
Beispiel #18
0
 private void onConventionChanged(object sender, DataArgs <CallingConvention> e)
 {
     DLR = newDLR(e.Data);
     LSender.Send(sender, $"DLR has been updated with new CallingConvention: {e.Data}", Message.Level.Info);
 }
Beispiel #19
0
 public PresenterOpeningEventArgs(string uri, string key, DataArgs args)
 {
     Uri = uri;
     Key = key;
     Args = args;
 }