using FLY.OBJComponents.IService; using FLY.OBJComponents.OBJ_INTERFACE; using FObjBase; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace FLY.OBJComponents.Server.OBJProxy { public class PLCProxySystem_OBJProxy : FObj { IPLCProxySystemService plcos; SyncProp_OBJProxy syncProp_OBJProxy; /// <summary> /// 内部会使用 serverID,serverID+1 /// </summary> /// <param name="objsys_idx"></param> /// <param name="serverID"></param> /// <param name="plcos"></param> public PLCProxySystem_OBJProxy(int objsys_idx, UInt32 serverID, IPLCProxySystemService plcos) : base(objsys_idx) { ID = serverID; this.plcos = plcos; syncProp_OBJProxy = new SyncProp_OBJProxy( objsys_idx, serverID + 1, new Dictionary<string, System.ComponentModel.INotifyPropertyChanged> { { ".", plcos } }); } public override void CallFunction(IFConn from, uint srcid, uint magic, ushort funcid, byte[] infodata) { switch (funcid) { case PLCOS_OBJ_INTERFACE.CALL_SET_PLAN: { string json = Misc.Converter.BytesToString(infodata); PLCOS_OBJ_INTERFACE.Pack_SetPlanRequest pack = JsonConvert.DeserializeObject<PLCOS_OBJ_INTERFACE.Pack_SetPlanRequest>(json); plcos.SetPlan(pack.objname, pack.propertyNames, pack.planid); } break; case PLCOS_OBJ_INTERFACE.CALL_SET_PLAN2: { string json = Misc.Converter.BytesToString(infodata); PLCOS_OBJ_INTERFACE.Pack_SetPlan2Request pack = JsonConvert.DeserializeObject<PLCOS_OBJ_INTERFACE.Pack_SetPlan2Request>(json); plcos.SetPlan(pack.objname, pack.propertyNames, (planid, context) => { ConnContext conn = context as ConnContext; PLCOS_OBJ_INTERFACE.Pack_SetPlan2Reponse p = new PLCOS_OBJ_INTERFACE.Pack_SetPlan2Reponse() { planid = planid }; string s = JsonConvert.SerializeObject(p); CurrObjSys.PushCallFunctionEx(conn.from, srcid, ID, magic, funcid, Misc.Converter.StringToBytes(s)); }, new ConnContext(from, srcid, magic)); } break; case PLCOS_OBJ_INTERFACE.CALL_FEED_PLAN: { string json = Misc.Converter.BytesToString(infodata); PLCOS_OBJ_INTERFACE.Pack_FeedPlanRequest pack = JsonConvert.DeserializeObject<PLCOS_OBJ_INTERFACE.Pack_FeedPlanRequest>(json); plcos.FeedPlan(pack.planid); } break; case PLCOS_OBJ_INTERFACE.CALL_REMOVE_PLAN: { string json = Misc.Converter.BytesToString(infodata); PLCOS_OBJ_INTERFACE.Pack_FeedPlanRequest pack = JsonConvert.DeserializeObject<PLCOS_OBJ_INTERFACE.Pack_FeedPlanRequest>(json); plcos.RemovePlan(pack.planid); } break; } } } }