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);
    }
Beispiel #2
0
    //根据指定queueIndex来获取对应的PointQueue
    public PointQueue GetPointQueueByQueueIndex(int queueIndex)
    {
        PointQueue pointQueue = null;

        PointQueueDict.TryGetValue(queueIndex, out pointQueue);
        return(pointQueue);
    }
Beispiel #3
0
    //获取未被预约的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);
    }
Beispiel #4
0
    //随机获取一个PointQueue队列,并取出该PointQueue中的第一个位置点
    public Point GetFirstPoint2RandomPointQueue()
    {
        PointQueue pointQueue = GetRandomPointQueue();

        if (pointQueue == null)
        {
            return(null);
        }
        return(pointQueue.FirstPoint);
    }
Beispiel #5
0
    //获取未被预约的Point, 返回的是随机的位置点, 这对休息区
    public Point GetRandomNoReservationPointAtRestArea()
    {
        //这里优化处理,因为随机位置点的获取只针对休息区,而休息区仅仅只有一个队列
        PointQueue pointQueue = GetPointQueueByQueueIndex(0); //只为0

        if (pointQueue == null)
        {
            return(null);
        }
        return(pointQueue.GetRandomNoReservationPoint());
    }
Beispiel #6
0
 public void AddPointQueue2Hash(int index, PointQueue pointQueue)
 {
     if (pointQueue == null)
     {
         return;
     }
     if (PointQueueDict.ContainsKey(index) == false)
     {
         PointQueueDict.Add(index, pointQueue);
     }
 }
Beispiel #7
0
        public static void Begin(string key = "default")
        {
            if (PointQueue == null)
            {
                PointQueue = new Dictionary <string, PointStruct>();
            }

            PointQueue.Remove(key);

            SetPoint(key, "begin");
        }
Beispiel #8
0
        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);
            }
        }
Beispiel #9
0
    //随机获取一个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());
    }
Beispiel #10
0
    //获取顺序PointQueue中的顺序EmptyPoint
    public Point GetEmptyPoint()
    {
        if (IsEmpty == false)
        {
            return(null);
        }
        PointQueue pointQueue = GetEmptyPointQueue();

        if (pointQueue == null)
        {
            return(null);
        }
        return(pointQueue.GetEmptyPoint());
    }
Beispiel #11
0
    //随机获取一个PointQueue队列,取出顺序NoReservationPoint
    public Point GetNoReservationPoint2RandomPointQueue()
    {
        if (IsReservation)
        {
            return(null);
        }
        PointQueue pointQueue = GetNoReservationPointQueue4Random();

        if (pointQueue == null)
        {
            return(null);
        }
        return(pointQueue.GetNoReservationPoint());
    }
Beispiel #12
0
    //获取指定队列queueIndex中的空位置点, 顺序
    public Point GetEmptyPointByQueueIndex(int queueIndex)
    {
        if (IsEmpty == false)
        {
            return(null);
        }
        PointQueue pointQueue = GetPointQueueByQueueIndex(queueIndex);

        if (pointQueue == null)
        {
            return(null);
        }
        return(pointQueue.GetEmptyPoint());
    }
Beispiel #13
0
    //获取未被预约的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();
    }
Beispiel #15
0
    //获取未被预约的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);
    }
Beispiel #16
0
        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;
            }
        }
    }
Beispiel #18
0
        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);
    }
Beispiel #20
0
    //获取指定队列的最后一个位置点
    public Point GetLastPoint(int queueIndex)
    {
        PointQueue pointQueue = GetPointQueueByQueueIndex(queueIndex);

        return(pointQueue.LastPoint);
    }
Beispiel #21
0
        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);
            }
        }
Beispiel #22
0
 private static PointQueue CreatePointQueue()
 {
     s_pointQueue = new PointQueue();
     return(s_pointQueue);
 }