Esempio n. 1
0
        protected override void OnMessage(MessageEventArgs e)
        {
            MESStationReturn StationReturn = null; // new MESStationReturn();

            string[] Para = null;                  //add by LLF 2017-1-4
            try
            {
                //處理JSON
                //Newtonsoft.Json.Linq.JObject Request = (Newtonsoft.Json.Linq.JObject) Newtonsoft.Json.JsonConvert.DeserializeObject(
                //"{ TOKEN:null, CLASS: \"MESStation.ApiHelper\", FUNCTION:\"GetApiClassList\", DATA:{ } }");

                //Request = (Newtonsoft.Json.Linq.JObject)Newtonsoft.Json.JsonConvert.DeserializeObject("{ TOKEN:null, CLASS: \"MESStation.ApiHelper\", FUNCTION:\"GetApiFunctionsList\", DATA:{ CLASSNAME:\"MESStation.ApiHelper\" } }");
                //Request = (Newtonsoft.Json.Linq.JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(
                //    "{ TOKEN:null, CLASS: \"MESStation.ApiHelper\", FUNCTION:\"GetApiFunctionsList\", DATA:{ CLASSNAME:\"MESStation.UserManager\" } }");

                Newtonsoft.Json.Linq.JObject Request = (Newtonsoft.Json.Linq.JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(e.Data);
                string CLASS    = Request["Class"].ToString();
                string FUNCTION = Request["Function"].ToString();
                string TOKEN    = Request["Token"].ToString();
                string MsgID    = Request["MessageID"]?.ToString();
                string ClientID = Request["ClientID"]?.ToString();
                Request.Add("IP", Newtonsoft.Json.Linq.JToken.Parse("{Value:\"" + this.ClientIP + "\"}"));


                StationReturn = new MESStationReturn(MsgID, ClientID);
                //反射加載

                //ApiHelper api = new ApiHelper();
                Type APIType;
                //加載類庫
                Assembly assembly = Assembly.Load("MESStation");
                APIType = assembly.GetType(CLASS);
                object     API_CLASS = assembly.CreateInstance(CLASS);
                MesAPIBase API       = (MesAPIBase)API_CLASS;
                if (!API.DBPools.ContainsKey("SFCDB"))
                {
                    API.DBPools.Add("SFCDB", SFCDBPool);
                }
                if (!API.DBPools.ContainsKey("APDB"))
                {
                    API.DBPools.Add("APDB", APDBPool);
                }
                //API.BU = "HWD";
                //API.BU = "VERTIV";
                ((MesAPIBase)API_CLASS).IP = this.ClientIP;

                API.Language = "CHINESE";  //CHINESE,CHINESE_TW,ENGLISH;

                //初始化異常類型的數據庫連接池
                MESReturnMessage.SetSFCDBPool(SFCDBPool);
                //獲取調用函數
                MethodInfo Function = APIType.GetMethod(FUNCTION);
                //
                bool CheckLogin = false;
                if (LoginUsers.ContainsKey(TOKEN))
                {
                    MESStation.LogicObject.User lu = LoginUsers[TOKEN];
                    ((MesAPIBase)API_CLASS).LoginUser = lu;
                    CheckLogin = true;
                    API.BU     = lu.BU;
                }
                else
                {
                    if (FUNCTION != "Login" && ((MesAPIBase)API_CLASS).MastLogin)
                    {
                        StationReturn.Status  = StationReturnStatusValue.Fail;
                        StationReturn.Message = "No Login !";
                    }
                    else
                    {
                        if (FUNCTION == "Login")
                        {
                            CheckLogin = true;
                        }
                    }
                }
                if (CheckLogin)
                {
                    Function.Invoke(API_CLASS, new object[] { Request, Request["Data"], StationReturn });
                    if (FUNCTION == "Login")
                    {
                        if (StationReturn.Status == "Pass")
                        {
                            LoginReturn r = (LoginReturn)StationReturn.Data;
                            MESStation.LogicObject.User lu = ((MesAPIBase)API_CLASS).LoginUser;
                            if (this.Token != null)
                            {
                                Report.LoginUsers.Remove(Token);
                                MESStation.Stations.CallStation.logout(Token);
                            }
                            string NewToken = r.Token;
                            Token = r.Token;
                            if (LoginUsers.ContainsKey(NewToken))
                            {
                                LoginUsers[NewToken] = lu;
                            }
                            else
                            {
                                LoginUsers.Add(NewToken, lu);
                            }
                        }
                    }
                }//函數不要求登錄
                else if (!((MesAPIBase)API_CLASS).MastLogin)
                {
                    Function.Invoke(API_CLASS, new object[] { Request, Request["Data"], StationReturn });
                    if (FUNCTION == "Login")
                    {
                        if (StationReturn.Status == "Pass")
                        {
                            LoginReturn r = (LoginReturn)StationReturn.Data;
                            MESStation.LogicObject.User lu = ((MesAPIBase)API_CLASS).LoginUser;
                            string NewToken = r.Token;
                            if (LoginUsers.ContainsKey(NewToken))
                            {
                                LoginUsers[NewToken] = lu;
                            }
                            else
                            {
                                LoginUsers.Add(NewToken, lu);
                            }
                        }
                    }
                }

                //add by LLF 2017-12-27
                if (StationReturn.MessageCode != null)
                {
                    if (StationReturn.MessageCode.Length > 0)
                    {
                        if (StationReturn.MessagePara != null)
                        {
                            if (StationReturn.MessagePara.Count > 0)
                            {
                                Para = new string[StationReturn.MessagePara.Count];
                                for (int i = 0; i < StationReturn.MessagePara.Count; i++)
                                {
                                    Para[i] = StationReturn.MessagePara[i].ToString();
                                }
                            }
                        }
                        StationReturn.Message = MESReturnMessage.GetMESReturnMessage(StationReturn.MessageCode, Para);
                    }
                }
            }
            catch (MESReturnMessage ee)
            {
                StationReturn.Status  = MESStation.BaseClass.StationReturnStatusValue.Fail;
                StationReturn.Message = ee.Message;
                if (ee.InnerException != null)
                {
                    StationReturn.Data = ee.InnerException.Message;
                }
            }
            catch (Exception ee)
            {
                StationReturn.Status  = MESStation.BaseClass.StationReturnStatusValue.Fail;
                StationReturn.Message = ee.Message;
                if (ee.InnerException != null)
                {
                    StationReturn.Data = ee.InnerException.Message;
                }
            }



            System.Web.Script.Serialization.JavaScriptSerializer JsonMaker = new System.Web.Script.Serialization.JavaScriptSerializer();
            JsonMaker.MaxJsonLength = int.MaxValue;

            string json = JsonMaker.Serialize(StationReturn);

            //JavaScriptSerializer 實例在序列化對象的時候,遇到 DateTime 類型會序列化出不可讀的數據,
            //因此改用 Newtonsoft 的 JsonConvert 來進行序列化,序列化出來的 DateTime 形如 2017-12-06T11:14:37
            //另外如果遇到無法將 System.DBNull 類型轉換成 string 類型的,可以手動檢測下值的類型,
            //如果是 System.DBNull,直接將值改為 null 即可。
            //實在無法實現你所需要的功能,可將下面這句註釋掉。
            //
            // modify by 張官軍 2017/12/06

            //變更時間格式  modify by Wuq 2018/01/25
            json = Newtonsoft.Json.JsonConvert.SerializeObject(StationReturn, Newtonsoft.Json.Formatting.Indented, new Newtonsoft.Json.Converters.IsoDateTimeConverter {
                DateTimeFormat = "yyyy-MM-dd HH:mm:ss"
            });
            //json = Newtonsoft.Json.JsonConvert.SerializeObject(StationReturn);

            Send(json);
        }
Esempio n. 2
0
        public MESStationReturn InitStation(MESStation.BaseClass.MESStationReturn StationReturn, StationPara sp)
        {
            MESReturnMessage.SetSFCDBPool(this.DBPools["SFCDB"]);
            //string Token = requestValue["Token"]?.ToString();
            OleExec SFCDB = this.DBPools["SFCDB"].Borrow();

            //OleExec SFCDB = new OleExec("VERTIVTESTDB", true);
            try
            {
                MESStationBase retStation = retStation = new MESStationBase();

                retStation.StationOutputs.Clear();
                retStation.StationMessages.Clear();
                retStation.StationSession.Clear();
                retStation.DisplayOutput.Clear();
                retStation.Inputs.Clear();
                retStation.IP = this.IP;

                //add by 張官軍 2018-1-4 不添加的話,後面獲取該信息的時候回傳空
                MESStation.LogicObject.User User = new MESStation.LogicObject.User();
                User.EMP_NO          = "Webservice";
                User.EMP_NAME        = "Webservice";
                retStation.LoginUser = User;
                //給工站對象賦公共值
                retStation.Init(sp.Station, sp.Line, BU, SFCDB);
                MESStation.MESReturnView.Station.CallStationReturn ret = new MESStation.MESReturnView.Station.CallStationReturn();
                ret.Station = retStation;
                //用以執行InitInput.Run()  2018/01/30 SDL
                retStation.SFCDB = SFCDB;
                //調用工站初始配置
                MESStationInput InitInput = retStation.Inputs.Find(t => t.Name == "StationINIT");
                if (InitInput != null)
                {
                    InitInput.Run();
                    retStation.Inputs.Remove(InitInput);
                }
                if (retStation.FailStation != null)
                {
                    InitInput = null;
                    InitInput = retStation.FailStation.Inputs.Find(t => t.Name == "StationINIT");
                    if (InitInput != null)
                    {
                        InitInput.Run();
                        retStation.FailStation.Inputs.Remove(InitInput);
                    }
                }

                StationReturn.Data    = ret;
                StationReturn.Status  = StationReturnStatusValue.Pass;
                StationReturn.Message = "Station '" + sp.Station + "'Init successfull.";
            }
            catch (Exception ee)
            {
                StationReturn.Data    = null;
                StationReturn.Status  = StationReturnStatusValue.Fail;
                StationReturn.Message = "Station '" + sp.Station + "'Init Fail! " + ee.Message;
                throw ee;
            }
            finally
            {
                this.DBPools["SFCDB"].Return(SFCDB);
            }
            return(StationReturn);
        }