static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); using (ProcessIcon pi = new ProcessIcon()) { NotifyApplicationIcon = pi; pi.Display(); using (DataReceiver Receiver = new DataReceiver()) { Receiver.Start(); // Make sure the application runs! Application.Run(); // if (Receiver != null) { Receiver.Stop(); } } } }
// Process a message private void ProcMessage(string message) { frmLogStatus.LogMessage(new Model.BMDevice.LogViewModel() { LogMessage = "Processing raw data" }); XmlDocument doc = new XmlDocument(); //const ulong invalid_val64 = 0xFFFFFFFFFFFFFFFF; const uint invalid_val = 0xFFFFFFFF; uint year = invalid_val, month = invalid_val, day = invalid_val, hour = invalid_val, minute = invalid_val, second = invalid_val; doc.Load(new StringReader(message)); ReceivedMessageViewModel myMessage = new ReceivedMessageViewModel(); MessageReceivedEventArgs MsgRecdArgs = new MessageReceivedEventArgs() { Message = myMessage, ProcessAcknowledgement = false }; // Terminal type try { myMessage.TerminalType = GetElementValue(doc, "TerminalType"); } catch (System.Exception) { } // Terminal ID try { myMessage.TerminaID = (int)uint.Parse(GetElementValue(doc, "TerminalID")); } catch (System.Exception) { } // Serial Number try { myMessage.DeviceSerialNo = GetElementValue(doc, "DeviceSerialNo"); } catch (System.Exception) { } // Transaction ID try { myMessage.TransactionID = (int)uint.Parse(GetElementValue(doc, "TransID")); } catch (System.Exception) { } // Event try { myMessage.EventType = GetElementValue(doc, "Event"); } catch (System.Exception) { } string msgReply = "<?xml version=\"1.0\"?><Message>"; if (myMessage.EventType == "TimeLog") { // Date and time of log // Year try { year = uint.Parse(GetElementValue(doc, "Year")); } catch (System.Exception) { } // Month try { month = uint.Parse(GetElementValue(doc, "Month")); } catch (System.Exception) { } // Day try { day = uint.Parse(GetElementValue(doc, "Day")); } catch (System.Exception) { } // Hour try { hour = uint.Parse(GetElementValue(doc, "Hour")); } catch (System.Exception) { } // Minute try { minute = uint.Parse(GetElementValue(doc, "Minute")); } catch (System.Exception) { } // Second try { second = uint.Parse(GetElementValue(doc, "Second")); } catch (System.Exception) { } myMessage.LogTime = new DateTime((int)year, (int)month, (int)day, (int)hour, (int)minute, (int)second); // User ID try { myMessage.EmployeeTACode = (int)ulong.Parse(GetElementValue(doc, "UserID")); } catch (System.Exception) { } // Time attendance status try { myMessage.PunchType = GetElementValue(doc, "AttendStat"); } catch (System.Exception) { } // Verification mode try { myMessage.VerificationMode = GetElementValue(doc, "VerifMode"); } catch (System.Exception) { } // Action try { myMessage.Action = GetElementValue(doc, "Action"); } catch (System.Exception) { } //MessageRecieved?.Invoke(MsgRecdArgs); // Concatenate a message to send back msgReply += "<Request>UploadedLog</Request><TransID>" + myMessage.TransactionID.ToString() + "</TransID></Message>"; } else if (myMessage.EventType == "AdminLog") { // Date and time of log // Year try { year = uint.Parse(GetElementValue(doc, "Year")); } catch (System.Exception) { } // Month try { month = uint.Parse(GetElementValue(doc, "Month")); } catch (System.Exception) { } // Day try { day = uint.Parse(GetElementValue(doc, "Day")); } catch (System.Exception) { } // Hour try { hour = uint.Parse(GetElementValue(doc, "Hour")); } catch (System.Exception) { } // Minute try { minute = uint.Parse(GetElementValue(doc, "Minute")); } catch (System.Exception) { } // Second try { second = uint.Parse(GetElementValue(doc, "Second")); } catch (System.Exception) { } myMessage.LogTime = new DateTime((int)year, (int)month, (int)day, (int)hour, (int)minute, (int)second); // User ID try { myMessage.EmployeeTACode = (int)ulong.Parse(GetElementValue(doc, "UserID")); } catch (System.Exception) { } // Action try { myMessage.Action = GetElementValue(doc, "Action"); } catch (System.Exception) { } // Concatenate a message to send back msgReply += "<Request>UploadedLog</Request><TransID>" + myMessage.TransactionID.ToString() + "</TransID></Message>"; MsgRecdArgs.ProcessAcknowledgement = true; } else { MsgRecdArgs.ProcessAcknowledgement = true; // Concatenate a message to send back msgReply += "<Request>KeptAlive</Request><TransID>" + myMessage.TransactionID.ToString() + "</TransID></Message>"; } frmLogStatus.LogMessage(new Model.BMDevice.LogViewModel(myMessage) { LogMessage = "Raw data processed." }); if (myMessage.EventType == "TimeLog") { DataReceiver.Terminal_MessageRecieved(MsgRecdArgs); } //// Display the message on the form //MainForm.theForm.BeginInvoke( // MainForm.theForm.theDelegateAppendMessage, dispMessage); // It ensures this message was saved in database, only then upload read mark for this transaction id. if (MsgRecdArgs.ProcessAcknowledgement && stream.CanWrite) { // Reply the message byte[] buffer = new byte[msgReply.Length + 1]; System.Text.Encoding.ASCII.GetBytes(msgReply).CopyTo(buffer, 0); buffer[msgReply.Length] = 0; // Insert null character as end token of message stream.BeginWrite(buffer, 0, buffer.Length, new AsyncCallback(Terminal.OnSend), this); } }