Esempio n. 1
0
        /// <summary>
        /// this is our request that implements the ack/nak/response interaction
        /// adds id to subject and is expected to be used by Clients
        /// </summary>
        /// <param name="subject"></param>
        /// <param name="replyTo"></param>
        /// <param name="data"></param>
        /// <param name=""></param>
        public void protocolRequest(string subject, string data, IResponseCompletion completion = null)
        {
            Task.Factory.StartNew(() =>
            {
                //create a reply to mailbox
                var replyTo = "TA_MBOX:" + Guid.NewGuid().ToString();

                if (completion != null)
                {
                    //subscribe to reply to mailbox as this is where
                    //ack and reponse will be directed to
                    _connection.SubscribeAsync(replyTo, (s, a) =>
                    {
                        var dataAsString = Encoding.UTF8.GetString(a.Message.Data, 0, a.Message.Data.Length);

                        //call through ack when ack is received
                        if (dataAsString == "ACK")
                        {
                            completion.ack?.Invoke();
                        }
                        else if (dataAsString == "NAK")
                        {
                            if (completion.nak != null)
                            {
                                completion.nak?.Invoke(2); //2 means not implemented, need enum...
                            }
                            else
                            {
                                //call through response ( complete )
                                completion.response(a.Message.Data);
                                //unsubscribe from temporary mailbox
                                a.Message.ArrivalSubcription.Unsubscribe();
                            }
                        }
                    });
                }

                //publish to subject with reply to
                var message = new Msg(id + "." + subject, replyTo, Encoding.UTF8.GetBytes(data));
                _connection.Publish(message);
            });
        }
Esempio n. 2
0
 public void doAction(string what, IResponseCompletion callbacks)
 {
     request("action." + what, Encoding.UTF8.GetBytes(what), callbacks);
 }
Esempio n. 3
0
 public void doGet(string what, IResponseCompletion callbacks)
 {
     request("get", Encoding.UTF8.GetBytes(what), callbacks);
 }
Esempio n. 4
0
 /// <summary>
 /// send request and be called back for ack/nak/response
 /// </summary>
 /// <param name="subject"></param>
 /// <param name="payload"></param>
 /// <param name="callbacks"></param>
 public void request(string subject, byte[] payload, IResponseCompletion callbacks)
 {
     protocolRequest(subject, payload, callbacks);
 }