예제 #1
0
        private async Task <List <DeliverResponse> > DeliverAsync(ADStreamingCall <Envelope, DeliverResponse> call, Envelope envelope, CancellationToken token)
        {
            List <DeliverResponse> ret = new List <DeliverResponse>();
            var rtask = Task.Run(async() =>
            {
                while (await call.Call.ResponseStream.MoveNext(token).ConfigureAwait(false))
                {
                    token.ThrowIfCancellationRequested();
                    DeliverResponse resp = call.Call.ResponseStream.Current;
                    logger.Debug($"{this} resp status value: {resp.Status}, type case: {resp.TypeCase}");
                    if (resp.TypeCase == DeliverResponse.TypeOneofCase.Status)
                    {
                        ret.Insert(0, resp);
//TODO: mpiva: Review this, original JAVA code will throw exception on no success, channel init code, check for the status (Not Found) for retrying.
//TODO: mpiva: Report this as an error to the original JAVA SDK repo.
//                      if (resp.Status == Status.Success)
                        return;

                        /*if (shutdown)
                         *  throw new OperationCanceledException($"Channel {channelName}, sendDeliver were canceled");
                         * throw new TransactionException($"Channel {channelName} orderer {name} status finished with failure code {resp.Status} during order registration");
                         */
                    }

                    ret.Add(resp);
                }
            }, token);
            await call.Call.RequestStream.WriteAsync(envelope).ConfigureAwait(false);

            token.ThrowIfCancellationRequested();
            await rtask.TimeoutAsync(TimeSpan.FromMilliseconds(ordererWaitTimeMilliSecs), token).ConfigureAwait(false);

            logger.Trace($"{this} Deliver Complete.");
            return(ret);
        }
예제 #2
0
 public BlockInfo(DeliverResponse resp)
 {
     if (resp.TypeCase == DeliverResponse.TypeOneofCase.Block)
     {
         Block respBlock = resp.Block;
         filteredBlock = null;
         if (respBlock == null)
         {
             throw new ArgumentNullException("DeliverResponse type block but block is null");
         }
         block = new BlockDeserializer(respBlock);
     }
     else if (resp.TypeCase == DeliverResponse.TypeOneofCase.FilteredBlock)
     {
         filteredBlock = resp.FilteredBlock;
         block         = null;
         if (filteredBlock == null)
         {
             throw new ArgumentNullException("DeliverResponse type filter block but filter block is null");
         }
     }
     else
     {
         throw new ArgumentException($"DeliverResponse type has unexpected type");
     }
 }
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            context.Response.Write("Hello World");
            //XmlConfigurator.Configure();
            if (context.Request.RequestType.Equals("POST", StringComparison.CurrentCultureIgnoreCase))
            {
                DeliverResponse rsp;
                using (var s = new StreamReader(System.Web.Request.InputStream))
                {
                    var xml = s.ReadToEnd();
                    try
                    {
                        var request = (DeliverRequest) new SXMPParser().Parse(xml);
                        var messageText = request.Text;
                        var senderNumber = request.SourceAddress.Address;
                        //Parsing successful, return response
                        rsp = new DeliverResponse((int) SXMPErrorCode.OK, "OK");
                    }
                    catch (SXMPParseException sx)
                    {
                        rsp = new DeliverResponse((int) SXMPErrorCode.INVALID_XML, sx.Message);
                        Response.StatusCode = (int) HttpStatusCode.BadRequest;
                    }

                }

                Response.ContentType = "text/xml";
                Response.Output.WriteLine(SXMPWriter.Write(rsp));
            }
            else
            {

                Response.StatusCode = (int) HttpStatusCode.MethodNotAllowed;
                Response.Output.WriteLine("Only HTTP POST Method allowed");
                Response.Output.Flush();

            }
        }
예제 #4
0
 public BlockEvent(Peer peer, DeliverResponse resp) : base(resp)
 {
     EventHub = null;
     Peer     = peer;
     evnt     = null;
 }