private static PointQueueHash YYY(Transform pointStatusTrans, int pointStatus) { if (pointStatusTrans == null) { return(null); } PointQueueHash pointQueueHash = new PointQueueHash(); int queueCount = pointStatusTrans.childCount; // if (pointStatus == (int) PointStatus.WaitTrain_Up || pointStatus == (int) PointStatus.Train_Up || // pointStatus == (int) PointStatus.WaitTrain_Down || pointStatus == (int) PointStatus.Train_Down) { // queueCount = 32; //因为列车只有16扇门 // } // if (pointStatus == (int) PointStatus.Train_Up_Birth || pointStatus == (int) PointStatus.DownTrain_Up || // pointStatus == (int) PointStatus.Train_Down_Birth || pointStatus == (int) PointStatus.DownTrain_Down) { // queueCount = 16; //因为列车只有16扇门 // } for (int i = 0; i < queueCount; i++) { Transform queueTrans = pointStatusTrans.GetChild(i); int queueIndex = int.Parse(queueTrans.gameObject.name); PointQueue pointQueue = ZZZ(queueTrans, queueIndex); pointQueue.m_pointQueueHash = pointQueueHash; pointQueueHash.AddPointQueue2Hash(queueIndex, pointQueue); } return(pointQueueHash); }
//根据指定queueIndex来获取对应的PointQueue public PointQueue GetPointQueueByQueueIndex(int queueIndex) { PointQueue pointQueue = null; PointQueueDict.TryGetValue(queueIndex, out pointQueue); return(pointQueue); }
//获取未被预约的PointQueue, 随机 public PointQueue GetNoReservationPointQueue4Random() { if (IsReservation) { return(null); } List <int> tempList = new List <int>(); for (int i = 0; i < Count; ++i) { tempList.Add(i); } PointQueue pointQueue = null; while ((pointQueue == null || pointQueue.IsReservation == true) && tempList.Count > 0) { int queueIndex = UnityEngine.Random.Range(0, tempList.Count); pointQueue = PointQueueDict[tempList[queueIndex]]; tempList.RemoveAt(queueIndex); } if (pointQueue != null && pointQueue.m_isReservation) { return(null); } return(pointQueue); }
//随机获取一个PointQueue队列,并取出该PointQueue中的第一个位置点 public Point GetFirstPoint2RandomPointQueue() { PointQueue pointQueue = GetRandomPointQueue(); if (pointQueue == null) { return(null); } return(pointQueue.FirstPoint); }
//获取未被预约的Point, 返回的是随机的位置点, 这对休息区 public Point GetRandomNoReservationPointAtRestArea() { //这里优化处理,因为随机位置点的获取只针对休息区,而休息区仅仅只有一个队列 PointQueue pointQueue = GetPointQueueByQueueIndex(0); //只为0 if (pointQueue == null) { return(null); } return(pointQueue.GetRandomNoReservationPoint()); }
public void AddPointQueue2Hash(int index, PointQueue pointQueue) { if (pointQueue == null) { return; } if (PointQueueDict.ContainsKey(index) == false) { PointQueueDict.Add(index, pointQueue); } }
public static void Begin(string key = "default") { if (PointQueue == null) { PointQueue = new Dictionary <string, PointStruct>(); } PointQueue.Remove(key); SetPoint(key, "begin"); }
public static ExitCode Start(Settings settings) { try { StringBuilder startMessage = new StringBuilder(); Ticks startTime = DateTime.UtcNow.Ticks; s_settings = settings ?? throw new ArgumentNullException(nameof(settings)); startMessage.AppendLine(); startMessage.AppendLine($"Establishing forward to InfluxDB HIDS \"{s_settings.InfluxDBEndPoint}\" from STTP data received from \"{s_settings.STTPEndPoint}\":"); startMessage.AppendLine(); startMessage.AppendLine($" Current EXE Path: {FilePath.HostApplicationPath}"); startMessage.AppendLine($" Using Read Key: {s_settings.UseReadKey}"); startMessage.AppendLine($" Window Size: {s_settings.WindowSize:N0}ms"); startMessage.AppendLine($" Token ID: {s_settings.TokenID}"); startMessage.AppendLine($" Point Bucket: {s_settings.PointBucket}"); startMessage.AppendLine($" Organization ID: {s_settings.OrganizationID}"); startMessage.AppendLine($" Filter Expression: {s_settings.FilterExpression}"); startMessage.AppendLine(); startMessage.AppendLine($"Press any key to stop..."); StatusMessage(startMessage.ToString()); s_displayInterval = TimeSpan.FromMilliseconds(s_settings.WindowSize * 2).Ticks; using PointQueue pointQueue = CreatePointQueue(); using API hidsAPI = ConnectHIDSClient(); using SubscriberHandler subscriber = ConnectSTTPClient(); if (s_settings.UseReadKey) { Console.ReadKey(); } else { Thread.Sleep(Timeout.Infinite); } subscriber.Disconnect(); hidsAPI.Disconnect(); StatusMessage($"Total process runtime: {(DateTime.UtcNow.Ticks - startTime).ToElapsedTimeString(3)}"); return(ExitCode.Success); } catch (Exception ex) { ErrorMessage($"ERROR: {ex.Message}"); return(ExitCode.Exception); } }
//随机获取一个PointQueue队列(从一个QueueIndex指定范围中),取出顺序NoReservationPoint public Point GetNoReservationPoint2RandomPointQueue(int minQueueIndex, int maxQueueIndex) { if (IsReservation) { return(null); } PointQueue pointQueue = GetNoReservationPointQueue4Random(minQueueIndex, maxQueueIndex); if (pointQueue == null) { return(null); } return(pointQueue.GetNoReservationPoint()); }
//获取顺序PointQueue中的顺序EmptyPoint public Point GetEmptyPoint() { if (IsEmpty == false) { return(null); } PointQueue pointQueue = GetEmptyPointQueue(); if (pointQueue == null) { return(null); } return(pointQueue.GetEmptyPoint()); }
//随机获取一个PointQueue队列,取出顺序NoReservationPoint public Point GetNoReservationPoint2RandomPointQueue() { if (IsReservation) { return(null); } PointQueue pointQueue = GetNoReservationPointQueue4Random(); if (pointQueue == null) { return(null); } return(pointQueue.GetNoReservationPoint()); }
//获取指定队列queueIndex中的空位置点, 顺序 public Point GetEmptyPointByQueueIndex(int queueIndex) { if (IsEmpty == false) { return(null); } PointQueue pointQueue = GetPointQueueByQueueIndex(queueIndex); if (pointQueue == null) { return(null); } return(pointQueue.GetEmptyPoint()); }
//获取未被预约的Point, 返回的首先是队列最后边没有被预约的位置点 public Point GetReverseNoReservationPointByQueueIndex(int queueIndex) { if (IsReservation) { return(null); } PointQueue pointQueue = GetPointQueueByQueueIndex(queueIndex); if (pointQueue == null) { return(null); } return(pointQueue.GetReverseNoReservationPoint()); }
private static void CCC(PointQueueHash pointQueueHash) { if (pointQueueHash == null) { return; } var enumerator = pointQueueHash.PointQueueDict.GetEnumerator(); while (enumerator.MoveNext()) { PointQueue pointQueue = enumerator.Current.Value; DDD(pointQueue); } enumerator.Dispose(); }
//获取未被预约的PointQueue, 顺序 public PointQueue GetNoReservationPointQueue() { if (IsReservation) { return(null); } var enumerator = PointQueueDict.GetEnumerator(); while (enumerator.MoveNext()) { PointQueue pointQueue = enumerator.Current.Value; if (pointQueue.IsProhibited == false && pointQueue.IsReservation == false) { return(pointQueue); } } enumerator.Dispose(); return(null); }
public static void Clear(string key = "default") { if (!IsCheck()) { return; } if (PointQueue == null) { PointQueue = new Dictionary <string, PointStruct>(); } if (!PointQueue.Keys.Contains(key)) { PointQueue.Add(key, new PointStruct() { Key = key, LastTick = -1, Script = string.Empty }); } }
private static void DDD(PointQueue pointQueue) { if (pointQueue == null) { return; } int startIndex = 0; int endIndex = pointQueue.Count - 1; Point nextPoint = null; for (int i = 0; i < pointQueue.Count; ++i) { Point point = pointQueue.PointList[i]; if ((startIndex == endIndex)) { point.m_prePoint = null; point.m_nextPoint = null; } else if (startIndex == i) { //表示是队列的第一个点 nextPoint = point; point.m_nextPoint = null; } else if (endIndex == i) { //表示是队列的最后一个点 point.m_nextPoint = nextPoint; point.m_prePoint = null; } else { //表示是除队列首尾点的其他所有点 nextPoint.m_prePoint = point; point.m_nextPoint = nextPoint; nextPoint = point; } } }
public static string GetScript(string key = "default", bool setFinish = false) { if (!IsCheck()) { return(""); } if (!PointQueue.Keys.Contains(key)) { PointQueue.Add(key, new PointStruct() { Key = key, LastTick = -1, Script = string.Empty }); } if (setFinish) { SetPoint(key, "finish"); } try { return("<script>try{" + PointQueue[key].Script.ToString() + "; chart.draw('" + key + "');}catch(e){}</script>"); } catch { } return(""); }
private static PointQueue ZZZ(Transform queueTrans, int queueIndex) { if (queueTrans == null) { return(null); } PointQueue pointQueue = new PointQueue(); pointQueue.m_queueIndex = queueIndex; int pointCount = queueTrans.childCount; for (int i = 0; i < pointCount; i++) { Transform pointTrans = queueTrans.GetChild(i); string pointName = pointTrans.gameObject.name; pointName = pointName.Substring(0, pointName.Length - 6); PointStatus pointStatus = (PointStatus)System.Enum.Parse(typeof(PointStatus), pointName); bool isRestAreaPoint = false; if (pointName.Contains("RestArea")) { isRestAreaPoint = true; } bool isDeviceCtrl = false; if (i == 0 && (pointName == "EnterCheckTicket" || pointName == "ExitCheckTicket" || pointName == "WaitTrain_Up" || pointName == "WaitTrain_Down" || pointName == "Train_Up_Birth" || pointName == "Train_Down_Birth")) { isDeviceCtrl = true; } float posX = pointTrans.position.x; float posY = pointTrans.position.y; float posZ = pointTrans.position.z; float eulerAngleX = pointTrans.eulerAngles.x; float eulerAngleY = pointTrans.eulerAngles.y; float eulerAngleZ = pointTrans.eulerAngles.z; Point point = new Point() { m_belongPointQueue = pointQueue, m_queueIndex = queueIndex, m_pointStatus = pointStatus, m_isReservation = false, //未提前被预约 m_isEmpty = true, //为空 m_isRestAreaPoint = isRestAreaPoint, m_isDeviceCtrl = isDeviceCtrl, PosX = posX, PosY = posY, PosZ = posZ, EulerAngleX = eulerAngleX, EulerAngleY = eulerAngleY, EulerAngleZ = eulerAngleZ, }; pointQueue.AddPoint2Queue(point); // PointBehaviour pb = pointTrans.GetComponent<PointBehaviour>(); // point.m_pb = pb; // point.m_pb.IsRestArea = isRestAreaPoint; } return(pointQueue); }
//获取指定队列的最后一个位置点 public Point GetLastPoint(int queueIndex) { PointQueue pointQueue = GetPointQueueByQueueIndex(queueIndex); return(pointQueue.LastPoint); }
public static void SetPoint(string key = "default", string details = "", bool isLogEvent = true) { if (!IsCheck()) { return; } if (details == "begin") { Clear(key); } Indexer++; if (PointQueue == null) { PointQueue = new Dictionary <string, PointStruct>(); } if (!PointQueue.Keys.Contains(key)) { PointQueue.Add(key, new PointStruct() { Key = key, LastTick = -1, Script = string.Empty }); } if (!PointQueue.Keys.Contains(key) || PointQueue[key].LastTick == -1) { PointQueue[key].LastTick = DateTime.Now.Ticks; } if (details == "begin") { PointQueue[key].StartTick = PointQueue[key].LastTick; } var msValue = DateTime.Now.Ticks - PointQueue[key].LastTick; var msStartValue = DateTime.Now.Ticks - PointQueue[key].StartTick; var value = new DateTime(msValue); var st = (value.Minute * 60 + value.Second).ToString("00") + "." + value.Millisecond; var mvalue = new DateTime(msStartValue); var st1 = (mvalue.Minute * 60 + mvalue.Second).ToString("00") + "." + mvalue.Millisecond; PointQueue[key].LastTick = DateTime.Now.Ticks; var script = ""; try { script = PointQueue[key].Script; } catch { } if (script == "") { script = "chart.add('" + key + "');"; } script += "chart.add('" + key + "'," + msValue + ",'" + (st == "00.0" ? " " : st) + "<div class=dt>" + details + "<hr/>" + st1 + " - " + Indexer.ToString() + "</div>');"; PointQueue[key].Script = script; if (isLogEvent) { LogEvent(key + " >> " + details); } }
private static PointQueue CreatePointQueue() { s_pointQueue = new PointQueue(); return(s_pointQueue); }