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 |
//////////// |
//////////// |
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() |
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 |
|
|
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 saltiiString = 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 (saltiiString.StartsWith("?") || Salt2Helper.validateSalt2Header(saltiiString) == 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() + " " + saltiiString); |
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 |
} |
} |
148 |
MQMessage msg = new MQMessage(); |
MQMessage msg = new MQMessage(); |
149 |
msg.Format = MQC.MQFMT_STRING; |
msg.Format = MQC.MQFMT_STRING; |
150 |
msg.CharacterSet = 1252; |
msg.CharacterSet = 1252; |
151 |
msg.WriteString(saltiiString); |
msg.WriteString(salt2String); |
152 |
|
|
153 |
Salt2Header header = Salt2Helper.parseHeader(saltiiString); |
Salt2Header header = Salt2Helper.parseHeader(salt2String); |
154 |
queueMysql.Put(msg, pmo); |
queueMysql.Put(msg, pmo); |
155 |
if (saveForLater(header)) |
if (saveForLater(header)) |
156 |
{ |
{ |
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); |
|
if (mqMgr != null && mqMgr.IsOpen) |
|
|
{ |
|
|
try |
|
|
{ |
|
|
mqMgr.Close(); |
|
|
} |
|
|
catch (Exception e) |
|
|
{ |
|
|
Console.WriteLine("Error cleaning up qmgr " + e.Message); |
|
|
} |
|
|
} |
|
213 |
} |
} |
214 |
} |
} |
215 |
|
|
216 |
private Boolean saveForLater(Salt2Header header) |
private Boolean saveForLater(Salt2Header header) |
217 |
{ |
{ |
218 |
|
|
219 |
DateTime now = DateTime.Now; |
DateTime now = DateTime.Now; |
220 |
int hour = now.Hour; |
int hour = now.Hour; |
221 |
if (hour >= 14 && hour < 18) |
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 |
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 |
return true; |
return true; |
227 |
} |
} |
250 |
return false; |
return false; |
251 |
} |
} |
252 |
|
|
|
private void closeQueue(MQQueue queue) |
|
|
{ |
|
|
if (queue != null && queue.IsOpen) |
|
|
{ |
|
|
try |
|
|
{ |
|
|
queue.Close(); |
|
|
} |
|
|
catch (Exception e) |
|
|
{ |
|
|
Console.WriteLine("Error cleaning up queue " + e.Message); |
|
|
} |
|
|
} |
|
|
|
|
|
} |
|
253 |
|
|
254 |
|
|
255 |
|
|