Пример #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="context"></param>
        public async Task TransmitAsync(DistributeContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }

            var response = await TransmitCoreAsync(context);

            if (response != null)
            {
                Status responseStateCode;
                if (!response.Body.Event.Status.TryParse(out responseStateCode))
                {
                    context.Exception = new AnycmdException("响应节点返回了意外的状态码" + response.Body.Event.Status.ToString());
                }
                context.Result.UpdateStatus(responseStateCode, response.Body.Event.Description);
                if (response.Body.InfoValue != null)
                {
                    foreach (var item in response.Body.InfoValue)
                    {
                        context.Result.ResultDataItems.Add(new DataItem(item.Key, item.Value));
                    }
                }
            }
            else
            {
                if (context.Exception == null)
                {
                    context.Exception = new AnycmdException("远端服务未返回值");
                }
            }
        }
Пример #2
0
        /// <summary>
        /// 通过网络传输命令到服务端执行。
        /// <remarks>即使命令的响应节点是本节点该方法依旧通过网络传送命令。</remarks>
        /// </summary>
        /// <returns></returns>
        public IMessageDto Request()
        {
            var context = new DistributeContext(this, this._responseNode);

            MessageRequester.Instance.Request(context);

            return(context.Result);
        }
Пример #3
0
 protected async override Task <IMessageDto> TransmitCoreAsync(DistributeContext context)
 {
     try
     {
         var client = new JsonServiceClient(context.Responder.AnycmdApiAddress);
         return(await client.GetAsync(GetRequest(context)));
     }
     catch (Exception ex)
     {
         context.Exception = ex;
         return(null);
     }
 }
Пример #4
0
 protected sealed override IMessageDto TransmitCore(DistributeContext context)
 {
     try
     {
         var client = new JsonServiceClient(context.Responder.AnycmdApiAddress);
         return(client.Get(GetRequest(context)));
     }
     catch (Exception ex)
     {
         context.Exception = ex;
         return(null);
     }
 }
Пример #5
0
 protected async override Task<IMessageDto> TransmitCoreAsync(DistributeContext context)
 {
     try
     {
         var client = new JsonServiceClient(context.Responder.AnycmdApiAddress);
         return await client.GetAsync(GetRequest(context));
     }
     catch (Exception ex)
     {
         context.Exception = ex;
         return null;
     }
 }
Пример #6
0
 protected sealed override IMessageDto TransmitCore(DistributeContext context)
 {
     try
     {
         var client = new JsonServiceClient(context.Responder.AnycmdApiAddress);
         return client.Get(GetRequest(context));
     }
     catch (Exception ex)
     {
         context.Exception = ex;
         return null;
     }
 }
Пример #7
0
        private Message GetRequest(DistributeContext context)
        {
            var command = context.Command;
            var ticks   = DateTime.UtcNow.Ticks;
            var request = new Message
            {
                Verb        = command.Verb.Code,
                Ontology    = command.Ontology,
                MessageType = command.MessageType.ToName(),
                Body        = new BodyData(command.DataTuple.IdItems.Items.ToDto(), command.DataTuple.ValueItems.Items.ToDto())
                {
                    Event = new EventData
                    {
                        SourceType   = command.EventSourceType,
                        Subject      = command.EventSubjectCode,
                        ReasonPhrase = command.ReasonPhrase,
                        Status       = command.Status
                    }
                },
                TimeStamp  = command.TimeStamp.ToUniversalTime().Ticks,
                MessageId  = command.MessageId,
                Version    = command.Version,
                IsDumb     = command.IsDumb,
                Credential = new CredentialData
                {
                    ClientType      = ClientType.Node.ToName(),
                    UserType        = UserType.None.ToName(),
                    CredentialType  = CredentialType.Signature.ToName(),
                    SignatureMethod = SignatureMethod.HMAC_SHA1.ToName(),
                    ClientId        = context.ClientAgent.PublicKey,
                    UserName        = command.UserName,// UserName
                    Ticks           = ticks
                }
            };

            // 签名
            request.Credential.Password = Signature.Sign(request.ToOrignalString(request.Credential), context.ClientAgent.SecretKey);

            return(request);
        }
Пример #8
0
        /// <summary>
        /// 通过网络传输命令到服务端执行。
        /// <remarks>即使命令的响应节点是本节点该方法依旧通过网络传送命令。</remarks>
        /// </summary>
        /// <returns></returns>
        public IMessageDto Request()
        {
            var context = new DistributeContext(this, this._responseNode);
            MessageRequester.Instance.Request(context);

            return context.Result;
        }
Пример #9
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="context"></param>
 /// <returns></returns>
 protected abstract Task <IMessageDto> TransmitCoreAsync(DistributeContext context);
Пример #10
0
 /// <summary>
 /// 转移
 /// </summary>
 /// <param name="context">发送事件参数</param>
 protected abstract IMessageDto TransmitCore(DistributeContext context);
Пример #11
0
        private Message GetRequest(DistributeContext context)
        {
            var command = context.Command;
            var ticks = DateTime.UtcNow.Ticks;
            var request = new Message
            {
                Verb = command.Verb.Code,
                Ontology = command.Ontology,
                MessageType = command.MessageType.ToName(),
                Body = new BodyData(command.DataTuple.IdItems.Items.ToDto(), command.DataTuple.ValueItems.Items.ToDto())
                {
                    Event = new EventData
                    {
                        SourceType = command.EventSourceType,
                        Subject = command.EventSubjectCode,
                        ReasonPhrase = command.ReasonPhrase,
                        Status = command.Status
                    }
                },
                TimeStamp = command.TimeStamp.ToUniversalTime().Ticks,
                MessageId = command.MessageId,
                Version = command.Version,
                IsDumb = command.IsDumb,
                Credential = new CredentialData
                {
                    ClientType = ClientType.Node.ToName(),
                    UserType = UserType.None.ToName(),
                    CredentialType = CredentialType.Signature.ToName(),
                    SignatureMethod = SignatureMethod.HMAC_SHA1.ToName(),
                    ClientId = context.ClientAgent.PublicKey,
                    UserName = command.UserName,// UserName
                    Ticks = ticks
                }
            };
            // 签名
            request.Credential.Password = Signature.Sign(request.ToOrignalString(request.Credential), context.ClientAgent.SecretKey);

            return request;
        }
Пример #12
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="context"></param>
        public async Task TransmitAsync(DistributeContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }

            var response = await TransmitCoreAsync(context);
            if (response != null)
            {
                Status responseStateCode;
                if (!response.Body.Event.Status.TryParse(out responseStateCode))
                {
                    context.Exception = new AnycmdException("响应节点返回了意外的状态码" + response.Body.Event.Status.ToString());
                }
                context.Result.UpdateStatus(responseStateCode, response.Body.Event.Description);
                if (response.Body.InfoValue != null)
                {
                    foreach (var item in response.Body.InfoValue)
                    {
                        context.Result.ResultDataItems.Add(new DataItem(item.Key, item.Value));
                    }
                }
            }
            else
            {
                if (context.Exception == null)
                {
                    context.Exception = new AnycmdException("远端服务未返回值");
                }
            }
        }
Пример #13
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="context"></param>
 /// <returns></returns>
 protected abstract Task<IMessageDto> TransmitCoreAsync(DistributeContext context);
Пример #14
0
 /// <summary>
 /// 转移
 /// </summary>
 /// <param name="context">发送事件参数</param>
 protected abstract IMessageDto TransmitCore(DistributeContext context);