//public MemoryStream ResultStream { get { return m_memoryStream; } set { m_memoryStream = value; } } //public TransformResponse MakeRequest (IRequest request, AsyncCallback callback, Nuxleus.Agent.NuxleusAsyncResult asyncResult, object extraData) { // //if (m_postOffice == null) { // // m_postOffice = m_loadBalancer.GetPostOffice; // //} // //Console.WriteLine("Transform reached"); // //TransformRequest tr = (TransformRequest)request; // //m_transform.BeginTransformProcess((TransformRequest)request, callback, asyncResult); // //m_resultHashtable[tr.ID] = tr.TransformResult; // //Console.WriteLine("TransformIsComplete reached w. GUID: {0}. Hashtable has: {1} entries.", tr.ID.ToString(), m_resultHashtable.Count); // //Console.WriteLine("End of Invoke Reached"); // //return asyncResult; //} public IAsyncResult BeginRequest(IRequest request, AsyncCallback callback, Nuxleus.Core.NuxleusAsyncResult asyncResult, object extraData) { //if (m_postOffice == null) { // m_postOffice = m_loadBalancer.GetPostOffice; //} Console.WriteLine("Transform reached"); TransformRequest tr = (TransformRequest)request; m_transform.BeginTransformProcess((TransformRequest)request); m_resultHashtable[tr.ID] = tr.TransformResult; Console.WriteLine("TransformIsComplete reached w. GUID: {0}. Hashtable has: {1} entries.", tr.ID.ToString(), m_resultHashtable.Count); Console.WriteLine("End of Invoke Reached"); return asyncResult; }
private Nuxleus.Bucker.Message HandleGetMessageRequest(Nuxleus.Bucker.Message m) { Nuxleus.Bucker.Message err = CheckQueue(m.QueueId); if (err != null) return err; err = CheckMessageId(m.MessageId); if (err != null) return err; string unreadKey = String.Format("{0}.new", m.QueueId); string[] keys = { m.QueueId, unreadKey, m.MessageId }; IDictionary<string,object> result = mc.Get(keys); object keyValue; if (!mc.TryGet(m.QueueId, out keyValue)) { m.Type = "error"; m.Op = null; m.Error = new Nuxleus.Bucker.Error(); m.Error.Type = "not-found"; m.Error.Code = 404; m.Error.Message = String.Format("'{0}' is not an existing queue", m.QueueId); return m; } string mids = (string)result[m.QueueId]; object messageValue; if (mc.TryGet(m.MessageId, out messageValue)) { if (m.Op.Peek == false) { string unread = (string)result[unreadKey]; if (unread.Contains(m.MessageId)) { unread = unread.Replace(m.MessageId, ""); unread = unread.Replace(",,", ""); unread = unread.Trim(comma); mc.Store(StoreMode.Set, unreadKey, unread); } } string visibilityKey = String.Format("{0}.visibility", m.MessageId); double visibilityTimeout = (double)mc.Get(visibilityKey); double now = UnixTimestampNow; if (now > visibilityTimeout) { if (m.Op.Peek == false) mc.Store(StoreMode.Set, visibilityKey, now + 30); string payload = String.Empty; if (result.ContainsKey(m.MessageId)) { payload = (string)result[m.MessageId]; if (payload == null) payload = String.Empty; } m.Type = "response"; m.Payload = payload; } else { err = new Nuxleus.Bucker.Message(); err.Type = "error"; err.Op = null; err.Error = new Nuxleus.Bucker.Error(); err.Error.Type = "invisible"; err.Error.Code = 404; err.Error.Message = String.Format("'{0}' is not visible", m.MessageId); } } else { err = new Nuxleus.Bucker.Message(); err.Type = "error"; err.Op = null; err.Error = new Nuxleus.Bucker.Error(); err.Error.Type = "not-found"; err.Error.Code = 404; err.Error.Message = String.Format("'{0}' was not found in the queue '{1}'", m.MessageId, m.QueueId); } return m; }
private Nuxleus.Bucker.Message HandleDeleteMessageRequest(Nuxleus.Bucker.Message m) { Nuxleus.Bucker.Message err = CheckQueue(m.QueueId); if (err != null) return err; err = CheckMessageId(m.MessageId); if (err != null) return err; string keys = (string)mc.Get(String.Format("{0}", m.QueueId)); if (keys == null) keys = String.Empty; if (keys.Contains(m.MessageId)) { keys = keys.Replace(m.MessageId, ""); keys = keys.Replace(",,", ""); keys = keys.Trim(comma); mc.Store(StoreMode.Set, m.QueueId, keys); } mc.Remove(String.Format("{0}.visibility", m.MessageId)); mc.Remove(m.MessageId); m.Type = "response"; return m; }
private Nuxleus.Bucker.Message HandlePushMessageRequest(Nuxleus.Bucker.Message m) { Nuxleus.Bucker.Message err = CheckQueue(m.QueueId); if (err != null) return err; string mid = Guid.NewGuid().ToString(); string payload = m.Payload; if (payload == null) payload = String.Empty; mc.Store(StoreMode.Set, mid, payload); mc.Store(StoreMode.Set, String.Format("{0}.visibility", mid), UnixTimestampNow); string keys = (string)mc.Get(m.QueueId); if ((keys == null) || (keys == String.Empty)) { keys = mid; } else { keys = String.Format("{0},{1}", keys, mid); } mc.Store(StoreMode.Set, m.QueueId, keys); keys = (string)mc.Get(String.Format("{0}.new", m.QueueId)); if ((keys == null) || (keys == String.Empty)) { keys = mid; } else { keys = String.Format("{0},{1}", keys, mid); } mc.Store(StoreMode.Set, String.Format("{0}.new", m.QueueId), keys); m.Type = "response"; m.MessageId = mid; return m; }
private Nuxleus.Bucker.Message HandleListMessagesRequest(Nuxleus.Bucker.Message m) { Nuxleus.Bucker.Message err = CheckQueue(m.QueueId); if (err != null) return err; string qid = m.QueueId; m.Type = "response"; //m.QueueId = m.QueueId; m.Op.Type = OperationType.ListMessages; string keys = (string)mc.Get(String.Format("{0}.new", m.QueueId)); if ((keys == null) || (keys == String.Empty)) { m.Messages = new string[0]; } else { string[] unread = keys.Split(','); int count = 10; if (unread.Length < 10) { count = unread.Length; } int index = 0; m.Messages = new string[count]; foreach (string mid in unread) { m.Messages[index] = mid; index++; if (index == 10) { break; } } } return m; }
private Nuxleus.Bucker.Message HandleListQueuesRequest(Nuxleus.Bucker.Message m) { string queues = (string)mc.Get(rootQueueId); if (queues == null) queues = String.Empty; string[] queuesList = queues.Split(','); Nuxleus.Bucker.Message lm = new Nuxleus.Bucker.Message(); lm.Type = "response"; lm.Op.Type = OperationType.ListQueues; if (queues == String.Empty) { lm.Queues = new string[0]; } else { lm.Queues = new string[queuesList.Length]; Array.Copy(queuesList, lm.Queues, queuesList.Length); } return lm; }
private Nuxleus.Bucker.Message HandleDeleteQueueRequest(Nuxleus.Bucker.Message m) { Nuxleus.Bucker.Message err = CheckQueueId(m.QueueId); if (err != null) return err; string qid = m.QueueId; string keys = (string)mc.Get(qid); if ((keys != null) && (keys != String.Empty)) { if (m.Op.Force == false) { m = new Nuxleus.Bucker.Message(); m.Type = "error"; m.Op = null; m.Error = new Nuxleus.Bucker.Error(); m.Error.Type = "queue-not-empty"; m.Error.Code = 400; m.Error.Message = String.Format("'{0}' is not empty. Either delete all the messages first or set the force attribute on the 'op' element", qid); return m; } else { // Deleting all the messages attached to that queue string[] keysList = keys.Split(','); foreach (string key in keysList) { mc.Remove(String.Format("{0}.visibility", key)); mc.Remove(key); } } } mc.Remove(qid); mc.Remove(String.Format("{0}.new", qid)); string queues = (string)mc.Get(rootQueueId); if (queues == null) queues = String.Empty; if (queues.Contains(qid)) { queues = queues.Replace(qid, ""); queues = queues.Replace(",,", ""); queues = queues.Trim(comma); mc.Store(StoreMode.Set, rootQueueId, queues); } m.Type = "response"; return m; }
private Nuxleus.Bucker.Message HandleNewQueueRequest(Nuxleus.Bucker.Message m) { Nuxleus.Bucker.Message err = CheckQueueId(m.QueueId); if (err != null) return err; string queues = (string)mc.Get(rootQueueId); if (queues == null) { // just in case queues = String.Empty; } if (!queues.Contains(m.QueueId)) { //mc.Add(m.QueueId, String.Empty); //mc.Add(String.Format("{0}.new", m.QueueId), String.Empty); //if (queues == String.Empty) { // queues = m.QueueId; //} else { // queues = String.Format("{0},{1}", queues, m.QueueId); //} //mc.Set(rootQueueId, queues); m.Type = "response"; } else { // Houston we have a conflict! string qid = m.QueueId; m = new Nuxleus.Bucker.Message(); m.Type = "error"; m.Op = null; m.Error = new Nuxleus.Bucker.Error(); m.Error.Type = "conflict"; m.Error.Code = 409; m.Error.Message = String.Format("'{0}' is already an existing queue", qid); } return m; }
private void HandleMessageReceived ( Nuxleus.Bucker.Message m ) { // When a message is received we delete it from the queue as // it has no purpose anymore Nuxleus.Bucker.Message dm = new Nuxleus.Bucker.Message(); dm.Op.Type = OperationType.DeleteMessage; dm.QueueId = m.QueueId; dm.MessageId = m.MessageId; Service.Connection.BeginSend(Nuxleus.Bucker.Message.Serialize(dm)); LLUP.Notification n = LLUP.Notification.Parse(Convert.FromBase64String(m.Payload)); postOffice.Post(n); }
private void HandleListOfNewMessages ( Nuxleus.Bucker.Message m ) { if (m.Messages != null) { Nuxleus.Bucker.Message gm = new Nuxleus.Bucker.Message(); gm.Op.Type = OperationType.GetMessage; gm.QueueId = m.QueueId; foreach (string mid in m.Messages) { gm.MessageId = mid; Service.Connection.BeginSend(Nuxleus.Bucker.Message.Serialize(gm)); } } }