示例#1
0
        /*
         * Remove all messages from shutdown queue
         */
        private void ClearShutdownQueue()
        {
            var QueueURL = AppUtility.GetContext().ShutdownQueue;

            Amazon.SQS.Model.ReceiveMessageRequest request = new Amazon.SQS.Model.ReceiveMessageRequest();
            request.WithMaxNumberOfMessages(10);
            request.WithQueueUrl(QueueURL);
            var rsp = queue.ReceiveMessage(request);

            while (rsp.IsSetReceiveMessageResult() && rsp.ReceiveMessageResult.Message.Count > 0)
            {
                Debug.WriteLine("Remove Shutdown Messages: " + rsp.ReceiveMessageResult.Message.Count);
                var result = rsp.ReceiveMessageResult.Message;
                foreach (var msg in rsp.ReceiveMessageResult.Message)
                {
                    //Console.WriteLine("Message: " + msg);
                    if (msg.IsSetMessageId())
                    {
                        //Console.WriteLine("Body: " + msg.Body);
                        //if (msg.Body == "shutdown")
                        //{
                        //}
                        var delMsg = new Amazon.SQS.Model.DeleteMessageRequest();
                        delMsg.WithQueueUrl(QueueURL);
                        delMsg.WithReceiptHandle(msg.ReceiptHandle);
                        var delRsp = queue.DeleteMessage(delMsg);
                    }
                }
                rsp = queue.ReceiveMessage(request);
            }
        }
示例#2
0
        public ErrorTypes RemoveTask(object key)
        {
            ErrorTypes eResult = ErrorTypes.Unknown;

            try
            {
                SQSDataKey oSQSDataKey = (SQSDataKey)key;
                string     strUrlQueue = GetQueueUrl(oSQSDataKey.m_oPriority);

                using (Amazon.SQS.AmazonSQS oSQSClient = Amazon.AWSClientFactory.CreateAmazonSQSClient())
                {
                    Amazon.SQS.Model.DeleteMessageRequest oDeleteRequest = new Amazon.SQS.Model.DeleteMessageRequest();
                    oDeleteRequest.QueueUrl      = strUrlQueue;
                    oDeleteRequest.ReceiptHandle = (string)oSQSDataKey.m_strReceiptHandle;

                    oSQSClient.DeleteMessage(oDeleteRequest);
                    eResult = ErrorTypes.NoError;
                }
            }
            catch (Amazon.SQS.AmazonSQSException)
            {
            }
            catch
            {
            }

            return(eResult);
        }
示例#3
0
        public int GetNotifications()
        {
            int count = 0;
            // Check Queue For Shutdown Message
            var request = new Amazon.SQS.Model.ReceiveMessageRequest();

            request.WithQueueUrl(AppUtility.GetContext().ShutdownNotificationQueue);

            var rsp = queue.ReceiveMessage(request);

            if (rsp.IsSetReceiveMessageResult())
            {
                foreach (var msg in rsp.ReceiveMessageResult.Message)
                {
                    if (msg.IsSetMessageId())
                    {
                        Debug.WriteLine("Notification Instance shutdown: " + msg.Body);
                        var delMsg = new Amazon.SQS.Model.DeleteMessageRequest();
                        delMsg.WithQueueUrl(AppUtility.GetContext().ShutdownQueue);
                        delMsg.WithReceiptHandle(msg.ReceiptHandle);
                        var delRsp = queue.DeleteMessage(delMsg);
                        count += 1;
                    }
                }
            }

            return(count);
        }
示例#4
0
 public void AddSetupCB(Func <Amazon.SQS.Model.DeleteMessageRequest, Amazon.SQS.Model.DeleteMessageResponse> callback,
                        Amazon.SQS.Model.DeleteMessageRequest request, Action <Amazon.SQS.Model.DeleteMessageResponse> check)
 {
     setupCallbackCheck = check;
     setupCallback      = callback;
     setupCBRequest     = request;
 }
示例#5
0
        IEnumerator RepeatRetrieveMessage(float waitTime)
        {
            bool checkSQS = true;

            while (checkSQS)
            {
                yield return(new WaitForSeconds(waitTime));

                if (!string.IsNullOrEmpty(queueUrl))
                {
                    SqsClient.ReceiveMessageAsync(queueUrl, (result) => {
                        if (result.Exception == null)
                        {
                            //Read the message
                            var messages = result.Response.Messages;
                            messages.ForEach(m => {
                                Debug.Log(@"Message Id  = " + m.MessageId);
                                Debug.Log(@"Mesage = " + m.Body);

                                string[] parts   = m.Body.Split(new char [] { ' ' });
                                string modelName = parts[parts.Length - 1];
                                this.LoadModel(modelName);

                                //Process the message
                                //[do your thing here]

                                //Delete the message
                                var delRequest = new Amazon.SQS.Model.DeleteMessageRequest
                                {
                                    QueueUrl      = queueUrl,
                                    ReceiptHandle = m.ReceiptHandle
                                };

                                SqsClient.DeleteMessageAsync(delRequest, (delResult) => {
                                    if (delResult.Exception == null)
                                    {
                                    }
                                    else
                                    {
                                    }
                                });
                            });
                        }
                        else
                        {
                            Debug.LogException(result.Exception);
                        }
                    });
                }
                else
                {
                    Debug.Log(@"Queue Url is empty, make sure that the queue is created first");
                }

                //Debug.Log (".");
            }
        }
示例#6
0
        /// <summary>
        /// Deletes a message from an SQS queue.
        /// </summary>
        /// <param name="queueUrl">The sqs queue endpoint to delete the message from.</param>
        /// <param name="receiptHandle">The unique receipt handle for the message.</param>
        public static Amazon.SQS.Model.DeleteMessageResponse Delete(string queueUrl, string receiptHandle)
        {
            Amazon.SQS.Model.DeleteMessageResponse response = new Amazon.SQS.Model.DeleteMessageResponse();
            using (Amazon.SQS.IAmazonSQS client = new Factory().SQSClient())
            {
                Amazon.SQS.Model.DeleteMessageRequest request = new Amazon.SQS.Model.DeleteMessageRequest()
                {
                    QueueUrl = queueUrl,
                    ReceiptHandle = receiptHandle
                };

                response = client.DeleteMessage(request);
            }
            return response;
        }
        public ErrorTypes RemoveTask(object key)
        {
            ErrorTypes eResult = ErrorTypes.Unknown;
            try
            {
                SQSDataKey oSQSDataKey = (SQSDataKey)key;
                string strUrlQueue = GetQueueUrl(oSQSDataKey.m_oPriority);

                using (Amazon.SQS.AmazonSQS oSQSClient = Amazon.AWSClientFactory.CreateAmazonSQSClient())
                {

                    Amazon.SQS.Model.DeleteMessageRequest oDeleteRequest = new Amazon.SQS.Model.DeleteMessageRequest();
                    oDeleteRequest.QueueUrl = strUrlQueue;
                    oDeleteRequest.ReceiptHandle = (string)oSQSDataKey.m_strReceiptHandle;

                    oSQSClient.DeleteMessage(oDeleteRequest);
                    eResult = ErrorTypes.NoError;
                }
            }
            catch (Amazon.SQS.AmazonSQSException)
            {
            }
            catch
            {
            }

            return eResult;
        }
        /*
         * private void CreateQueueListener()
         * {
         *  //            SqsClient.CreateQueueAsync(QueueName, (result) =>
         *  //            {
         *  //                if (result.Exception == null)
         *  //                {
         *  //                    Debug.Log(@"Queue Created");
         *  //                    queueUrl = result.Response.QueueUrl;
         *  //                }
         *  //                else
         *  //                {
         *  //                    Debug.LogException(result.Exception);
         *  //                }
         *  //            });
         * }
         *
         * private void DeleteQueueListener()
         * {
         *  //            if (!string.IsNullOrEmpty(queueUrl))
         *  //            {
         *  //                SqsClient.DeleteQueueAsync(queueUrl, (result) =>
         *  //                {
         *  //                    if (result.Exception == null)
         *  //                    {
         *  //                       Debug.Log(@"Queue Deleted");
         *  //                    }
         *  //                    else
         *  //                    {
         *  //                        Debug.LogException(result.Exception);
         *  //                    }
         *  //                });
         *  //            }
         *  //            else
         *  //            {
         *  //                Debug.Log(@"Queue Url is empty, make sure that the queue is created first");
         *  //            }
         * }
         *
         * private void SendMessageListener()
         * {
         *
         *  if (!string.IsNullOrEmpty(queueUrl))
         *  {
         *      var message = Message.text;
         *      if (string.IsNullOrEmpty(message))
         *      {
         *          Debug.Log("No Message to send");
         *          return;
         *      }
         *
         *      SqsClient.SendMessageAsync(queueUrl, message, (result) =>
         *      {
         *          if (result.Exception == null)
         *          {
         *              Debug.Log("Message Sent");
         *          }
         *          else
         *          {
         *              Debug.LogException(result.Exception);
         *          }
         *      });
         *  }
         *  else
         *  {
         *      Debug.Log(@"Queue Url is empty, make sure that the queue is created first");
         *  }
         * }
         */

        IEnumerator RepeatRetrieveMessage(float waitTime)
        {
            bool checkSQS = true;

            while (checkSQS)
            {
                yield return(new WaitForSeconds(waitTime));

                if (!string.IsNullOrEmpty(queueUrl))
                {
                    SqsClient.ReceiveMessageAsync(queueUrl, (result) =>
                    {
                        if (result.Exception == null)
                        {
                            //Read the message
                            var messages = result.Response.Messages;
                            messages.ForEach(m =>
                            {
                                //Debug.Log(@"Message Id  = " + m.MessageId);
                                Debug.Log(@"Mesage = " + m.Body);

                                //Process the message
                                //[do your thing here]

                                //var color = colorDictionay.Where(c => c.Key == m.Body).FirstOrDefault().Value;

                                if (m.Body == "white")
                                {
                                    for (int i = 0; i < env_light.Length; i++)
                                    {
                                        env_light[i].color = Color.white;
                                    }
                                }

                                if (m.Body == "red")
                                {
                                    for (int i = 0; i < env_light.Length; i++)
                                    {
                                        env_light[i].color = Color.red;
                                    }
                                }
                                else if (m.Body == "blue")
                                {
                                    for (int i = 0; i < env_light.Length; i++)
                                    {
                                        env_light[i].color = Color.blue;
                                    }
                                }
                                else if (m.Body == "green")
                                {
                                    for (int i = 0; i < env_light.Length; i++)
                                    {
                                        env_light[i].color = Color.green;
                                    }
                                }

                                if (m.Body == "off")
                                {
                                    for (int i = 0; i < env_light.Length; i++)
                                    {
                                        env_light[i].enabled = false;
                                    }
                                }
                                else if (m.Body == "on")
                                {
                                    for (int i = 0; i < env_light.Length; i++)
                                    {
                                        env_light[i].enabled = true;
                                    }
                                }

                                if (m.Body == "delete")
                                {
                                    StartCoroutine(placeObject.ClearRoom());
                                }

                                if (m.Body == "undo")
                                {
                                    StartCoroutine(placeObject.UndoPlacement());
                                }


                                //Delete the message
                                var delRequest = new Amazon.SQS.Model.DeleteMessageRequest
                                {
                                    QueueUrl      = queueUrl,
                                    ReceiptHandle = m.ReceiptHandle
                                };

                                SqsClient.DeleteMessageAsync(delRequest, (delResult) =>
                                {
                                    if (delResult.Exception == null)
                                    {
                                    }
                                    else
                                    {
                                    }
                                });
                            });
                        }
                        else
                        {
                            Debug.LogException(result.Exception);
                        }
                    });
                }
                else
                {
                    Debug.Log(@"Queue Url is empty, make sure that the queue is created first");
                }

                //Debug.Log (".");
            }
        }
示例#9
0
        IEnumerator RepeatRetrieveMessage(float waitTime)
        {
            bool checkSQS = true;

            while (checkSQS)
            {
                yield return(new WaitForSeconds(waitTime));

                if (!string.IsNullOrEmpty(queueUrl))
                {
                    SqsClient.ReceiveMessageAsync(queueUrl, (result) => {
                        if (result.Exception == null)
                        {
                            //Read the message
                            var messages = result.Response.Messages;
                            messages.ForEach(m => {
                                Debug.Log(@"Message Id  = " + m.MessageId);
                                Debug.Log(@"Mesage = " + m.Body);

                                //Process the message
                                if (m.Body.Contains("move") || m.Body.Contains("forward"))
                                {
                                    main.setRoom(main.selectedRoom);
                                }
                                else if (m.Body.Contains("grab"))
                                {
                                    if (main.selectedBall)
                                    {
                                        main.selectedBall.onCommand();
                                    }
                                    else if (main.selectedChest)
                                    {
                                        Debug.Log("open chest");
                                    }
                                }
                                else if (m.Body.Contains("throw"))
                                {
                                    main.holdingBall.onThrow();
                                }
                                else if (m.Body.Contains("attack"))
                                {
                                    main.pewPew();
                                }

                                //Delete the message
                                var delRequest = new Amazon.SQS.Model.DeleteMessageRequest
                                {
                                    QueueUrl      = queueUrl,
                                    ReceiptHandle = m.ReceiptHandle
                                };

                                SqsClient.DeleteMessageAsync(delRequest, (delResult) => {
                                    if (delResult.Exception == null)
                                    {
                                    }
                                    else
                                    {
                                    }
                                });
                            });
                        }
                        else
                        {
                            Debug.LogException(result.Exception);
                        }
                    });
                }
                else
                {
                    Debug.Log(@"Queue Url is empty, make sure that the queue is created first");
                }

                //Debug.Log (".");
            }
        }
示例#10
0
        /// <summary>
        /// The main entrypoint for the thread that listens to messages.
        /// </summary>
        private void AWSMessageListener()
        {
            // Used to eliminate over logging
            bool receivedMessage = true;

            while (!stopping)
            {
                try
                {
                    var receiveMessageRequest = new SQS.Model.ReceiveMessageRequest()
                    {
                        WaitTimeSeconds = 10,
                        QueueUrl        = sqsQueueUrl
                    };
                    if (receivedMessage)
                    {
                        Logger.LogTrace("Waiting for message from queue");
                    }
                    receivedMessage = false;
                    var messageResponse = AsyncTaskHelper.RunSync(() => sqsClient.ReceiveMessageAsync(receiveMessageRequest));

                    if (messageResponse.HttpStatusCode == HttpStatusCode.OK &&
                        messageResponse.Messages.Count > 0 &&
                        !stopping)
                    {
                        receivedMessage = true;
                        Logger.LogDebug($"Received {messageResponse.Messages.Count} message(s)");
                        foreach (var messageResponseMessage in messageResponse.Messages)
                        {
                            try
                            {
                                ProcessMessage(messageResponseMessage);
                            }
                            finally
                            {
#if (!DONTDELETEMESSAGE)
                                // Delete the message even in error since it will keep coming back
                                // Perhaps a better action would be to put in a dead letter queue
                                DeleteMessage(messageResponseMessage);
#endif
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    Logger.LogError("Error processing message: {0}", ex);
                }
            }

            // Process the received message
            void ProcessMessage(SQS.Model.Message messageResponseMessage)
            {
                Logger.LogTrace($"Received Message ({messageResponseMessage.MessageId}): {messageResponseMessage.Body}");
                var snsMessage = SNS.Util.Message.ParseMessage(messageResponseMessage.Body);
                var feedEvent  = JsonConvert.DeserializeObject <FeedEvent>(snsMessage.MessageText);

                Logger.LogInformation($"Feed: {feedEvent.Feed}, Event: {feedEvent.Event}, Package: {feedEvent.Package}, Version: {feedEvent.Version}");
                Logger.LogTrace($"Package URL: {feedEvent.PackageUrl}");

                var actionableActions =
                    ApplicationSettings.Actions.Where(action => string.Equals(action.SourceFeed, feedEvent.Feed, StringComparison.InvariantCultureIgnoreCase) && action.Enabled);
                Package retrievedPackage = null;

                foreach (var actionableAction in actionableActions)
                {
                    Logger.LogTrace($"Found Action ({actionableAction.Name}) for {feedEvent.Feed}");
                    if (feedEvent.Version.IsPrerelease() && !actionableAction.IncludePrerelease)
                    {
                        Logger.LogDebug($"{actionableAction.Name} is ignoring prelease package ({feedEvent.Package}.{feedEvent.Version})");
                        continue;
                    }

                    using (var scope = ServiceProvider.CreateScope())
                    {
                        var action = ActionProcessor.CreateAction(scope, actionableAction);
                        switch (feedEvent.Event)
                        {
                        case EventType.Added:

                            if (retrievedPackage == null)
                            {
                                retrievedPackage = AsyncTaskHelper.RunSync(() => action.SourceRepository.FetchAsync(feedEvent.Package, feedEvent.Version));
                            }

                            if (retrievedPackage == null)
                            {
                                Logger.LogWarning($"{feedEvent.Package}.{feedEvent.Version} not found in feed {feedEvent.Feed}. Ignoring.");
                            }
                            else
                            {
                                AsyncTaskHelper.RunSync(() => action.ProcessPackageAsync(retrievedPackage, PackageEvent.Added));
                            }
                            break;

                        case EventType.Deleted:
                        case EventType.Purged:
                            // We can't retrieve the package because it has been deleted
                            var deletePackage = new Package
                            {
                                Id      = feedEvent.Package,
                                Version = feedEvent.Version
                            };
                            AsyncTaskHelper.RunSync(() => action.ProcessPackageAsync(deletePackage, PackageEvent.Deleted));
                            break;
                        }
                    }
                }
            }

#if (!DONTDELETEMESSAGE)
            // Delete the processed message from the queue
            void DeleteMessage(SQS.Model.Message messageResponseMessage)
            {
                var deleteMessageRequest = new SQS.Model.DeleteMessageRequest
                {
                    QueueUrl      = sqsQueueUrl,
                    ReceiptHandle = messageResponseMessage.ReceiptHandle
                };

                Logger.LogTrace($"Deleting Message: {messageResponseMessage.ReceiptHandle}");
                var deleteMessageResponse = AsyncTaskHelper.RunSync(() => sqsClient.DeleteMessageAsync(deleteMessageRequest));

                if (deleteMessageResponse.HttpStatusCode == HttpStatusCode.OK)
                {
                    Logger.LogTrace($"Delete Message: {messageResponseMessage.ReceiptHandle}");
                }
                else
                {
                    Logger.LogWarning($"Unable to delete Message: {messageResponseMessage.ReceiptHandle}. Ignoring.");
                }
            }
#endif
        }