/[projects]/dao/DaoMqPump2/MQFilter/FilterController.cs
ViewVC logotype

Diff of /dao/DaoMqPump2/MQFilter/FilterController.cs

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2168 by torben, Fri May 16 20:56:22 2014 UTC revision 2175 by torben, Mon May 19 11:59:45 2014 UTC
# Line 45  namespace MQFilter Line 45  namespace MQFilter
45              //Læser globale MQ Parametre              //Læser globale MQ Parametre
46              mqHost = (string)key.GetValue("MQHost");              mqHost = (string)key.GetValue("MQHost");
47              if (mqHost == null || mqHost.Length == 0)              if (mqHost == null || mqHost.Length == 0)
48                {
49                    key.SetValue("MQHost", "", RegistryValueKind.String);
50                  throw new System.ArgumentException("MQHost cannot be null or empty");                  throw new System.ArgumentException("MQHost cannot be null or empty");
51                }
52    
53              mqChannel = (string)key.GetValue("MQChannel");              mqChannel = (string)key.GetValue("MQChannel");
54              if (mqChannel == null || mqChannel.Length == 0)              if (mqChannel == null || mqChannel.Length == 0)
55                {
56                    key.SetValue("MQChannel", "", RegistryValueKind.String);
57                  throw new System.ArgumentException("MQChannel cannot be null or empty");                  throw new System.ArgumentException("MQChannel cannot be null or empty");
58                }
59    
60              mqQueueManager = (string)key.GetValue("MQQueueManager");              mqQueueManager = (string)key.GetValue("MQQueueManager");
61              if (mqQueueManager == null || mqQueueManager.Length == 0)              if (mqQueueManager == null || mqQueueManager.Length == 0)
62                {
63                    key.SetValue("MQQueueManager", "", RegistryValueKind.String);
64                  throw new System.ArgumentException("MQQueueManager cannot be null or empty");                  throw new System.ArgumentException("MQQueueManager cannot be null or empty");
65                }
66    
67              ////////////              ////////////
68    
69              logDirectory = (string)key.GetValue("LogDirectory");              logDirectory = (string)key.GetValue("LogDirectory");
70              if (logDirectory == null || logDirectory.Length == 0)              if (logDirectory == null || logDirectory.Length == 0)
71                {
72                    key.SetValue("LogDirectory", "", RegistryValueKind.String);
73                  throw new System.ArgumentException("LogDirectory cannot be null or empty");                  throw new System.ArgumentException("LogDirectory cannot be null or empty");
74                }
75    
76              if (Directory.Exists(logDirectory) == false)              if (Directory.Exists(logDirectory) == false)
77              {              {
# Line 70  namespace MQFilter Line 82  namespace MQFilter
82    
83              String tmpFilterTransactions = (string)key.GetValue("FilterTransactions");              String tmpFilterTransactions = (string)key.GetValue("FilterTransactions");
84              if (tmpFilterTransactions == null || tmpFilterTransactions.Length == 0)              if (tmpFilterTransactions == null || tmpFilterTransactions.Length == 0)
85                {
86                    key.SetValue("FilterTransactions", "", RegistryValueKind.String);
87                  throw new System.ArgumentException("FilterTransactions cannot be null or empty");                  throw new System.ArgumentException("FilterTransactions cannot be null or empty");
88                }
89                tmpFilterTransactions = tmpFilterTransactions.Replace(';', ',');
90              filterTranscations = Regex.Split(tmpFilterTransactions, ",");              filterTranscations = Regex.Split(tmpFilterTransactions, ",");
91    
92              for (int i = 0; i < filterTranscations.Length; i++)              for (int i = 0; i < filterTranscations.Length; i++)
93              {              {
94                  filterTranscations[i] = filterTranscations[i].Trim();                  filterTranscations[i] = filterTranscations[i].Trim().ToUpper();
95              }              }
96    
97              ////////////              ////////////
# Line 83  namespace MQFilter Line 99  namespace MQFilter
99          }          }
100    
101    
102          private Hashtable getConnectionProperties()  
         {  
             Hashtable connProperties = new Hashtable();  
             connProperties.Add(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES_CLIENT);  
             connProperties.Add(MQC.HOST_NAME_PROPERTY, mqHost);  
             connProperties.Add(MQC.CHANNEL_PROPERTY, mqChannel);  
             return connProperties;  
         }  
103    
104    
105          public void transportAllMessages()          public void transportAllMessages()
# Line 105  namespace MQFilter Line 114  namespace MQFilter
114              try              try
115              {              {
116                  //MQ options                  //MQ options
117                  Hashtable connProps = getConnectionProperties();                  Hashtable connProps = MQHelper.getConnectionProperties(mqHost, mqChannel);
118                  int openInputOptions = MQC.MQOO_INPUT_AS_Q_DEF + MQC.MQOO_FAIL_IF_QUIESCING;                  int openInputOptions = MQC.MQOO_INPUT_AS_Q_DEF + MQC.MQOO_FAIL_IF_QUIESCING;
119                  int openOutputOptions = MQC.MQOO_OUTPUT + MQC.MQOO_FAIL_IF_QUIESCING;                  int openOutputOptions = MQC.MQOO_OUTPUT + MQC.MQOO_FAIL_IF_QUIESCING;
120    
# Line 113  namespace MQFilter Line 122  namespace MQFilter
122                  //MQ objects i v6 implementerer ikke IDisposable og kan derfor ikke bruges med "using" statement                  //MQ objects i v6 implementerer ikke IDisposable og kan derfor ikke bruges med "using" statement
123                  mqMgr = new MQQueueManager(mqQueueManager, connProps);//stage 1 connect to mq                  mqMgr = new MQQueueManager(mqQueueManager, connProps);//stage 1 connect to mq
124    
                 queueIndbakke = mqMgr.AccessQueue(queueNameIndbakke, openInputOptions);  
125    
126                  queueMysql = mqMgr.AccessQueue(queueNameMysql, openOutputOptions);                  queueIndbakke = MQHelper.openQueueHelper(queueNameIndbakke, mqMgr, openInputOptions);
127                  queueDimaps = mqMgr.AccessQueue(queueNameDimaps, openOutputOptions);  
128                  queueStore = mqMgr.AccessQueue(queueNameStore, openOutputOptions);                  queueMysql = MQHelper.openQueueHelper(queueNameMysql, mqMgr, openOutputOptions);
129                    queueDimaps = MQHelper.openQueueHelper(queueNameDimaps, mqMgr, openOutputOptions);
130                    queueStore = MQHelper.openQueueHelper(queueNameStore, mqMgr, openOutputOptions);
131    
132    
133                  bool isContinue = true;                  bool isContinue = true;
# Line 133  namespace MQFilter Line 143  namespace MQFilter
143                          queueIndbakke.Get(mqMsg, mqGetMsgOpts);                          queueIndbakke.Get(mqMsg, mqGetMsgOpts);
144                          if (mqMsg.Format.CompareTo(MQC.MQFMT_STRING) == 0)                          if (mqMsg.Format.CompareTo(MQC.MQFMT_STRING) == 0)
145                          {                          {
146                              string msgString = mqMsg.ReadString(mqMsg.MessageLength);                              string salt2String = mqMsg.ReadString(mqMsg.MessageLength);
147                              //System.Console.WriteLine(msgString);                              //System.Console.WriteLine(msgString);
148    
149    
150                              // Hvis transaktionen starter med et ? er det ikke en gyldig transaktion                              // validér at headeren er gyldig
151                              // validér ligeledes at headeren er gyldig                              if ( Salt2Helper.validateSalt2Header(salt2String) == false)
                             if (msgString.StartsWith("?") || DaoUtil.validateSalt2Header(msgString) == false)  
152                              {                              {
153                                  string discarded_filename = Logfile.getLogFilename(LogfileType.LogTransactions, logDirectory, "filter");                                  string discarded_filename = Logfile.getLogFilename(LogfileType.LogTransactions, logDirectory, "filter");
154                                  using (StreamWriter discardedlog = new StreamWriter(discarded_filename, true))                                  using (StreamWriter discardedlog = new StreamWriter(discarded_filename, true))
155                                  {                                  {
156                                      discardedlog.WriteLine(Logfile.getNowString() + " " + msgString);                                      discardedlog.WriteLine(Logfile.getNowString() + " " + salt2String);
157                                  }                                  }
158                                  continue; //gå frem til at tage næste transaktion fra køen                                  continue; //gå frem til at tage næste transaktion fra køen
159                              }                              }
160    
161                                MQPutMessageOptions pmo = new MQPutMessageOptions(); // accept the defaults,
162                                // same as MQPMO_DEFAULT
163    
164                                MQMessage msg = new MQMessage();
165                                msg.Format = MQC.MQFMT_STRING;
166                                msg.CharacterSet = 1252;
167                                msg.WriteString(salt2String);
168    
169                                Salt2Header header = Salt2Helper.parseHeader(salt2String);
170                                queueMysql.Put(msg, pmo);
171                                if (saveForLater(header))
172                                {
173                                    queueStore.Put(msg, pmo);
174                                }
175                                else
176                                {
177                                    queueDimaps.Put(msg, pmo);
178                                }
179    
180    
181    
# Line 197  namespace MQFilter Line 220  namespace MQFilter
220              }              }
221              finally              finally
222              {              {
223                  closeQueue(queueIndbakke);                  MQHelper.closeQueueSafe(queueIndbakke);
224                  closeQueue(queueMysql);                  MQHelper.closeQueueSafe(queueMysql);
225                  closeQueue(queueDimaps);                  MQHelper.closeQueueSafe(queueDimaps);
226                  closeQueue(queueStore);                  MQHelper.closeQueueSafe(queueStore);
227    
228                    MQHelper.closeQueueManagerSafe(mqMgr);
229                }
230            }
231    
232            private Boolean saveForLater(Salt2Header header)
233            {
234    
235                  if (mqMgr != null && mqMgr.IsOpen)              DateTime now = DateTime.Now;
236                int hour = now.Hour;
237                if (hour >= 14 && hour < 18)
238                {
239                    
240                    if (contains(header.transaktionForkortelse, this.filterTranscations) ) //Så længe vi skal være .net3.0 kompatible er LINQ problematisk (LINQ kræver 3.5)
241                  {                  {
242                      try                      return true;
243                      {                  }
244                          mqMgr.Close();                  else
245                      }                  {
246                      catch (Exception e)                      return false;
                     {  
                         Console.WriteLine("Error cleaning up qmgr " + e.Message);  
                     }  
247                  }                  }
248              }              }
249                else //normal operation - send straight trough
250                {
251                    return false;
252                }
253    
254          }          }
255    
256          private void closeQueue(MQQueue queue)          private bool contains(string needle, string[] haystack) // s
257          {          {
258              if (queue != null && queue.IsOpen)              foreach(string hay in haystack)
259              {              {
260                  try                  if (needle.Equals(hay))
                 {  
                     queue.Close();  
                 }  
                 catch (Exception e)  
261                  {                  {
262                      Console.WriteLine("Error cleaning up queue " + e.Message);                      return true;
263                  }                  }
264              }              }
265    
266                return false;            
267          }          }
268    
269    
270    
271    
272          /* Singleton */          /* Singleton */
273          private static FilterController instance = null;          private static FilterController instance = null;
274          public static FilterController getInstance()          public static FilterController getInstance()

Legend:
Removed from v.2168  
changed lines
  Added in v.2175

  ViewVC Help
Powered by ViewVC 1.1.20