Example #1
0
        public IQueueAck SendAsync(QueueItem message, int connectTimeout)
        {
            using (

                Task <IQueueAck> task = Task <IQueueAck> .Factory.StartNew(() =>
                                                                           PublishItem(message, EnsureConnectTimeout(connectTimeout))
                                                                           ,
                                                                           canceller.Token,
                                                                           TaskCreationOptions.None,
                                                                           TaskScheduler.Default))
            {
                task.Wait();
                if (task.IsCompleted)
                {
                    IQueueAck ack = task.Result;
                    return(ack);
                }
                else if (task.IsCanceled)
                {
                    return(new QueueAck(MessageState.OperationCanceled, message));
                }
                else if (task.IsFaulted)
                {
                    return(new QueueAck(MessageState.OperationFailed, message));
                }
                else
                {
                    return(new QueueAck(MessageState.UnExpectedError, message));
                }
            }
        }
Example #2
0
        IQueueAck ExecRout(QueueItem item, QueueHost qh)
        {
            if (qh == null)
            {
                throw new MessageException(MessageState.InvalidMessageHost, "Invalid QueueHost for Routing " + item.Host);
            }
            IQueueAck ack = null;

            if (qh.IsLocal)
            {
                item.Host = qh.HostName;
                MQueue Q = Get(item.Host);
                if (Q == null)
                {
                    throw new MessageException(MessageState.InvalidMessageHost, "message.RoutHostName not found " + item.Host);
                }
                ack = Q.Enqueue(item);
                return(ack);// ptr.MessageState;
            }

            var api = new QueueApi(qh.NetProtocol);

            ack = api.SendAsync(item, 0);
            return(ack);
        }
Example #3
0
        //public static TransStream DoError(MessageState state, QueueCmd cmd, Exception ex)
        //{

        //    try
        //    {
        //        string lbl = ex.Message;
        //        return QueueItem.Ack(state, cmd, ex).ToTransStream();
        //        //using (NetStream stream = new NetStream())
        //        //{
        //        //    response.EntityWrite(stream, null);
        //        //    WriteReponse(pipeStream, stream.ToArray());
        //        //}
        //    }
        //    catch (Exception x)
        //    {
        //        QLogger.ErrorFormat("QueueResponse WriteError Exception: " + x.Message);
        //        //var ack = new Message(MessageState.StreamReadWriteError, new MessageException(MessageState.StreamReadWriteError, "Invalid stream to write ack"));
        //        //return ack.GetEntityStream(false);
        //        return null;
        //    }
        //}

        public static TransStream DoResponse(IQueueAck item)
        {
            if (item == null)
            {
                return(null);
                //throw new MessageException(MessageState.MessageError, "Invalid queue item to write response");
            }
            QLogger.Debug("QueueController DoResponse IQueueAck: {0}", item.Print());
            return(item.ToTransStream());
        }
Example #4
0
        public static void SendItem(bool isAsync)
        {
            var       host = QueueHost.Parse("tcp:127.0.0.1:15000?NC_Quick");
            QueueApi  q    = QueueClient.GetApi(host);
            var       item = QueueClient.CreateQueueItem("Hello world " + DateTime.Now.ToString("s"), "test");
            IQueueAck ack  = null;

            if (q.IsAsync)
            {
                ack = QueueClient.SendItemAsync(q, item, 0);
            }
            else
            {
                ack = QueueClient.SendItem(q, item, 0);
            }

            Console.WriteLine("State:{0},Creation:{1},Host:{2},Label:{3}, Identifier:{4}, Duration:{5}, item:{6}", ack.MessageState, ack.Creation, ack.Host, ack.Label, ack.Identifier, ack.Duration, item.Id);

            //var duration = DateTime.Now.Subtract(start);
            //var milliseconds = duration.TotalMilliseconds;
            //Console.WriteLine("duration: {0}, item: {1}", milliseconds, item);
        }