コード例 #1
0
        private static String[] GetMissingScript(ScriptTB ScriptToCheck, List <KeyValuePair <String, ScriptTB> > BlockScript)
        {
            try
            {
                Boolean[] ScriptReciveState = new Boolean[ScriptToCheck.CommandCounter.Value];
                ScriptReciveState[ScriptToCheck.ExecutionNumber - 1] = true;

                foreach (KeyValuePair <String, ScriptTB> ThisScript in BlockScript)
                {
                    ScriptReciveState[ThisScript.Value.ExecutionNumber - 1] = true;
                }

                List <String> Missing = new List <String>();
                for (int i = 0; i < ScriptReciveState.Count(); i++)
                {
                    if (!ScriptReciveState[i])
                    {
                        Missing.Add((i + 1).ToString());
                    }
                }

                return(Missing.ToArray());
            }
            catch
            {
            }

            return(null);
        }
コード例 #2
0
        public static void SendScriptToStation(ScriptTB CompletedScript)
        {
            STATIONNAME     DestinationStation = STATIONNAME.NULL;
            List <ScriptTB> ScriptArr          = ScriptDBBuffer.Values.Where(Item => Item.BlockID == CompletedScript.BlockID).ToList();

            ScriptStructure[] StructureArr = ConvertScriptTBToScriptStructure(ScriptArr);

            foreach (ScriptTB ThisScript in ScriptArr)
            {
                DestinationStation     = TTCSHelper.StationStrConveter(ThisScript.StationName);
                ThisScript.ScriptState = SCRIPTSTATE.WAITINGSERVER.ToString();

                UpdateScriptToMonitoring(ThisScript);
            }

            StationHandler ThisStation = AstroData.GetStationObject(DestinationStation);

            if (ThisStation.IsStationConnected)
            {
                StructureArr.OrderBy(Item => Item.ExecutionNumber);
                AstroData.ScriptHandler(DestinationStation, StructureArr);

                foreach (ScriptTB ThisScript in ScriptArr)
                {
                    ThisScript.ScriptState = SCRIPTSTATE.SENDINGTOSTATION.ToString();
                    UpdateScriptToMonitoring(ThisScript);
                }
            }
        }
コード例 #3
0
 private static void RemoveScriptToMonitoring(ScriptTB NewScript)
 {
     if (ScriptMonitoring != null)
     {
         MethodInfo MInfo = ScriptMonitoring.GetType().GetMethod("RemoveScriptFromGrid");
         MInfo.Invoke(ScriptMonitoring, new Object[] { NewScript });
     }
 }
コード例 #4
0
 private static void UpdateScriptToMonitoring(ScriptTB ThisScript)
 {
     if (ScriptMonitoring != null)
     {
         MethodInfo MInfo = ScriptMonitoring.GetType().GetMethod("UpdateScriptGrid");
         MInfo.Invoke(ScriptMonitoring, new Object[] { ThisScript });
     }
 }
コード例 #5
0
        public static void InsertScript(ScriptTB ThisScript)
        {
            db = RefreshDB();

            int Temp = db.UserTBs.Count();

            db.ScriptTBs.Add(ThisScript);
        }
コード例 #6
0
 public static void DeleteScript(ScriptTB ThisScript)
 {
     try
     {
         db = RefreshDB();
         db.ScriptTBs.Remove(ThisScript);
     }
     catch { }
 }
コード例 #7
0
        private static Boolean BlockExecuteCompleted(String BlockID)
        {
            ScriptTB ThisScript = ScriptDBBuffer.FirstOrDefault(Item => Item.Value.BlockID == BlockID && Item.Value.ScriptState != "EXECUTED").Value;

            if (ThisScript != null)
            {
                return(false);
            }

            return(true);
        }
コード例 #8
0
        public static void UpdateScriptFromStation(String BlockID, String BlockName, String StationName, DateTime ExecutionTimeStart, DateTime ExecutionTimeEnd, int CommandCounter, int ExecutionNumber, String DeviceName, String DeviceCategory, String CommandName, String Owner, int DelayTime, String Parameter, String ScriptState)
        {
            ScriptTB ExistingScript = ScriptDBBuffer.FirstOrDefault(Item => Item.Value.BlockID == BlockID && Item.Value.ExecutionNumber == ExecutionNumber).Value;

            if (ExistingScript != null)
            {
                ExistingScript.ScriptState = ScriptState;
                UpdateScriptToMonitoring(ExistingScript);
                DatabaseSynchronization.ScriptSaveChange(false);
            }
        }
コード例 #9
0
        private static Boolean IsEqualScript(ScriptTB OlbScript, ScriptTB NewScript)
        {
            if (OlbScript.CommandCounter != NewScript.CommandCounter)
            {
                return(false);
            }

            if (OlbScript.CommandName != NewScript.CommandName)
            {
                return(false);
            }

            if (OlbScript.DelayTime != NewScript.DelayTime)
            {
                return(false);
            }

            if (OlbScript.DeviceCategory != NewScript.DeviceCategory)
            {
                return(false);
            }

            if (OlbScript.DeviceName != NewScript.DeviceName)
            {
                return(false);
            }

            if (OlbScript.ExecutionTimeEnd != NewScript.ExecutionTimeEnd)
            {
                return(false);
            }

            if (OlbScript.ExecutionTimeStart != NewScript.ExecutionTimeStart)
            {
                return(false);
            }

            if (OlbScript.Owner != NewScript.Owner)
            {
                return(false);
            }

            if (OlbScript.Parameter != NewScript.Parameter)
            {
                return(false);
            }

            if (OlbScript.StationName != NewScript.StationName)
            {
                return(false);
            }

            return(true);
        }
コード例 #10
0
        private static Boolean ResponseToStation(ScriptBuffer ThisBuffer)
        {
            Boolean IsSend = false;

            if (ScriptDBBuffer.Count > 0)
            {
                List <ScriptTB> WaitingScriptList = ScriptDBBuffer.Values.Where(Item => Item.ScriptState == "CREATED" || Item.ScriptState == "WAITINGSERVER" && Item.ExecutionNumber == 1).ToList();

                if (WaitingScriptList.Count > 0)
                {
                    while (WaitingScriptList.Count > 0)
                    {
                        String Message = "";

                        Boolean IsAllScriptRecived = IsBlockComplete(WaitingScriptList[0], out Message);
                        if (IsAllScriptRecived)
                        {
                            if (!VerifyTotalExecutionTime(WaitingScriptList[0]))
                            {
                                if (ThisBuffer != null)
                                {
                                    WebSockets.ReturnScriptResult(ThisBuffer.WSConnection, ThisBuffer.Script.BlockName, ThisBuffer.Script.BlockID, ThisBuffer.Script.ExecutionNumber.ToString(), ThisBuffer.Script.CommandName.ToString(), "All script is sending to client.", "Script_Success");
                                }

                                List <ScriptTB> InValidScript = ScriptDBBuffer.Values.Where(Item => Item.BlockID == WaitingScriptList[0].BlockID).ToList();

                                foreach (ScriptTB ThisScript in InValidScript)
                                {
                                    ScriptTB TempScript = null;
                                    ScriptDBBuffer.TryRemove(ThisScript.BlockID + ThisScript.ExecutionNumber, out TempScript);
                                    DatabaseSynchronization.DeleteScript(TempScript);

                                    RemoveScriptToMonitoring(TempScript);
                                }
                                return(false);
                            }

                            SendScriptToStation(WaitingScriptList[0]);
                            WaitingScriptList.RemoveAll(Item => Item.BlockID == WaitingScriptList[0].BlockID);
                            IsSend = true;
                        }
                        else
                        {
                            WaitingScriptList.RemoveAt(0);
                        }
                    }
                }
            }

            return(IsSend);
        }
コード例 #11
0
        public static Boolean RemoveScript(String BlockID, int ExecutionNumber)
        {
            try
            {
                ScriptTB ThisBuffer = ScriptDBBuffer.FirstOrDefault(Item => Item.Value.BlockID == BlockID && Item.Value.ExecutionNumber == ExecutionNumber).Value;
                ScriptDBBuffer.TryRemove(ThisBuffer.BlockID + ThisBuffer.ExecutionNumber, out ThisBuffer);
                DatabaseSynchronization.DeleteScript(ScriptDBBuffer.FirstOrDefault(Item => Item.Value.BlockID == BlockID && Item.Value.ExecutionNumber == ExecutionNumber).Value);
                DatabaseSynchronization.ScriptSaveChange(true);

                return(true);
            }
            catch
            {
                return(false);
            }
        }
コード例 #12
0
        private static Boolean IsBlockComplete(ScriptTB ScriptToCheck, out String Message)
        {
            List <KeyValuePair <String, ScriptTB> > BlockScript = ScriptDBBuffer.Where(Item => Item.Value.BlockID == ScriptToCheck.BlockID).ToList();

            String[] MissingScript = GetMissingScript(ScriptToCheck, BlockScript);

            if (MissingScript != null && MissingScript.Count() > 0)
            {
                Message = "Block Name : " + ScriptToCheck.BlockName + ", Script : " + ScriptToCheck.ExecutionNumber + " successful add to the system but waiting for script number (" + String.Join(", ", MissingScript) + ")";
                return(false);
            }
            else
            {
                Message = "Block Name : " + ScriptToCheck.BlockName + ", Script : " + ScriptToCheck.ExecutionNumber + " successful add to the system. All script is ready to send.";
                return(true);
            }
        }
コード例 #13
0
        private static Boolean RemoveExpireScript()
        {
            Boolean IsRemove = false;

            foreach (ScriptTB ThisScript in ScriptDBBuffer.Values)
            {
                DateTime ThisTime = DateTime.UtcNow;
                if (ThisScript.ExecutionTimeStart.Value < ThisTime.AddDays(ScriptLifeTimeValue * -1))
                {
                    ScriptTB TempScript = null;
                    ScriptDBBuffer.TryRemove(ThisScript.BlockID + ThisScript.ExecutionNumber, out TempScript);

                    IsRemove = true;
                    RemoveScriptToMonitoring(TempScript);
                }
            }

            return(IsRemove);
        }
コード例 #14
0
        private static Boolean VerifyTotalExecutionTime(ScriptTB CheckScript)
        {
            List <ScriptTB> ScriptList = ScriptDBBuffer.Values.Where(Item => Item.BlockID == CheckScript.BlockID).ToList();

            if (ScriptList != null && ScriptList.Count > 0)
            {
                TimeSpan DriffTime           = ScriptList[0].ExecutionTimeEnd.Value - ScriptList[0].ExecutionTimeStart.Value;
                int      TotalTimeStartToEnd = Convert.ToInt32(DriffTime.TotalSeconds);
                int      TotalTime           = 0;

                foreach (ScriptTB ThisScript in ScriptList)
                {
                    TotalTime = TotalTime + ThisScript.DelayTime.Value;
                }

                if (TotalTime <= TotalTimeStartToEnd)
                {
                    return(true);
                }
            }

            return(false);
        }
コード例 #15
0
        private static void UpdateExecutionState(STATIONNAME StationName, Object Value)
        {
            String[] ValueArr        = Value.ToString().Split(new char[] { ',' });
            String   BlockID         = ValueArr[0];
            int      ExecutionNumber = Convert.ToInt32(ValueArr[1]);
            String   ScriptState     = ValueArr[2];

            ScriptTB ScriptDB = ScriptDBBuffer.FirstOrDefault(Item => Item.Value.BlockID == BlockID && Item.Value.ExecutionNumber == ExecutionNumber).Value;

            if (ScriptDB == null)
            {
                return;
            }

            ScriptDB.ScriptState = ScriptState;
            DatabaseSynchronization.ScriptSaveChange(true);

            if (ScriptState == "ENDTIMEPASSED")
            {
                Console.WriteLine("ENDTIMEPASSED");
            }

            UpdateScriptToMonitoring(ScriptDB);
        }
コード例 #16
0
        private static void ReadScriptFromBuffer()
        {
            Task TTCSTask = Task.Run(() =>
            {
                Boolean IsDatabaseUpdate = false;
                while (IsScriptActive)
                {
                    ScriptBuffer ThisBuffer = null;
                    if (NewScriptBuffer.TryDequeue(out ThisBuffer))
                    {
                        ScriptTB ExistingScript = ScriptDBBuffer.FirstOrDefault(Item => Item.Value.BlockName == ThisBuffer.Script.BlockName && Item.Value.ScriptState != "EXECUTED").Value;
                        if (ExistingScript == null)  //New block name
                        {
                            ThisBuffer.Script.TargetID    = TTCSHelper.GenNewID();
                            ThisBuffer.Script.BlockID     = ThisBuffer.Script.TargetID;
                            ThisBuffer.Script.ScriptState = "CREATED";
                            ScriptDBBuffer.TryAdd(ThisBuffer.Script.BlockID + ThisBuffer.Script.ExecutionNumber, ThisBuffer.Script);

                            DatabaseSynchronization.InsertScript(ThisBuffer.Script);
                            IsDatabaseUpdate = true;
                            AddScriptToMonitoring(ThisBuffer.Script);
                        }
                        else if (ExistingScript.ScriptState != "EXECUTING") //Existing block name
                        {
                            ScriptTB ExistingBlockScript = ScriptDBBuffer.FirstOrDefault(Item => Item.Value.BlockName == ThisBuffer.Script.BlockName && Item.Value.ExecutionNumber == ThisBuffer.Script.ExecutionNumber && Item.Value.ScriptState != "EXECUTED").Value;

                            if (ExistingBlockScript == null)  //Add new script to the same BlockName
                            {
                                ExistingBlockScript         = ThisBuffer.Script;
                                ExistingBlockScript.BlockID = ExistingScript.BlockID;
                                ScriptDBBuffer.TryAdd(ExistingBlockScript.BlockID + ExistingBlockScript.ExecutionNumber, ExistingBlockScript);

                                DatabaseSynchronization.InsertScript(ExistingBlockScript);
                                IsDatabaseUpdate = true;
                                AddScriptToMonitoring(ExistingBlockScript);
                            }
                            else
                            {
                                if (!IsEqualScript(ExistingBlockScript, ThisBuffer.Script))  //Update existing BlockName
                                {
                                    ExistingBlockScript.CommandCounter     = ThisBuffer.Script.CommandCounter;
                                    ExistingBlockScript.CommandName        = ThisBuffer.Script.CommandName;
                                    ExistingBlockScript.DelayTime          = ThisBuffer.Script.DelayTime;
                                    ExistingBlockScript.DeviceCategory     = ThisBuffer.Script.DeviceCategory;
                                    ExistingBlockScript.DeviceName         = ThisBuffer.Script.DeviceName;
                                    ExistingBlockScript.ExecutionTimeEnd   = ThisBuffer.Script.ExecutionTimeEnd;
                                    ExistingBlockScript.ExecutionTimeStart = ThisBuffer.Script.ExecutionTimeStart;
                                    ExistingBlockScript.Owner       = ThisBuffer.Script.Owner;
                                    ExistingBlockScript.Parameter   = ThisBuffer.Script.Parameter;
                                    ExistingBlockScript.ScriptState = "CREATED";
                                    ExistingBlockScript.StationName = ThisBuffer.Script.StationName;

                                    UpdateScriptToMonitoring(ExistingBlockScript);
                                }
                            }
                        }
                    }

                    ResponseToClient(ThisBuffer);
                    if (!IsDatabaseUpdate)
                    {
                        IsDatabaseUpdate = ResponseToStation(ThisBuffer);
                    }
                    else
                    {
                        ResponseToStation(ThisBuffer);
                    }

                    if (!IsDatabaseUpdate)
                    {
                        IsDatabaseUpdate = RemoveExpireScript();
                    }
                    else
                    {
                        RemoveExpireScript();
                    }

                    if (IsDatabaseUpdate)
                    {
                        IsDatabaseUpdate = !DatabaseSynchronization.ScriptSaveChange(true);
                    }

                    Thread.Sleep(10);
                }
            });
        }