/[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 2169 by torben, Fri May 16 21:10:02 2014 UTC revision 2174 by torben, Sat May 17 11:25:26 2014 UTC
# Line 71  namespace MQFilter Line 71  namespace MQFilter
71              String tmpFilterTransactions = (string)key.GetValue("FilterTransactions");              String tmpFilterTransactions = (string)key.GetValue("FilterTransactions");
72              if (tmpFilterTransactions == null || tmpFilterTransactions.Length == 0)              if (tmpFilterTransactions == null || tmpFilterTransactions.Length == 0)
73                  throw new System.ArgumentException("FilterTransactions cannot be null or empty");                  throw new System.ArgumentException("FilterTransactions cannot be null or empty");
74                tmpFilterTransactions = tmpFilterTransactions.Replace(';', ',');
75              filterTranscations = Regex.Split(tmpFilterTransactions, ",");              filterTranscations = Regex.Split(tmpFilterTransactions, ",");
76    
77              for (int i = 0; i < filterTranscations.Length; i++)              for (int i = 0; i < filterTranscations.Length; i++)
78              {              {
79                  filterTranscations[i] = filterTranscations[i].Trim();                  filterTranscations[i] = filterTranscations[i].Trim().ToUpper();
80              }              }
81    
82              ////////////              ////////////
# Line 83  namespace MQFilter Line 84  namespace MQFilter
84          }          }
85    
86    
87          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;  
         }  
88    
89    
90          public void transportAllMessages()          public void transportAllMessages()
# Line 105  namespace MQFilter Line 99  namespace MQFilter
99              try              try
100              {              {
101                  //MQ options                  //MQ options
102                  Hashtable connProps = getConnectionProperties();                  Hashtable connProps = MQHelper.getConnectionProperties(mqHost, mqChannel);
103                  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;
104                  int openOutputOptions = MQC.MQOO_OUTPUT + MQC.MQOO_FAIL_IF_QUIESCING;                  int openOutputOptions = MQC.MQOO_OUTPUT + MQC.MQOO_FAIL_IF_QUIESCING;
105    
# Line 133  namespace MQFilter Line 127  namespace MQFilter
127                          queueIndbakke.Get(mqMsg, mqGetMsgOpts);                          queueIndbakke.Get(mqMsg, mqGetMsgOpts);
128                          if (mqMsg.Format.CompareTo(MQC.MQFMT_STRING) == 0)                          if (mqMsg.Format.CompareTo(MQC.MQFMT_STRING) == 0)
129                          {                          {
130                              string msgString = mqMsg.ReadString(mqMsg.MessageLength);                              string salt2String = mqMsg.ReadString(mqMsg.MessageLength);
131                              //System.Console.WriteLine(msgString);                              //System.Console.WriteLine(msgString);
132    
133    
134                              // Hvis transaktionen starter med et ? er det ikke en gyldig transaktion                              // validér at headeren er gyldig
135                              // validér ligeledes at headeren er gyldig                              if ( Salt2Helper.validateSalt2Header(salt2String) == false)
                             if (msgString.StartsWith("?") || Salt2Helper.validateSalt2Header(msgString) == false)  
136                              {                              {
137                                  string discarded_filename = Logfile.getLogFilename(LogfileType.LogTransactions, logDirectory, "filter");                                  string discarded_filename = Logfile.getLogFilename(LogfileType.LogTransactions, logDirectory, "filter");
138                                  using (StreamWriter discardedlog = new StreamWriter(discarded_filename, true))                                  using (StreamWriter discardedlog = new StreamWriter(discarded_filename, true))
139                                  {                                  {
140                                      discardedlog.WriteLine(Logfile.getNowString() + " " + msgString);                                      discardedlog.WriteLine(Logfile.getNowString() + " " + salt2String);
141                                  }                                  }
142                                  continue; //gå frem til at tage næste transaktion fra køen                                  continue; //gå frem til at tage næste transaktion fra køen
143                              }                              }
144    
145                                MQPutMessageOptions pmo = new MQPutMessageOptions(); // accept the defaults,
146                                // same as MQPMO_DEFAULT
147    
148                                MQMessage msg = new MQMessage();
149                                msg.Format = MQC.MQFMT_STRING;
150                                msg.CharacterSet = 1252;
151                                msg.WriteString(salt2String);
152    
153                                Salt2Header header = Salt2Helper.parseHeader(salt2String);
154                                queueMysql.Put(msg, pmo);
155                                if (saveForLater(header))
156                                {
157                                    queueStore.Put(msg, pmo);
158                                }
159                                else
160                                {
161                                    queueDimaps.Put(msg, pmo);
162                                }
163    
164    
165    
# Line 197  namespace MQFilter Line 204  namespace MQFilter
204              }              }
205              finally              finally
206              {              {
207                  closeQueue(queueIndbakke);                  MQHelper.closeQueueSafe(queueIndbakke);
208                  closeQueue(queueMysql);                  MQHelper.closeQueueSafe(queueMysql);
209                  closeQueue(queueDimaps);                  MQHelper.closeQueueSafe(queueDimaps);
210                  closeQueue(queueStore);                  MQHelper.closeQueueSafe(queueStore);
211    
212                    MQHelper.closeQueueManagerSafe(mqMgr);
213                }
214            }
215    
216            private Boolean saveForLater(Salt2Header header)
217            {
218    
219                  if (mqMgr != null && mqMgr.IsOpen)              DateTime now = DateTime.Now;
220                int hour = now.Hour;
221                if (hour >= 14 && hour < 18)
222                {
223                    
224                    if (contains(header.transaktionForkortelse, this.filterTranscations) ) //Så længe vi skal være .net3.0 kompatible er LINQ problematisk (LINQ kræver 3.5)
225                  {                  {
226                      try                      return true;
227                      {                  }
228                          mqMgr.Close();                  else
229                      }                  {
230                      catch (Exception e)                      return false;
                     {  
                         Console.WriteLine("Error cleaning up qmgr " + e.Message);  
                     }  
231                  }                  }
232              }              }
233                else //normal operation - send straight trough
234                {
235                    return false;
236                }
237    
238          }          }
239    
240          private void closeQueue(MQQueue queue)          private bool contains(string needle, string[] haystack) // s
241          {          {
242              if (queue != null && queue.IsOpen)              foreach(string hay in haystack)
243              {              {
244                  try                  if (needle.Equals(hay))
245                  {                  {
246                      queue.Close();                      return true;
                 }  
                 catch (Exception e)  
                 {  
                     Console.WriteLine("Error cleaning up queue " + e.Message);  
247                  }                  }
248              }              }
249    
250                return false;            
251          }          }
252    
253    
254    
255    
256          /* Singleton */          /* Singleton */
257          private static FilterController instance = null;          private static FilterController instance = null;
258          public static FilterController getInstance()          public static FilterController getInstance()

Legend:
Removed from v.2169  
changed lines
  Added in v.2174

  ViewVC Help
Powered by ViewVC 1.1.20