private static senderInfo extractTimeStampValues(senderInfo si) { // 16-12-2016 13:28:35.000 int currentPtrStart = 0; int currentPtrEnd = si.time.IndexOf('-', currentPtrStart); si.extractedTimestamp.day = si.time.Substring(currentPtrStart, currentPtrEnd - currentPtrStart); // Read day // Update currentPtrStart = currentPtrEnd + 1; currentPtrEnd = si.time.IndexOf('-', currentPtrStart); si.extractedTimestamp.month = si.time.Substring(currentPtrStart, currentPtrEnd - currentPtrStart); // Read month // Update currentPtrStart = currentPtrEnd + 1; currentPtrEnd = si.time.IndexOf(' ', currentPtrStart); si.extractedTimestamp.year = si.time.Substring(currentPtrStart, currentPtrEnd - currentPtrStart); // Read year // Update currentPtrStart = currentPtrEnd + 1; currentPtrEnd = si.time.IndexOf(':', currentPtrStart); si.extractedTimestamp.hour = si.time.Substring(currentPtrStart, currentPtrEnd - currentPtrStart); // Read hour // Update currentPtrStart = currentPtrEnd + 1; currentPtrEnd = si.time.IndexOf(':', currentPtrStart); si.extractedTimestamp.minute = si.time.Substring(currentPtrStart, currentPtrEnd - currentPtrStart); // Read minute // Update currentPtrStart = currentPtrEnd + 1; currentPtrEnd = si.time.IndexOf('.', currentPtrStart); si.extractedTimestamp.second = si.time.Substring(currentPtrStart, currentPtrEnd - currentPtrStart); // Read second // Update currentPtrStart = currentPtrEnd + 1; //currentPtrEnd = si.time.IndexOf('.', currentPtrStart); si.extractedTimestamp.milisecond = si.time.Substring(currentPtrStart, si.time.Length - currentPtrStart); // Read milisecond return(si); }
private void WriteOnDisplayAndStorageDBDown(senderInfo si) { string MAC = si.mac; string alarmName = si.name; string status = si.value.ToString(); string timeStamp = si.time; string packetNum = si.seq; string messageToAppend = MAC + " " + si.trueIPAddress + " " + alarmName + " " + status + " " + timeStamp + " " + packetNum + " DB is down\r\n"; formMain.SetText(messageToAppend); Storage.UpdateFolderTimeStamp(); // Update file, in case it is new day string messageToAppendTextfile = MAC + " " + si.trueIPAddress + " " + alarmName + " " + status + " " + timeStamp + " " + packetNum + " DB is down"; Storage.AppendTextToFile(messageToAppendTextfile); }
public static void InsertMessageInDatabase(senderInfo s, string connectionString) { string tempTimeStamp = "TO_TIMESTAMP('" + s.extractedTimestamp.year + "." + s.extractedTimestamp.month + "." + s.extractedTimestamp.day + " " + s.extractedTimestamp.hour + ":" + s.extractedTimestamp.minute + ":" + s.extractedTimestamp.second + "." + s.extractedTimestamp.milisecond + "','yyyy.MM.dd HH24:mi.ss.ff')"; string command1 = "INSERT INTO EVENT_HISTORY (LOCATION_ID, EVENT_ID, NAME, EVENT_COMMENT, VALUE, VALID, TIME) VALUES('" + s.locationID + "','" + s.address + "','" + s.name + "','" + s.comment + "','" + s.value.ToString() + "','" + s.valid + "'," + tempTimeStamp + ")"; OracleConnection conn = new OracleConnection(connectionString); conn.Open(); OracleCommand cmd1 = new OracleCommand(command1); cmd1.Connection = conn; cmd1.CommandType = System.Data.CommandType.Text; OracleDataReader dr = cmd1.ExecuteReader(); // Second task, delete row string command2 = "DELETE FROM EVENT_PORTRAIT WHERE LOCATION_ID = " + s.locationID + " AND EVENT_ID = " + s.address; OracleCommand cmd2 = new OracleCommand(command2); cmd2.Connection = conn; cmd2.CommandType = System.Data.CommandType.Text; dr = cmd2.ExecuteReader(); // Third task, write row, agian string command3 = "INSERT INTO EVENT_PORTRAIT (LOCATION_ID, EVENT_ID, NAME, EVENT_COMMENT, VALUE, VALID, TIME) VALUES('" + s.locationID + "','" + s.address + "','" + s.name + "','" + s.comment + "','" + s.value.ToString() + "','" + s.valid + "'," + tempTimeStamp + ")"; OracleCommand cmd3 = new OracleCommand(command3); cmd3.Connection = conn; cmd3.CommandType = System.Data.CommandType.Text; dr = cmd3.ExecuteReader(); conn.Close(); }
public static senderInfo ProcessAlarmResponseXML(string s) { XmlDocument doc = new XmlDocument(); senderInfo si = new senderInfo(); si.error = false; // Create the XmlDocument. try { doc.LoadXml(s); } catch (Exception) { si.errorCode = "Parsing xml error"; si.error = true; return(si); } // extract information from document //get alarm name string tagText = doc.GetElementsByTagName("name")[0].InnerText; si.name = tagText; // get address ???? string tagAddress = doc.GetElementsByTagName("address")[0].InnerText; si.address = Convert.ToInt32(tagAddress); // Get value string tagValue = doc.GetElementsByTagName("value")[0].InnerText; si.value = Convert.ToInt32(tagValue); //Get timestamp string tagTime = doc.GetElementsByTagName("time")[0].InnerText; si.time = tagTime; // extract from header XmlNodeList node = doc.GetElementsByTagName("header"); // Get sequence number string seqString = node[0].Attributes["seq"].Value; si.seq = seqString; //Get MAC address string macString = node[0].Attributes["mac"].Value; si.mac = macString; // Others si.ip = node[0].Attributes["ip"].Value; si.senderError = node[0].Attributes["error"].Value; si.crc = node[0].Attributes["crc"].Value; si.valid = doc.GetElementsByTagName("valid")[0].InnerText; si.comment = doc.GetElementsByTagName("comment")[0].InnerText; // form ACK packet (with packet stamp number) string packetStamp = formPacketStamp(seqString); si.seq = packetStamp; si = extractTimeStampValues(si); // Fill extracted time struct return(si); }
} // End constructor public void StartReceive() { try { using (socket) { formMain.SetStatusText("Status: Running"); formMain.ChangeButtonState(true); while (true) { byte[] data = new byte[1024]; if (socket.Available > 0) { IPEndPoint tempasd = new IPEndPoint(IPAddress.Any, 0); data = socket.Receive(ref tempasd); if (data.GetLength(0) == 4) // Is this get status response { MessageProcesser.ProcessStatusResponse(data); } else // For now it is only received Alarm { string xmlData = System.Text.Encoding.Default.GetString(data); senderInfo si = new senderInfo(); // Assign default value si.errorCode = "none"; si = MessageProcesserXML.ProcessAlarmResponseXML(xmlData); if (si.error) { continue; // Something went wrong, abort } si.trueIPAddress = HashtableAndDatabaseClass.FetchIPFromMac(si.mac); if (si.trueIPAddress == null) { continue; // Hashtable doesn't countain that MAC, abort everything (writing in log and display too) } si.locationID = HashtableAndDatabaseClass.FetchLocationIDFromMac(si.mac); // we know that we have that key, so dont need to check if (!formMain.GetDebugStatus()) { // If debug checkbox is not checked try to write to database try { HashtableAndDatabaseClass.InsertMessageInDatabase(si, Storage.ReadConnectionString()); formMain.SetDBStatusText("DB Status: OK"); } catch (Exception) { //WriteOnDisplayAndStorage(si); WriteOnDisplayAndStorageDBDown(si); formMain.SetDBStatusText("DB Status: DB is down"); // Database is down, update status continue; } } // Write log and to display WriteOnDisplayAndStorage(si); // Will use information stored on si structure // Form responce byte[] finalMessage = Encoding.ASCII.GetBytes("ACK " + si.seq); si.trueIPAddress = si.trueIPAddress.Trim(); // Some people use whitespaces infront of IP :( try { sender = new IPEndPoint(IPAddress.Parse(si.trueIPAddress), defaultUDPSendingPort); socket.Send(finalMessage, finalMessage.Length, sender); } catch { Console.WriteLine("IP from database is corrupted \n"); FormCustomConsole.AddText("IP from database is corrupted" + Environment.NewLine); } } // End else from get data length } // End if (socket.Available > 0) if (Kill == true) { if (socket.Available > 0) { Console.WriteLine("More data needs to be read first \n"); continue; } Kill = false; Console.WriteLine("Phase Exit \n"); FormCustomConsole.AddText("Phase Exit" + Environment.NewLine); formMain.SetStatusText("Status: Stopped"); isActive = false; return; } Thread.Sleep(10); } // While } // End using(socket) } // End try catch (Exception e) { Console.WriteLine(e.ToString()); Console.WriteLine("Something went wrong with server \n"); FormCustomConsole.AddText("Something went wrong with server" + Environment.NewLine); formMain.SetStatusText("Status: Error"); isActive = false; } } // StartReceive