Пример #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);
                }
            });
        }