public static MsgWithMobile OrderSndHttp(MsgWithMobile instances) { if (instances != null && instances.Head != null) { try { var data = HttpGetx(instances.Head.Cmd, System.Convert.ToBase64String(MsgWithMobile.SerializeToBytes(instances))); if (string.IsNullOrEmpty(data) || data.Equals("ok") || data.Equals("error")) { return(null); } var infos = MsgWithMobile.Deserialize(System.Convert.FromBase64String(data)); if (infos != null) { return(infos); } } catch (Exception ex) { Wlst.Cr.Coreb.Servers.WriteLog.WriteLogError(ex.ToString()); } } return(null); }
/// <summary> /// 注册指定协议结构的数据的处理方法,方法要求最好为静态方法,如果不为静态方法要求类必须有一个无参构造函数,否则注册的方法永不执行 /// </summary> /// <param name="instancesClassOfActionIn">如果注册的处理函数为静态函数则为null 如果不为静态函数 希望返回的数据在本类实例中处理则为 this 否则新建类处理 </param> /// <param name="cmd"> </param> /// <param name="action">此方法要求必须为静态方法, 等待的数据到达后需要处理的函数 第一参数为发送端的Session值,第二参数为数据协议类型</param> /// <param name="typeOfClassOfActionIn">处理函数所在的类的类名 </param> /// <param name="runInOtherThread">是否在非UI线程运行 默认false既 不在UI线程运行 </param> public static void RegistProtocol(MsgWithMobile cmd, Action <string, MsgWithMobile> action, Type typeOfClassOfActionIn, object instancesClassOfActionIn, bool runInOtherThread = false) { if (cmd == null || cmd.Head == null || string.IsNullOrEmpty(cmd.Head.Cmd)) { return; } Wlst.Sr.PPPandSocketSvr.Server.ProtocolServices.RegisterProtocols(cmd.Head.Cmd, action, typeOfClassOfActionIn, instancesClassOfActionIn, runInOtherThread );//runInOtherThread }
/// <summary> /// 发送数据到服务端 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="instances"></param> /// <param name="waitTime">发送一次等待回应时间 </param> /// <param name="sndTimesWhileSndWithoutRrespons">如果发送失败 是否继续发送 继续发送的次数 额外发送的次数 </param> /// <param name="isUserOperarot">是否为用户手动的操作 </param> /// <returns></returns> public static bool OrderSnd(MsgWithMobile instances, int waitTime = 0, int sndTimesWhileSndWithoutRrespons = 0, bool isUserOperarot = false) { if (isUserOperarot && BeforeSnd != null) { try { BeforeSnd(instances); } catch (Exception ex) { } } return(Wlst.Sr.PPPandSocketSvr.Server.SocketClient.SndData(instances, waitTime, sndTimesWhileSndWithoutRrespons)); }
public void RegistProtocol(MsgWithMobile cmd, Action <string, MsgWithMobile> action, bool runInUiThread = false) { ProtocolServer.RegistProtocol(cmd, action, this.GetType(), this, runInUiThread); }
void BeforSnd1(MsgWithMobile data) { if (data == null) { return; } OpType OP = new OpType(); #region 单灯 if (data.WstSluRightOperator != null) //单灯 发送命令 { foreach (var f in data.WstSluRightOperator.OperatorItems) { int sluid = f.SluId; //int addrtype = f.AddrType; //int addr = f.Addr; string showx = ""; // f.AddrType if (f.AddrType == 0) { showx = "全部"; } else if (f.AddrType == 1) { showx = "组:" + f.Addr; } else if (f.AddrType == 3) { showx = "控制器:" + f.Addr; } else if (f.AddrType == 2) { if (f.Addr == 10) { showx = "全部"; } else if (f.Addr == 20) { showx = "双数"; } else if (f.Addr == 21) { showx = "单数"; } else { showx = "其他模式"; } } var opName = "未知"; if (f.CmdType == 5) { opName = "调光:" + f.CmdPwmField.Scale + "%"; } else { opName = "开关灯"; foreach (var g in f.CmdMix) { if (g == 1) { opName = "开灯"; break; } if (g == 4) { opName = "关灯"; break; } } } var rc = GerRecord(sluid, opName, showx); rc.Addr = f.Addr; rc.Gid = data.Head.Gid; rc.AddrType = f.AddrType; this.Records.Insert(0, rc); recalctrlinfo(); } return; } if (data.WstSluMeasure != null) //单灯 发送命令 { var opName = "未知"; int sluid = data.WstSluMeasure.SluId; ; string showx = "---"; if (data.WstSluMeasure.Type == 0) { opName = "巡测"; } else if (data.WstSluMeasure.Type == 5 || data.WstSluMeasure.Type == 7) { opName = "基本参数"; } var rc = GerRecord(sluid, opName, showx); rc.AddrType = data.WstSluMeasure.Type; this.Records.Insert(0, rc); recalctrlinfo(); } if (data.WstSluReadCtrlArgs != null) { int sluid = data.WstSluReadCtrlArgs.SluId; int ctrlid = data.WstSluReadCtrlArgs.CtrlId; string showx = "控制器:" + ctrlid; if (data.WstSluReadCtrlArgs.ReadCtrldata || data.WstSluReadCtrlArgs.ReadData) { var rc = GerRecord(sluid, "选测", showx); rc.Addr = ctrlid; rc.AddrType = 5; this.Records.Insert(0, rc); recalctrlinfo(); } } #endregion #region rtu if (data.WstRtuOrders != null) { if (data.WstRtuOrders.Op == 22) //召测时钟 { OP = OpType.ZcTime; } if (data.WstRtuOrders.Op == 31) //选测终端数据 { OP = OpType.RtuMeasure; } if (data.WstRtuOrders.Op == 21) //发送对时 { OP = OpType.AsynTime; } if (data.WstRtuOrders.Op == 41) //发送节假日 { OP = OpType.SndHoliday; } if (data.WstRtuOrders.Op == 11) //发送周设置 { OP = OpType.Snd13Week; } if (data.WstRtuOrders.Op == 12) //发送周设置 { OP = OpType.Snd46Week; } if (data.WstRtuOrders.Op == 13) //发送周设置 { OP = OpType.Snd78Week; } if (data.WstRtuOrders.Op == 14) //发送周设置 { OP = OpType.SndAllYearWeek; } if (data.WstRtuOrders.RtuIds.Count < 1) { return; } int rtuId = data.WstRtuOrders.RtuIds[0]; AddNewRecordItem(rtuId, OP); return; } if (data.WstRtuCntOrderOpenCloseLight != null) { if (data.WstRtuCntOrderOpenCloseLight.IsOpen == 1) { OP = OpType.RtuOpen; } if (data.WstRtuCntOrderOpenCloseLight.IsOpen == 2) { OP = OpType.RtuClose; } int rtuId = 0; if (data.Args.Addr.Count > 0) { rtuId = data.Args.Addr[0]; } List <int> loopid = data.WstRtuCntOrderOpenCloseLight.Loops; foreach (var i in loopid) { if (i == 0) //全部回路操作,只有开关灯操作 。其他没有回路参数的,默认为-1 { int switchOutCount = 6; //默认为6个开关量 if (!Sr.EquipmentInfoHolding.Services.EquipmentDataInfoHold.InfoItems.ContainsKey(rtuId)) { return; } var info = Sr.EquipmentInfoHolding.Services.EquipmentDataInfoHold.InfoItems[rtuId]; if (info.RtuModel == EnumRtuModel.Wj3006) { switchOutCount = 8; } for (int j = 1; j < switchOutCount + 1; j++) { AddNewRecordItem(rtuId, OP, j); } } else { AddNewRecordItem(rtuId, OP, i); } } return; } #endregion }