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