private void Monitor(object state) { lock (monitorMutex) { if (!isRunning) { return; } if (neverConnect) { return; } if (!IsConnected) { if (curFileName != null) { curFileName = null; monitorLogEvents.Clear(); } return; } if (curFileName != null) { if (monitorLogEvents.Count == 0) { try { if (File.Exists(curFileName)) { File.Delete(curFileName); } curFileName = null; } catch { } } else { return; } } DirectoryInfo di = new DirectoryInfo("./" + CMSConstants.LOG_DIR); FileInfo[] files = di.GetFiles(); if (files == null || files.Length == 0) { return; } FileInfo oldestFile = null; long fileSmallestNum = Int64.MaxValue; foreach (FileInfo fi in files) { string name = fi.Name; if (!name.StartsWith("x")) { continue; } bool deleteable = name.StartsWith("x"); int periodIndex = name.IndexOf('.'); long serialNum = Int64.Parse(name.Substring(1, periodIndex - 1)); if (serialNum < fileSmallestNum) { fileSmallestNum = serialNum; oldestFile = fi; } } if (oldestFile == null) { return; } try { curFileName = oldestFile.FullName; using (FileStream fileStream = new FileStream(curFileName, FileMode.Open)) { using (GZipStream gStream = new GZipStream(fileStream, CompressionMode.Decompress)) { /* * const int size = 4096; * byte[] bytes = new byte[4096]; * int numBytes; * while ((numBytes = gStream.Read(bytes, 0, size)) > 0) * { * int prevIndex = 0; * for (int i = 0; i < numBytes; i++) * { * byte b = bytes[i]; * * //if(b < 32 && b != 9 && b != 10 && b != 13) * if (b == 31) * { * if (prevIndex < i) * ms.Write(bytes, prevIndex, i - prevIndex); * prevIndex = i + 1; * } * } * if (prevIndex < numBytes) * { * ms.Write(bytes, prevIndex, numBytes - prevIndex); * } * } */ //ms.WriteTo(new FileStream("C:/temp/out.xml", FileMode.Create)); //ms.Position = 0; XmlSerializer xmSer = new XmlSerializer(typeof(CMSLogMessage)); CMSLogMessage logMessage = xmSer.Deserialize(gStream) as CMSLogMessage; if (logMessage == null) { curFileName = null; } foreach (XmlElement logXml in logMessage.Messages) { monitorLogEvents.AddLast(logXml); } } } } catch { } } }
/* * private Queue<CMSLogEvent> logEvents = new Queue<CMSLogEvent>(); * * public void AddLogEvent(CMSLogEvent logEvent) * { * lock (mutex) * { * if (logEvents.Count >= maxNumLogEvents) * logEvents.Dequeue(); * logEvents.Enqueue(logEvent); * } * } */ public bool SendLogEvents(LinkedList <object> logEvents) { if (!isConnected) { return(false); } if (uid == 0) { return(true); } CMSLogMessage message = new CMSLogMessage(); message.Uid = uid; object [] les = null; lock (mutex) { les = logEvents.ToArray(); logEvents.Clear(); } message.Messages = new System.Xml.XmlElement[les.Length]; for (int i = 0; i < les.Length; i++) { if (les[i] is CMSLogEvent) { CMSLogEvent curLogEvent = les[i] as CMSLogEvent; if (curLogEvent.Uid == 0) { curLogEvent.Uid = uid; } message.Messages[i] = curLogEvent.ToXml(); } else if (les[i] is XmlElement) { message.Messages[i] = (XmlElement)les[i]; } } try { CMSAckMessage ackMessage = restClient.SendRequest(endPoint, message, typeof(CMSAckMessage), proxyServer) as CMSAckMessage; if (ackMessage == null) { exception = new Exception("No Response from server"); isConnected = false; return(false); } if (ackMessage.Uid != uid) { exception = new Exception("Server responded with different user id"); isConnected = false; return(false); } return(true); } catch (Exception e) { exception = e; isConnected = false; return(false); } }