Guest User

Untitled

a guest
Oct 12th, 2018
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.68 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Web.Script.Serialization;
  5. using System.Configuration;
  6. using System.Xml;
  7. using log4net;
  8. using log4net.Config;
  9. //using CID.MQ.MessageTypes.Status;
  10. using RabbitMQ.Client;
  11. using RabbitMQ.Client.MessagePatterns;
  12. using Model = CID.EDI.StatusChange.Model;
  13. using Status = CID.MQ.MessageTypes.Status.StatusChange;
  14. using Assignment = CID.MQ.MessageTypes.Assignment.Assignment;
  15. using CID.MQ.MessageTypes.Status;
  16. using System.Threading.Tasks;
  17.  
  18. namespace CID.Logger.StatusChange
  19. {
  20. class Program
  21. {
  22. private static List<string> exchanges;
  23.  
  24. static void Main(string[] args)
  25. {
  26. int reviewID = 0;
  27. bool isReviewIDValid = false;
  28. exchanges.Add((string)ConfigurationManager.AppSettings["mqStatusExchange"]);
  29. exchanges.Add((string)ConfigurationManager.AppSettings["mqAssignmentExchange"]);
  30.  
  31. if (args.Length != 0) //reviewID provided at console
  32. {
  33. isReviewIDValid = Int32.TryParse(args[0], out reviewID);
  34.  
  35. while (!isReviewIDValid)
  36. {
  37. Console.WriteLine("ReviewID is not numeric.");
  38. Console.WriteLine("Insert a reviewID:");
  39. isReviewIDValid = Int32.TryParse(Console.Read().ToString(), out reviewID);
  40. }
  41. }
  42. else //get reviewID from Rabbit
  43. {
  44. string routingKey = (string)ConfigurationManager.AppSettings["routingKey"];
  45. int exchangeCount = exchanges.Count;
  46.  
  47. //reviewID = GetReviewIDFromQueue(exchanges[0], routingKey);
  48.  
  49. //launch 2 tasks for each exchange
  50. Task<Int32> t1 = new Task<Int32>(reviewID => GetReviewIDFromQueue(exchanges[0], routingKey));
  51. Task<Int32> t2 = new Task<Int32>(reviewID => GetReviewIDFromQueue(exchanges[1], routingKey));
  52. t1.Start();
  53. t2.Start();
  54. }
  55.  
  56. bool success = EDIAddProgressNote(reviewID);
  57.  
  58.  
  59. //Console.WriteLine("Note for ReviewID {0} sent.Operation {1}", reviewID,
  60. // success ? "successful." : "failed.");
  61. }
  62.  
  63. static Int32 GetReviewIDFromMessage(string exchange, string jsonMessage)
  64. {
  65. var json = new JavaScriptSerializer();
  66.  
  67. if(exchange == (string)ConfigurationManager.AppSettings["mqStatusExchange"])
  68. {
  69. var msg = (Status)json.Deserialize(jsonMessage, typeof(Status));
  70. return (int)msg.ClaimReviewId;
  71. }
  72. return 1;
  73. }
  74.  
  75. static int GetReviewIDFromQueue(string exchange, string routingKey)
  76. {
  77.  
  78. var queue = exchange + ".Queue";
  79. //var assignmentExchange = (string)ConfigurationManager.AppSettings["mqAssignmentExchange"];
  80. //var statusExchange = (string)ConfigurationManager.AppSettings["mqStatusExchange"];
  81.  
  82. routingKey = "#";
  83.  
  84. using (var connection = GetConnection())
  85. {
  86. using (var model = connection.CreateModel())
  87. {
  88. var json = new JavaScriptSerializer();
  89.  
  90. model.ExchangeDeclare(exchange, ExchangeType.Topic, true);
  91. model.QueueDeclare(queue, false, true, true, new Dictionary<string, object>());
  92. model.QueueBind(queue, exchange, routingKey);
  93. var subscription = new Subscription(model, queue, true);
  94.  
  95. while (true)
  96. {
  97. var basicDeliveryEventArgs = subscription.Next();
  98.  
  99. var jsonMessage = Encoding.UTF8.GetString(basicDeliveryEventArgs.Body);
  100. //var toStatus = basicDeliveryEventArgs.RoutingKey;
  101. int reviewID = (Int32)GetReviewIDFromMessage(exchange, jsonMessage) ;
  102.  
  103. return reviewID;
  104. }
  105. }
  106. }
  107. }
  108.  
  109. private static bool EDIAddProgressNote(int reviewID)
  110. {
  111. Model.Review review = new Model.Review(reviewID, true);
  112. XmlDocument doc = review.ToXML();
  113.  
  114. AddProgressNoteExporter edi = new AddProgressNoteExporter();
  115. XmlDocument response = edi.AddProgressNote(doc);
  116.  
  117. //log sentXML
  118. LogMessage(String.Format("ReviewID {0}.\n XML sent to RTI interface:{1}",
  119. reviewID, edi.SentXML.InnerXml), false);
  120.  
  121.  
  122. ErrorMessage errorMessage = edi.ValidateResponse(response);
  123. if (string.IsNullOrEmpty(errorMessage.Message))
  124. return true;
  125.  
  126. //send error to Rabbit,'Errors' queue
  127. var json = new JavaScriptSerializer();
  128. string exchange = ConfigurationManager.AppSettings["mqErrorsExchange"];
  129.  
  130. using (var connection = GetConnection())
  131. {
  132. using (IModel model = connection.CreateModel())
  133. {
  134. model.ExchangeDeclare(exchange, ExchangeType.Topic, true);
  135. for (int i = 0; i < 10; i++)
  136. {
  137. model.BasicPublish(exchange, "CID." + errorMessage.Component,
  138. model.CreateBasicProperties(),
  139. Encoding.UTF8.GetBytes(json.Serialize(errorMessage)));
  140. System.Threading.Thread.Sleep(1000);
  141. Console.WriteLine("\n" + json.Serialize(errorMessage));
  142. }
  143. }
  144. }
  145. //log error
  146. LogMessage(String.Format("{0} {1} {2}", errorMessage.timestamp,
  147. errorMessage.Component, errorMessage.Message), true);
  148. return false;
  149. }
  150.  
  151. private static IConnection GetConnection()
  152. {
  153. return new ConnectionFactory
  154. {
  155. HostName = (string)ConfigurationManager.AppSettings["mqHost"],
  156. UserName = (string)ConfigurationManager.AppSettings["mqUser"],
  157. Password = (string)ConfigurationManager.AppSettings["mqPass"]
  158. }
  159. .CreateConnection();
  160. }
  161.  
  162. public static void LogMessage(string errorMessage, bool isError)
  163. {
  164. ILog log;
  165. XmlConfigurator.Configure();
  166. log = LogManager.GetLogger("CID.EDI.Errors");
  167.  
  168. if (isError)
  169. {
  170. log.Error(errorMessage);
  171. return;
  172. }
  173.  
  174. log.Info(errorMessage);
  175. }
  176. }
  177. }
Add Comment
Please, Sign In to add comment