Beispiel #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);
        }
Beispiel #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);
                }
            }
        }
Beispiel #3
0
 private static void RemoveScriptToMonitoring(ScriptTB NewScript)
 {
     if (ScriptMonitoring != null)
     {
         MethodInfo MInfo = ScriptMonitoring.GetType().GetMethod("RemoveScriptFromGrid");
         MInfo.Invoke(ScriptMonitoring, new Object[] { NewScript });
     }
 }
Beispiel #4
0
 private static void UpdateScriptToMonitoring(ScriptTB ThisScript)
 {
     if (ScriptMonitoring != null)
     {
         MethodInfo MInfo = ScriptMonitoring.GetType().GetMethod("UpdateScriptGrid");
         MInfo.Invoke(ScriptMonitoring, new Object[] { ThisScript });
     }
 }
        public static void InsertScript(ScriptTB ThisScript)
        {
            db = RefreshDB();

            int Temp = db.UserTBs.Count();

            db.ScriptTBs.Add(ThisScript);
        }
 public static void DeleteScript(ScriptTB ThisScript)
 {
     try
     {
         db = RefreshDB();
         db.ScriptTBs.Remove(ThisScript);
     }
     catch { }
 }
Beispiel #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);
        }
Beispiel #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);
            }
        }
Beispiel #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);
        }
Beispiel #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);
        }
Beispiel #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);
            }
        }
Beispiel #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);
            }
        }
Beispiel #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);
        }
Beispiel #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);
        }
Beispiel #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);
        }
Beispiel #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);
                }
            });
        }