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