Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Text;
- using System.Web.Script.Serialization;
- using System.Configuration;
- using System.Xml;
- using log4net;
- using log4net.Config;
- //using CID.MQ.MessageTypes.Status;
- using RabbitMQ.Client;
- using RabbitMQ.Client.MessagePatterns;
- using Model = CID.EDI.StatusChange.Model;
- using Status = CID.MQ.MessageTypes.Status.StatusChange;
- using Assignment = CID.MQ.MessageTypes.Assignment.Assignment;
- using CID.MQ.MessageTypes.Status;
- using System.Threading.Tasks;
- namespace CID.Logger.StatusChange
- {
- class Program
- {
- private static List<string> exchanges;
- static void Main(string[] args)
- {
- int reviewID = 0;
- bool isReviewIDValid = false;
- exchanges.Add((string)ConfigurationManager.AppSettings["mqStatusExchange"]);
- exchanges.Add((string)ConfigurationManager.AppSettings["mqAssignmentExchange"]);
- if (args.Length != 0) //reviewID provided at console
- {
- isReviewIDValid = Int32.TryParse(args[0], out reviewID);
- while (!isReviewIDValid)
- {
- Console.WriteLine("ReviewID is not numeric.");
- Console.WriteLine("Insert a reviewID:");
- isReviewIDValid = Int32.TryParse(Console.Read().ToString(), out reviewID);
- }
- }
- else //get reviewID from Rabbit
- {
- string routingKey = (string)ConfigurationManager.AppSettings["routingKey"];
- int exchangeCount = exchanges.Count;
- //reviewID = GetReviewIDFromQueue(exchanges[0], routingKey);
- //launch 2 tasks for each exchange
- Task<Int32> t1 = new Task<Int32>(reviewID => GetReviewIDFromQueue(exchanges[0], routingKey));
- Task<Int32> t2 = new Task<Int32>(reviewID => GetReviewIDFromQueue(exchanges[1], routingKey));
- t1.Start();
- t2.Start();
- }
- bool success = EDIAddProgressNote(reviewID);
- //Console.WriteLine("Note for ReviewID {0} sent.Operation {1}", reviewID,
- // success ? "successful." : "failed.");
- }
- static Int32 GetReviewIDFromMessage(string exchange, string jsonMessage)
- {
- var json = new JavaScriptSerializer();
- if(exchange == (string)ConfigurationManager.AppSettings["mqStatusExchange"])
- {
- var msg = (Status)json.Deserialize(jsonMessage, typeof(Status));
- return (int)msg.ClaimReviewId;
- }
- return 1;
- }
- static int GetReviewIDFromQueue(string exchange, string routingKey)
- {
- var queue = exchange + ".Queue";
- //var assignmentExchange = (string)ConfigurationManager.AppSettings["mqAssignmentExchange"];
- //var statusExchange = (string)ConfigurationManager.AppSettings["mqStatusExchange"];
- routingKey = "#";
- using (var connection = GetConnection())
- {
- using (var model = connection.CreateModel())
- {
- var json = new JavaScriptSerializer();
- model.ExchangeDeclare(exchange, ExchangeType.Topic, true);
- model.QueueDeclare(queue, false, true, true, new Dictionary<string, object>());
- model.QueueBind(queue, exchange, routingKey);
- var subscription = new Subscription(model, queue, true);
- while (true)
- {
- var basicDeliveryEventArgs = subscription.Next();
- var jsonMessage = Encoding.UTF8.GetString(basicDeliveryEventArgs.Body);
- //var toStatus = basicDeliveryEventArgs.RoutingKey;
- int reviewID = (Int32)GetReviewIDFromMessage(exchange, jsonMessage) ;
- return reviewID;
- }
- }
- }
- }
- private static bool EDIAddProgressNote(int reviewID)
- {
- Model.Review review = new Model.Review(reviewID, true);
- XmlDocument doc = review.ToXML();
- AddProgressNoteExporter edi = new AddProgressNoteExporter();
- XmlDocument response = edi.AddProgressNote(doc);
- //log sentXML
- LogMessage(String.Format("ReviewID {0}.\n XML sent to RTI interface:{1}",
- reviewID, edi.SentXML.InnerXml), false);
- ErrorMessage errorMessage = edi.ValidateResponse(response);
- if (string.IsNullOrEmpty(errorMessage.Message))
- return true;
- //send error to Rabbit,'Errors' queue
- var json = new JavaScriptSerializer();
- string exchange = ConfigurationManager.AppSettings["mqErrorsExchange"];
- using (var connection = GetConnection())
- {
- using (IModel model = connection.CreateModel())
- {
- model.ExchangeDeclare(exchange, ExchangeType.Topic, true);
- for (int i = 0; i < 10; i++)
- {
- model.BasicPublish(exchange, "CID." + errorMessage.Component,
- model.CreateBasicProperties(),
- Encoding.UTF8.GetBytes(json.Serialize(errorMessage)));
- System.Threading.Thread.Sleep(1000);
- Console.WriteLine("\n" + json.Serialize(errorMessage));
- }
- }
- }
- //log error
- LogMessage(String.Format("{0} {1} {2}", errorMessage.timestamp,
- errorMessage.Component, errorMessage.Message), true);
- return false;
- }
- private static IConnection GetConnection()
- {
- return new ConnectionFactory
- {
- HostName = (string)ConfigurationManager.AppSettings["mqHost"],
- UserName = (string)ConfigurationManager.AppSettings["mqUser"],
- Password = (string)ConfigurationManager.AppSettings["mqPass"]
- }
- .CreateConnection();
- }
- public static void LogMessage(string errorMessage, bool isError)
- {
- ILog log;
- XmlConfigurator.Configure();
- log = LogManager.GetLogger("CID.EDI.Errors");
- if (isError)
- {
- log.Error(errorMessage);
- return;
- }
- log.Info(errorMessage);
- }
- }
- }
Add Comment
Please, Sign In to add comment