public static void WorkerThread(object sender, ElapsedEventArgs e) { // attempt to set the sync, if another of us is running, just exit if (Interlocked.CompareExchange(ref m_TimerSync, 1, 0) != 0) { return; } // wrap in a try-catch so we can release our interlock if something fails try { EventsResponse response = new EventsRequest(1007).Execute(); long timestamp = (long)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalMilliseconds; HashSet <EventState> metaEvents = new HashSet <EventState>(response.Events.Where(es => MetaEventDefinitions.EventList.Contains(es.EventId))); foreach (MetaEvent meta in MetaEventDefinitions.MetaEvents) { if (m_EventStatus.ContainsKey(meta.Id)) { int stageId = meta.GetStageId(metaEvents, m_EventStatus[meta.Id].StageId); MetaEventStatus oldevs = m_EventStatus[meta.Id]; MetaEventStatus newevs = new MetaEventStatus() { Id = meta.Id, StageId = stageId, StageTypeEnum = (stageId >= 0 ? meta.Stages.ElementAt(stageId).Type : MetaEventStage.StageType.Invalid), Timestamp = (long)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalMilliseconds }; if (stageId < 0 && oldevs.StageId >= 0) { newevs.StageName = meta.Stages.ElementAt(oldevs.StageId).IsFailed(metaEvents).ToString(); } if (oldevs.StageTypeEnum == MetaEventStage.StageType.Invalid && newevs.StageTypeEnum != MetaEventStage.StageType.Invalid) { DateTime epoch = new DateTime(1970, 1, 1); DateTime oldTIme = epoch.AddMilliseconds((double)oldevs.Timestamp); DateTime newTIme = epoch.AddMilliseconds((double)newevs.Timestamp); EventSpawnData spawnData = new EventSpawnData() { ev_id = meta.Id, spawn_time = newTIme - oldTIme, failed = oldevs.StageName }; m_Data.Add(spawnData); } if (oldevs.StageId != newevs.StageId) { m_EventStatus[meta.Id] = newevs; } } } } catch (Exception) { } // reset sync to 0 Interlocked.Exchange(ref m_TimerSync, 0); }
public static void WorkerThread(object sender, ElapsedEventArgs e) { // attempt to set the sync, if another of us is running, just exit if (Interlocked.CompareExchange(ref m_TimerSync, 1, 0) != 0) return; // wrap in a try-catch so we can release our interlock if something fails try { EventsResponse response = new EventsRequest(1007).Execute(); long timestamp = (long)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalMilliseconds; HashSet<EventState> metaEvents = new HashSet<EventState>(response.Events.Where(es => MetaEventDefinitions.EventList.Contains(es.EventId))); foreach (MetaEvent meta in MetaEventDefinitions.MetaEvents) { if (m_EventStatus.ContainsKey(meta.Id)) { int stageId = meta.GetStageId(metaEvents, m_EventStatus[meta.Id].StageId); MetaEventStatus oldevs = m_EventStatus[meta.Id]; MetaEventStatus newevs = new MetaEventStatus() { Id = meta.Id, StageId = stageId, StageTypeEnum = (stageId >= 0 ? meta.Stages.ElementAt(stageId).Type : MetaEventStage.StageType.Invalid), Timestamp = (long)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalMilliseconds }; if (stageId < 0 && oldevs.StageId >= 0) newevs.StageName = meta.Stages.ElementAt(oldevs.StageId).IsFailed(metaEvents).ToString(); if (oldevs.StageTypeEnum == MetaEventStage.StageType.Invalid && newevs.StageTypeEnum != MetaEventStage.StageType.Invalid) { DateTime epoch = new DateTime(1970, 1, 1); DateTime oldTIme = epoch.AddMilliseconds((double)oldevs.Timestamp); DateTime newTIme = epoch.AddMilliseconds((double)newevs.Timestamp); EventSpawnData spawnData = new EventSpawnData() { ev_id = meta.Id, spawn_time = newTIme - oldTIme, failed = oldevs.StageName }; m_Data.Add(spawnData); } if (oldevs.StageId != newevs.StageId) { m_EventStatus[meta.Id] = newevs; } } } } catch (Exception) { } // reset sync to 0 Interlocked.Exchange(ref m_TimerSync, 0); }