Protobuf解包组包

解包代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using TcpProto;
using Google.Protobuf;
using System.Threading;
using System.Net;
using System.Net.Sockets;
using System.Diagnostics;
using NewRemoteClient.Lijiun;
using NewRemoteClient.Lijiun.Model;

namespace NewRemoteClient.ganjie
{
    public static class PackageAnl
    {

        static SocketSingleInstance singleton = SocketSingleInstance.GetInstance();
        public static int pageCount;
        /// <summary>
        /// protoTCP解包
        /// </summary>
        /// <param name="proto"></param>
        /// <param name="typeid"></param>
        /// <returns></returns>
        public static IMessage Ap_first(byte[] proto, int typeid)
        {
            IMessage imessage = null;
            switch (typeid)
            {
                case ProtoId.srepm_confirm:                    //监控端认证返回
                    var srepm_confirm = new srepm_confirm();
                    srepm_confirm = srepm_confirm.Parser.ParseFrom(proto);
                    imessage = srepm_confirm;
                    Console.WriteLine("服务器认证监控端返回信息: {0}", srepm_confirm.Status);
                    Console.WriteLine("服务器认证监控端返回");
                    break;
                case ProtoId.srepc_confirm:                    //受控端认证返回
                    var srepc_confirm = new srepc_confirm();
                    srepc_confirm = srepc_confirm.Parser.ParseFrom(proto);
                    imessage = srepc_confirm;
                    Console.WriteLine("服务器认证受控端返回信息: {0}", srepc_confirm.Status);
                    Console.WriteLine("服务器认证受控端返回");
                    break;
                case ProtoId.srepm_heart:                    //监控端心跳返回
                    var srepm_heart = new srepm_heart();
                    srepm_heart = srepm_heart.Parser.ParseFrom(proto);
                    imessage = srepm_heart;
                    Console.WriteLine("服务器心跳包监控端返回信息: {0}", srepm_heart.Heart);
                    Console.WriteLine("服务器心跳包监控端返回");
                    break;
                case ProtoId.srepc_heart:                    //受控端心跳返回
                    var srepc_heart = new srepc_heart();
                    srepc_heart = srepc_heart.Parser.ParseFrom(proto);
                    imessage = srepc_heart;
                    Console.WriteLine("服务器心跳包受控端返回信息: {0}", srepc_heart.Heart);
                    Console.WriteLine("服务器心跳包受控端返回");
                    break;
                case ProtoId.mreq_ctrl:                    //控制请求
                    var mreq_ctrl = new mreq_ctrl();
                    mreq_ctrl = mreq_ctrl.Parser.ParseFrom(proto);
                    imessage = mreq_ctrl;
                    Console.WriteLine(mreq_ctrl.Ctltype);
                    DataSource.ffStatus = true;
                    Console.WriteLine("控制请求");
                    break;
                case ProtoId.srepm_ctrl:                    //控制情况
                    var srepm_ctrl = new srepm_ctrl();
                    srepm_ctrl = srepm_ctrl.Parser.ParseFrom(proto);
                    imessage = srepm_ctrl;
                    Console.WriteLine(srepm_ctrl.Ctrlstatus);
                    Console.WriteLine("控制情况");
                    break;
                case ProtoId.strans_ctrl:
                    var strans_ctrl = new strans_ctrl();
                    strans_ctrl = strans_ctrl.Parser.ParseFrom(proto);
                    imessage = strans_ctrl;
                    Console.WriteLine(strans_ctrl.Ctltype);
                    DataSource.ffStatus = true;
                    break;
                case ProtoId.creqs_plc_feedback:                    //受控端plc信息包
                    var creqs_plc_feedback = new creqs_plc_feedback();
                    creqs_plc_feedback = creqs_plc_feedback.Parser.ParseFrom(proto);
                    imessage = creqs_plc_feedback;
                    Ap_second(creqs_plc_feedback.PlcFeedbackData, ProtoId.plcData);
                    Ap_second(creqs_plc_feedback.Protocol, ProtoId.plcProtocalType);
                    Ap_second(creqs_plc_feedback.FeedType, ProtoId.FeedType);
                    Console.WriteLine("受控端plc信息包" + DataSource.plcSource);
                    break;
                case ProtoId.mreqs_plc_feedback:                    //监控端plc信息包
                    var mreqs_plc_feedback = new mreqs_plc_feedback();
                    mreqs_plc_feedback = mreqs_plc_feedback.Parser.ParseFrom(proto);
                    imessage = mreqs_plc_feedback;
                    Ap_second(mreqs_plc_feedback.PlcFeedbackData, ProtoId.plcData);
                    Ap_second(mreqs_plc_feedback.Protocol, ProtoId.plcProtocalType);
                    Ap_second(mreqs_plc_feedback.FeedType, ProtoId.FeedType);
                    Console.WriteLine("监控端plc信息包");
                    break;
                case ProtoId.srepc_plc_feedback:                    //服务器受控端plc信息包返回
                    var srepc_plc_feedback = new srepc_plc_feedback();
                    srepc_plc_feedback = srepc_plc_feedback.Parser.ParseFrom(proto);
                    imessage = srepc_plc_feedback;
                    Console.WriteLine("服务器受控端plc信息包返回");
                    break;
                case ProtoId.srepm_plc_feedback:                    //服务器监控端plc信息包返回
                    var srepm_plc_feedback = new srepm_plc_feedback();
                    srepm_plc_feedback = srepm_plc_feedback.Parser.ParseFrom(proto);
                    imessage = srepm_plc_feedback;
                    Console.WriteLine("服务器监控端plc信息包返回");
                    break;
                case ProtoId.srepm_chat:                            //服务器监控端信息包返回
                    var srepm_chat = new srepm_chat();
                    srepm_chat = srepm_chat.Parser.ParseFrom(proto);
                    imessage = srepm_chat;
                    Console.WriteLine(srepm_chat.Status);
                    DataSource.chatStatus = srepm_chat.Status;
                    Console.WriteLine("服务器监控端信息包返回");
                    break;
                case ProtoId.spushm_chat:                           //服务器推送监控端聊天信息
                    var spushm_chat = new spushm_chat();
                    spushm_chat = spushm_chat.Parser.ParseFrom(proto);
                    imessage = spushm_chat;
                    Ap_second(spushm_chat.Msg, ProtoId.ChatContent);
                    Console.WriteLine("服务器推送监控端聊天信息");
                    break;
                case ProtoId.srepc_chat:                    //服务器受控端聊天信息包返回
                    var srepc_chat = new srepc_chat();
                    srepc_chat = srepc_chat.Parser.ParseFrom(proto);
                    imessage = srepc_chat;
                    Console.WriteLine(srepc_chat.Status);
                    DataSource.chatStatus = srepc_chat.Status;
                    Console.WriteLine("服务器受控端聊天信息包返回:{0}", DataSource.chatStatus);
                    break;
                case ProtoId.spushc_chat:                    //服务器推送受控端聊天信息包
                    var spushc_chat = new spushc_chat();
                    spushc_chat = spushc_chat.Parser.ParseFrom(proto);
                    imessage = spushc_chat;
                    Ap_second(spushc_chat.Msg, ProtoId.ChatContent);
                    Console.WriteLine("服务器推送监控端端聊天信息包");
                    break;
                case ProtoId.mreqs_confparam:                    //控制端请求界面信息包(初始化使用)
                    var mreqs_confparam = new mreqs_confparam();
                    mreqs_confparam = mreqs_confparam.Parser.ParseFrom(proto);
                    imessage = mreqs_confparam;
                    UISource.UIrefreash_Start = true;
                    Console.WriteLine("控制端请求界面信息包");
                    break;
                case ProtoId.stransc_confparam:                    //服务器控制端请求界面信息返回包
                    var stransc_confparam = new stransc_confparam();
                    stransc_confparam = stransc_confparam.Parser.ParseFrom(proto);
                    imessage = stransc_confparam;
                    UISource.UIrefreash_Start = true;
                    Console.WriteLine("服务器控制端请求界面信息返回包");
                    break;
                case ProtoId.creps_confparam:                    //受控端返回界面信息包(初始化使用)
                    var creps_confparam = new creps_confparam();
                    creps_confparam = creps_confparam.Parser.ParseFrom(proto);
                    imessage = creps_confparam;
                    Ap_second(creps_confparam.Serialconf, ProtoId.SerialConfig);
                    Ap_second(creps_confparam.Recvconf, ProtoId.RecvConfig);
                    Ap_second(creps_confparam.Netconf, ProtoId.NetConfig);
                    Console.WriteLine("受控端返回界面信息包");
                    break;
                case ProtoId.srepm_confparam:                    //服务器推送监控端受控端界面信息包
                    var srepm_confparam = new srepm_confparam();
                    srepm_confparam = srepm_confparam.Parser.ParseFrom(proto);
                    imessage = srepm_confparam;
                    Ap_second(srepm_confparam.Serialconf, ProtoId.SerialConfig);
                    Ap_second(srepm_confparam.Recvconf, ProtoId.RecvConfig);
                    Ap_second(srepm_confparam.Netconf, ProtoId.NetConfig);
                    Console.WriteLine("服务器推送监控端受控端界面信息包");
                    break;
                case ProtoId.creqs_ui_refreash:                    //受控端界面刷新信息包
                    var creqs_ui_refreash = new creqs_ui_refreash();
                    creqs_ui_refreash = creqs_ui_refreash.Parser.ParseFrom(proto);
                    imessage = creqs_ui_refreash;
                    Ap_second(creqs_ui_refreash.Serialconf, ProtoId.SerialConfig);
                    Ap_second(creqs_ui_refreash.Recvconf, ProtoId.RecvConfig);
                    Ap_second(creqs_ui_refreash.Netconf, ProtoId.NetConfig);
                    Console.WriteLine("受控端界面刷新信息包");
                    break;
                case ProtoId.srepc_ui_refreash:                    //服务器受控端界面刷新返回包
                    var srepc_ui_refreash = new srepc_ui_refreash();
                    srepc_ui_refreash = srepc_ui_refreash.Parser.ParseFrom(proto);
                    imessage = srepc_ui_refreash;
                    Console.WriteLine("服务器受控端界面刷新返回包");
                    break;
                case ProtoId.stransm_ui_refreash:                    //服务器推送监控端受控端界面刷新信息包
                    var stransm_ui_refreash = new stransm_ui_refreash();
                    stransm_ui_refreash = stransm_ui_refreash.Parser.ParseFrom(proto);
                    imessage = stransm_ui_refreash;
                    Ap_second(stransm_ui_refreash.Serialconf, ProtoId.SerialConfig);
                    Ap_second(stransm_ui_refreash.Recvconf, ProtoId.RecvConfig);
                    Ap_second(stransm_ui_refreash.Netconf, ProtoId.NetConfig);
                    UISource.UIrefreash_Sync = true;
                    Console.WriteLine("服务器推送监控端受控端界面刷新信息包");
                    break;
                case ProtoId.mreqs_ui_refreash:                    //监控端界面刷新信息包
                    var mreqs_ui_refreash = new mreqs_ui_refreash();
                    mreqs_ui_refreash = mreqs_ui_refreash.Parser.ParseFrom(proto);
                    imessage = mreqs_ui_refreash;
                    Console.WriteLine("监控端界面刷新信息包");
                    break;
                case ProtoId.srepm_ui_refreash:                    //服务器监控端界面刷新返回包
                    var srepm_ui_refreash = new srepm_ui_refreash();
                    srepm_ui_refreash = srepm_ui_refreash.Parser.ParseFrom(proto);
                    imessage = srepm_ui_refreash;
                    Console.WriteLine("服务器监控端界面刷新返回包");
                    break;
                case ProtoId.stransc_ui_refreash:                    //服务器推送受控端监控端界面刷新信息包
                    var stransc_ui_refreash = new stransc_ui_refreash();
                    stransc_ui_refreash = stransc_ui_refreash.Parser.ParseFrom(proto);
                    imessage = stransc_ui_refreash;
                    
                    Console.WriteLine(imessage);


                    Ap_second(stransc_ui_refreash.Serialconf, ProtoId.SerialConfig);
                    Ap_second(stransc_ui_refreash.Recvconf, ProtoId.RecvConfig);
                    Ap_second(stransc_ui_refreash.Netconf, ProtoId.NetConfig);
                    UISource.UIrefreash_Sync = true;
                    Console.WriteLine("服务器推送受控端监控端界面刷新信息包");
                    break;
                case ProtoId.srepc_btn_event:
                    var srepc_btn_event = new srepc_btn_event();
                    srepc_btn_event = srepc_btn_event.Parser.ParseFrom(proto);
                    imessage = srepc_btn_event;
                    Console.WriteLine("控制端按钮点击事件返回包");
                    break;
                case ProtoId.srepm_btn_event:
                    var srepm_btn_event = new srepm_btn_event();
                    srepm_btn_event = srepm_btn_event.Parser.ParseFrom(proto);
                    imessage = srepm_btn_event;
                    Console.WriteLine("控制端按钮点击事件返回包");
                    break;
                case ProtoId.stransc_btn_event:
                    var stransc_btn_event = new stransc_btn_event();
                    stransc_btn_event = stransc_btn_event.Parser.ParseFrom(proto);
                    imessage = stransc_btn_event;
                    Console.WriteLine("服务器推送受控端控制端按钮点击事件包");
                    Ap_second(stransc_btn_event.Btn, ProtoId.ButtonEvent);
                    UISource.UiClickAuthority = true;
                    UISource.UiSend = false;
                    break;
                case ProtoId.stransm_btn_event:
                    var stransm_btn_event = new stransm_btn_event();
                    stransm_btn_event = stransm_btn_event.Parser.ParseFrom(proto);
                    imessage = stransm_btn_event;
                    Console.WriteLine("服务器推送控制端受控端按钮点击事件包");
                    Ap_second(stransm_btn_event.Btn, ProtoId.ButtonEvent);
                    UISource.UiClickAuthority = true;
                    UISource.UiSend = false;
                    break;

                #region 二基
                case ProtoId.srepm_log:
                    Console.WriteLine("日志长度:" + proto.Length);
                    var srepm_log = new srepm_log();
                    srepm_log = srepm_log.Parser.ParseFrom(proto);
                    imessage = srepm_log;
                    Console.WriteLine("服务器返回受控端日志");
                    Ap_second(srepm_log.Query, ProtoId.LogQuery);
                    Ap_second(srepm_log.Rs, ProtoId.LogResult);
                    break;

                case ProtoId.srepc_log:
                    var srepc_log = new srepc_log();
                    srepc_log = srepc_log.Parser.ParseFrom(proto);
                    imessage = srepc_log;
                    Console.WriteLine("服务器返回控制端日志");
                    Ap_second(srepc_log.Query, ProtoId.LogQuery);
                    Ap_second(srepc_log.Rs, ProtoId.LogResult);
                    break;
                #endregion
                default:
                    break;
            }
            return imessage;
        }

        /// <summary>
        /// protoCommon级解包
        /// </summary>
        /// <param name="proto"></param>
        /// <param name="typeid"></param>
        private static void Ap_second(IMessage proto, int typeid)
        {
            switch (typeid)
            {
                case ProtoId.AuthInfo:
                    var AuthInfo = proto as AuthInfo;
                    Console.WriteLine(AuthInfo.Auth);
                    break;
                case ProtoId.Confirm:
                    var Confirm = proto as Confirm;
                    Console.WriteLine(Confirm.MagicNum);
                    break;
                case ProtoId.ConfirmStatus:
                    var ConfirmStatus = proto as ConfirmStatus;
                    Console.WriteLine(ConfirmStatus.MagicNum);
                    break;
                case ProtoId.Heartbeat:
                    var Heartbeat = proto as Heartbeat;
                    Console.WriteLine(Heartbeat.Timestamp);
                    break;
                case ProtoId.ControlType:
                    var ControlType = proto as ControlType;
                    Console.WriteLine(ControlType.Type);
                    break;
                case ProtoId.ControlData:
                    var ControlData = proto as ControlData;
                    Ap_second(ControlData.LEDCtrlData, ProtoId.plcData);
                    break;
                case ProtoId.plcData:                   //plc发送信息
                    var plcData = proto as PlcData;
                    Console.WriteLine("远控端plc信息:\t" + plcData.Word.ToStringUtf8());
                    DataSource.Remoteplc = plcData.Word.ToStringUtf8();
                    break;
                case ProtoId.plcProtocalType:           //plc发送口信息
                    var plcProtocalType = proto as PlcProtocolType;
                    Console.WriteLine(plcProtocalType.Type);
                    DataSource.plcCom = (int)plcProtocalType.Type;
                    Console.WriteLine("端口:" + DataSource.plcCom);
                    break;
                case ProtoId.FeedType:
                    var feedtype = proto as FeedType;
                    Console.WriteLine("来源:" + feedtype.Type);
                    DataSource.plcSource = (int)feedtype.Type;
                    break;
                case ProtoId.ChatContent:           //聊天信息
                    var ChatContent = proto as ChatContent;
                    Console.WriteLine("聊天信息:\t" + ChatContent.Msg);
                    DataSource.chatRec = ChatContent.Msg;
                    break;
                case ProtoId.SerialConfig:           //串口配置界面
                    var SerialConfig = proto as SerialConfig;
                    if (SerialConfig != null)
                    {
                        UISource.cb_portName = SerialConfig.SerialPort;
                        UISource.cb_baudRate = SerialConfig.BaudRate;
                        UISource.cb_dataBit = SerialConfig.DataBits;
                        UISource.cb_checkBit = SerialConfig.CheckBits;
                        UISource.cb_stopBit = SerialConfig.StopBits;
                        UISource.cb_flowControl = SerialConfig.StreamCtrl;
                        UISource.SerialStatus = true;
                    }
                    break;
                case ProtoId.RecvConfig:           //接受设置界面
                    var RecvConfig = proto as RecvConfig;
                    if (RecvConfig != null)
                    {
                        UISource.AsciiRBtn = RecvConfig.Ascii;
                        UISource.HexRBtn = RecvConfig.Hex;
                        UISource.lineFeedCBox = RecvConfig.Autosend;
                        UISource.showSendMsgCBox = RecvConfig.DisplaySend;
                        UISource.showSendTimeCBox = RecvConfig.DisplayTime;
                        UISource.ViewStatus = true;
                    }
                    break;
                case ProtoId.NetConfig:           //网口设置界面
                    var NetConfig = proto as NetConfig;
                    if (NetConfig != null)
                    {
                        UISource.tb_tcpIP = NetConfig.Ip;
                        UISource.tb_tcpPort = NetConfig.Port;
                        UISource.ErthrialStatus = true;
                    }
                    break;
                case ProtoId.ButtonEvent:           //按钮点击
                    var ButtonEvent = proto as ButtonEvent;
                    Console.WriteLine("按钮点击信息:\t" + ButtonEvent.Btn);
                    UISource.UiButtonCheck = true;
                    UISource.UiButton = (int)ButtonEvent.Btn;
                    break;

                #region 二基
                case ProtoId.LogQuery:
                    Console.WriteLine("LogQuery");
                    var LogQuery = proto as LogQuery;
                    if ((int)LogQuery.QueryType == 1)
                    {
                        Console.WriteLine("LogQuery.PageNum: " + LogQuery.PageNum);
                        var send = Packagebui.SendLogQuery(false, LogQuery.Start, LogQuery.End, 2, (int)LogQuery.LogType, 0);
                        singleton.sendMsg(send, ProtoId.mreqs_log);
                    }
                    break;
                case ProtoId.LogResult:
                    Console.WriteLine("LogResult");
                    var LogResult = proto as LogResult;
                    bool status = LogResult.Status;
                    string errmsg = LogResult.Errmsg;
                    var al_test = LogResult.Al;
                    Console.WriteLine(al_test.Count);
                    //pageCount = al_test.Count;
                    var al = LogResult.Al.ToList<ActionLogStct>();
                    var ctl = LogResult.Ctl.ToList<CtrlLogStct>();
                    var chl = LogResult.Chl.ToList<ChatLogStct>();
                    if (al.Count != 0)
                    {
                        Console.WriteLine("动作日志");
                        pageCount = al.Count;
                        foreach (var e in al)
                        {
                            Console.WriteLine(e.RawMessage);
                        }
                        DelegateHelper.ViewActLog(al);
                    }
                    else if (ctl.Count != 0)
                    {
                        Console.WriteLine("控制日志");
                        pageCount = ctl.Count;
                        foreach (var e in ctl)
                        {
                            Console.WriteLine(e.MsgFrom.Auth.ToString());
                        }
                        DelegateHelper.ViewCtrlLog(ctl);
                    }
                    else if (chl.Count != 0)
                    {
                        Console.WriteLine("聊天日志");
                        pageCount = chl.Count;
                        foreach (var e in chl)
                        {
                            Console.WriteLine(e.Status);
                        }
                        DelegateHelper.ViewChatLog(chl);
                    }
                    else
                    {
                        //var P = Packagebui.SendLogQuery(false, "2018-07-25", "2018-07-28", 2, 1, 1);
                        //singleton.sendMsg(P, ProtoId.mreqs_log);
                    }
                    int logsize = LogResult.Logsize;
                    Console.WriteLine("错误信息:" + errmsg);
                    Console.WriteLine("长度:" + logsize.ToString());
                    if (logsize != 0)
                    {
                        LogPage.pageNum = logsize;
                        LogPage.pageNow = 1;
                        if (logsize % 25 == 0)
                            LogPage.pageTotal = logsize / 25;
                        else
                            LogPage.pageTotal = logsize / 25 + 1;
                        Console.WriteLine(LogPage.pageTotal);
                    }
                    break;

                #endregion
                default:
                    break;
            }
        }

        /// <summary>
        /// 发送信息组包
        /// </summary>
        /// <param name="first"></param>
        /// <param name="second"></param>
        /// <param name="thrid"></param>
        /// <returns></returns>
        public static byte[] ListTest(byte[] first, byte[] second, byte[] thrid)
        {
            List<byte> byteSource = new List<byte>();

            Stopwatch sw = new Stopwatch();
            sw.Start();
            byteSource.AddRange(first);
            byteSource.AddRange(second);
            byteSource.AddRange(thrid);

            byte[] data = byteSource.ToArray();

            sw.Stop();
            Console.WriteLine("ListTest " + sw.ElapsedMilliseconds + " 毫秒,数组长度:" + data.Length);
            return data;
        }
    }
}

 

组包代码:

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using TcpProto;
using Google.Protobuf;

namespace NewRemoteClient.ganjie
{
    public static class Packagebui
    {
        /// <summary>
        /// plc信息包
        /// </summary>
        /// <param name="check">判断监控端还是受控端<0.控制端 1.受控端></param>
        /// <param name="plctype">判断串口发送还是网口发送<0.网口发送 1.串口发送 2.网口接收 3.串口接收></param>
        /// <param name="plcdata">发送的信息内容</param>
        /// <returns></returns>
        public static IMessage plcInfo(bool check, int plctype, string plcdata)
        {
            IMessage imessage = null;
            switch (plctype)
            {
                case 0:
                    if (check)
                    {
                        creqs_plc_feedback cplc = new creqs_plc_feedback
                        {
                            Protocol = new PlcProtocolType
                            {
                                Type = PlcProtocolType.Types.protocolType.Ipv4
                            },
                            PlcFeedbackData = new PlcData
                            {
                                Word = ByteString.CopyFromUtf8(plcdata)
                            },
                            Ts = new TimeStamp
                            {
                                Timestamp = (int)GetCurrentTimeUnix()
                            },
                            FeedType = new FeedType
                            {
                                Type = FeedType.Types.feedType.CtrlSend
                            }
                        };
                        imessage = cplc;
                    }
                    else
                    {
                        mreqs_plc_feedback mplc = new mreqs_plc_feedback
                        {
                            Protocol = new PlcProtocolType
                            {
                                Type = PlcProtocolType.Types.protocolType.Ipv4
                            },
                            PlcFeedbackData = new PlcData
                            {
                                Word = ByteString.CopyFromUtf8(plcdata)
                            },
                            Ts = new TimeStamp
                            {
                                Timestamp = (int)GetCurrentTimeUnix()
                            },
                            FeedType = new FeedType
                            {
                                Type = FeedType.Types.feedType.CtrlSend
                            }
                        };
                        imessage = mplc;
                    }
                    break;
                case 1:
                    if (check)
                    {
                        creqs_plc_feedback cplc = new creqs_plc_feedback
                        {
                            Protocol = new PlcProtocolType
                            {
                                Type = PlcProtocolType.Types.protocolType.Serial
                            },
                            PlcFeedbackData = new PlcData
                            {
                                Word = ByteString.CopyFromUtf8(plcdata)
                            },
                            Ts = new TimeStamp
                            {
                                Timestamp = (int)GetCurrentTimeUnix()
                            },
                            FeedType = new FeedType
                            {
                                Type = FeedType.Types.feedType.CtrlSend
                            }
                        };
                        imessage = cplc;
                    }
                    else
                    {
                        mreqs_plc_feedback mplc = new mreqs_plc_feedback
                        {
                            Protocol = new PlcProtocolType
                            {
                                Type = PlcProtocolType.Types.protocolType.Serial
                            },
                            PlcFeedbackData = new PlcData
                            {
                                Word = ByteString.CopyFromUtf8(plcdata)
                            },
                            Ts = new TimeStamp
                            {
                                Timestamp = (int)GetCurrentTimeUnix()
                            },
                            FeedType = new FeedType
                            {
                                Type = FeedType.Types.feedType.CtrlSend
                            }
                        };
                        imessage = mplc;
                    }
                    break;
                case 2:
                    if (check)
                    {
                        creqs_plc_feedback cplc = new creqs_plc_feedback
                        {
                            Protocol = new PlcProtocolType
                            {
                                Type = PlcProtocolType.Types.protocolType.Ipv4
                            },
                            PlcFeedbackData = new PlcData
                            {
                                Word = ByteString.CopyFromUtf8(plcdata)
                            },
                            Ts = new TimeStamp
                            {
                                Timestamp = (int)GetCurrentTimeUnix()
                            },
                            FeedType = new FeedType
                            {
                                Type = FeedType.Types.feedType.CtrlRecv
                            }
                        };
                        imessage = cplc;
                    }
                    else
                    {
                        mreqs_plc_feedback mplc = new mreqs_plc_feedback
                        {
                            Protocol = new PlcProtocolType
                            {
                                Type = PlcProtocolType.Types.protocolType.Ipv4
                            },
                            PlcFeedbackData = new PlcData
                            {
                                Word = ByteString.CopyFromUtf8(plcdata)
                            },
                            Ts = new TimeStamp
                            {
                                Timestamp = (int)GetCurrentTimeUnix()
                            },
                            FeedType = new FeedType
                            {
                                Type = FeedType.Types.feedType.CtrlRecv
                            }
                        };
                        imessage = mplc;
                    }
                    break;
                case 3:
                    if (check)
                    {
                        creqs_plc_feedback cplc = new creqs_plc_feedback
                        {
                            Protocol = new PlcProtocolType
                            {
                                Type = PlcProtocolType.Types.protocolType.Serial
                            },
                            PlcFeedbackData = new PlcData
                            {
                                Word = ByteString.CopyFromUtf8(plcdata)
                            },
                            Ts = new TimeStamp
                            {
                                Timestamp = (int)GetCurrentTimeUnix()
                            },
                            FeedType = new FeedType
                            {
                                Type = FeedType.Types.feedType.CtrlRecv
                            }
                        };
                        imessage = cplc;
                    }
                    else
                    {
                        mreqs_plc_feedback mplc = new mreqs_plc_feedback
                        {
                            Protocol = new PlcProtocolType
                            {
                                Type = PlcProtocolType.Types.protocolType.Serial
                            },
                            PlcFeedbackData = new PlcData
                            {
                                Word = ByteString.CopyFromUtf8(plcdata)
                            },
                            Ts = new TimeStamp
                            {
                                Timestamp = (int)GetCurrentTimeUnix()
                            },
                            FeedType = new FeedType
                            {
                                Type = FeedType.Types.feedType.CtrlRecv
                            }
                        };
                        imessage = mplc;
                    }
                    break;
                default:
                    break;
            }
            Console.WriteLine("***********************plc信息组包完成******************************");
            return imessage;
        }

        /// <summary>
        /// 受控端聊天信息组包
        /// </summary>
        /// <param name="chatdata">聊天信息字符串</param>
        /// <returns></returns>
        public static IMessage chatInfo(string chatdata)
        {
            csend_chat csend_chat = new csend_chat
            {
                Msg = new ChatContent
                {
                    Msg = chatdata
                },
                Ts = new TimeStamp
                {
                    Timestamp = (int)GetCurrentTimeUnix()
                }
            };
            Console.WriteLine("聊天信息组包完成!");
            return csend_chat;
        }

        /// <summary>
        /// ff控制信息包
        /// </summary>
        public static IMessage ffmbag()
        {
            mreq_ctrl mreq = new mreq_ctrl
            {
                Ctltype = new ControlType
                {
                    Ts = new TimeStamp
                    {
                        Timestamp = (int)GetCurrentTimeUnix()
                    },
                    Type = ControlType.Types.Type.PushGraph
                },
                Ctldata = new ControlData
                {
                    LEDCtrlData = new PlcData
                    {
                        Word = ByteString.CopyFromUtf8("")
                    }
                }
            };
            return mreq;
        }

        /// <summary>
        /// 认证信息组包<1.position为true为受控端的包>
        /// </summary>
        /// <param name="position"></param>
        /// <returns></returns>
        public static IMessage Cofirm(bool position)
        {
            if (position)
            {
                creq_confirm creq = new creq_confirm
                {
                    Confirm = new Confirm
                    {
                        MagicNum = 1
                    }
                };
                return creq;
            }
            else
            {
                mreq_confirm mreq = new mreq_confirm
                {
                    Confirm = new Confirm
                    {
                        MagicNum = 1
                    }
                };
                return mreq;
            }
        }

        /// <summary>
        /// 按钮控件信息组包
        /// </summary>
        /// <param name="uiButton"></param>
        /// <param name="preesed"></param>
        /// <returns></returns>
        private static IMessage UIButton(string uiButton, bool preesed)
        {
            UIButton UIButton = new UIButton
            {
                Label = uiButton,
                Preesed = preesed
            };
            return UIButton;
        }

        /// <summary>
        /// 复选框信息组包
        /// </summary>
        /// <param name="uiButton"></param>
        /// <param name="preesed"></param>
        /// <returns></returns>
        private static IMessage UICheckBox(string uiButton, bool preesed)
        {
            UICheckBox UICheckBox = new UICheckBox
            {
                Label = uiButton,
                Checked = preesed
            };
            return UICheckBox;
        }

        /// <summary>
        /// 下拉列表信息组包
        /// </summary>
        /// <param name="contents"></param>
        /// <param name="select_index"></param>
        /// <param name="select_content"></param>
        /// <returns></returns>
        private static IMessage UIListBox(string[] contents, int select_index, string select_content)
        {
            UIListBox UIListBox = new UIListBox
            {
                SelectIndex = select_index,
                SelectContent = select_content
            };
            UIListBox.Contents.Add(contents);
            return UIListBox;
        }

        /// <summary>
        /// 串口配置界面信息包
        /// </summary>
        /// <returns></returns>
        private static IMessage SerialConfig()
        {
            var list = UISource.list_Serial;
            var select_index = UISource.select_index;
            var select_content = UISource.select_content;
            if (select_index != null)
            {
                SerialConfig SerialConfig = new SerialConfig
                {
                    SerialPort = UIListBox(list[0], select_index[0], select_content[0]) as UIListBox,
                    BaudRate = UIListBox(list[1], select_index[1], select_content[1]) as UIListBox,
                    DataBits = UIListBox(list[2], select_index[2], select_content[2]) as UIListBox,
                    CheckBits = UIListBox(list[3], select_index[3], select_content[3]) as UIListBox,
                    StopBits = UIListBox(list[4], select_index[4], select_content[4]) as UIListBox,
                    StreamCtrl = UIListBox(list[5], select_index[5], select_content[5]) as UIListBox
                };
                return SerialConfig;
            }
            else
            {
                SerialConfig SerialConfig = null;
                return SerialConfig;
            }


        }

        /// <summary>
        /// 接受设置界面信息包
        /// </summary>
        /// <returns></returns>
        private static IMessage RevConfig()
        {
            var labels = UISource.labels;
            var chekeds = UISource.checkeds;
            if (labels != null)
            {
                RecvConfig RecvConfig = new RecvConfig
                {
                    Ascii = UICheckBox(labels[0], chekeds[0]) as UICheckBox,
                    Hex = UICheckBox(labels[1], chekeds[1]) as UICheckBox,
                    Autosend = UICheckBox(labels[2], chekeds[2]) as UICheckBox,
                    DisplaySend = UICheckBox(labels[3], chekeds[3]) as UICheckBox,
                    DisplayTime = UICheckBox(labels[4], chekeds[4]) as UICheckBox
                };
                return RecvConfig;
            }
            else
            {
                RecvConfig RecvConfig = null;
                return RecvConfig;
            }
        }

        /// <summary>
        /// 网口设置界面组包
        /// </summary>
        /// <returns></returns>
        private static IMessage NetConfig()
        {
            var texts = UISource.texts;
            if (texts != null)
            {
                NetConfig netconfig = new NetConfig
                {
                    Ip = new UITextBox
                    {
                        Content = texts[0]
                    },
                    Port = new UITextBox
                    {
                        Content = texts[1]
                    }
                };
                return netconfig;
            }
            else
            {
                NetConfig netconfig = null;
                return netconfig;
            }

        }

        /// <summary>
        /// 界面刷新包
        /// </summary>
        /// <param name="check">判断组包类型<0.控制端请求包 1.受控端初始化界面信息包 2.受控端刷新界面包 3.控制端刷新界面包></param>
        /// <returns></returns>
        public static IMessage UIrefreash(int check)
        {
            IMessage imessage = null;
            switch (check)
            {
                case 0:
                    mreqs_confparam conf = new mreqs_confparam
                    {
                        Ts = new TimeStamp
                        {
                            Timestamp = (int)GetCurrentTimeUnix()
                        }
                    };
                    imessage = conf;
                    break;
                case 1:
                    creps_confparam c_conf = new creps_confparam
                    {
                        Serialconf = SerialConfig() as SerialConfig,
                        Recvconf = RevConfig() as RecvConfig,
                        Netconf = NetConfig() as NetConfig,
                        Ts = new TimeStamp
                        {
                            Timestamp = (int)GetCurrentTimeUnix()
                        }
                    };
                    imessage = c_conf;
                    break;
                case 2:
                    creqs_ui_refreash c_ui = new creqs_ui_refreash
                    {
                        Serialconf = SerialConfig() as SerialConfig,
                        Recvconf = RevConfig() as RecvConfig,
                        Netconf = NetConfig() as NetConfig,
                        Ts = new TimeStamp
                        {
                            Timestamp = (int)GetCurrentTimeUnix()
                        }
                    };
                    imessage = c_ui;
                    break;
                case 3:
                    mreqs_ui_refreash m_ui = new mreqs_ui_refreash
                    {
                        Serialconf = SerialConfig() as SerialConfig,
                        Recvconf = RevConfig() as RecvConfig,
                        Netconf = NetConfig() as NetConfig,
                        Ts = new TimeStamp
                        {
                            Timestamp = (int)GetCurrentTimeUnix()
                        }
                    };
                    imessage = m_ui;
                    break;

            }
            return imessage;
        }

        /// <summary>
        /// 按钮事件组包<1.串口开始 2.串口停止 3.网口开始 4.网口停止 5.Tab通信助手 6.Tab电路图>
        /// </summary>
        /// <param name="choice"></param>
        /// <returns></returns>
        private static IMessage BtnEvent(int choice)
        {
            ButtonEvent Btns = new ButtonEvent();
            switch (choice)
            {
                case 1:
                    Btns.Btn = ButtonEvent.Types.WhichBtn.Start;
                    break;
                case 2:
                    Btns.Btn = ButtonEvent.Types.WhichBtn.Stop;
                    break;
                case 3:
                    Btns.Btn = ButtonEvent.Types.WhichBtn.TcpStart;
                    break;
                case 4:
                    Btns.Btn = ButtonEvent.Types.WhichBtn.TcpStop;
                    break;
                case 5:
                    Btns.Btn = ButtonEvent.Types.WhichBtn.CommuniAssit;
                    break;
                case 6:
                    Btns.Btn = ButtonEvent.Types.WhichBtn.Diagram;
                    break;
            }
            return Btns;
        }

        /// <summary>
        /// 按钮点击端选择<0.受控端 1.控制端>
        /// </summary>
        /// <param name="authority"></param>
        /// <param name="choice"></param>
        /// <returns></returns>
        public static IMessage ButtonOrTab(bool authority, int choice)
        {
            if (authority)
            {
                creqs_btn_event creqs_btn_even = new creqs_btn_event
                {
                    Ts = new TimeStamp
                    {
                        Timestamp = (int)GetCurrentTimeUnix()
                    },
                    Btn = BtnEvent(choice) as ButtonEvent
                };
                return creqs_btn_even;
            }
            else
            {
                mreqs_btn_event mreqs_btn_event = new mreqs_btn_event
                {
                    Ts = new TimeStamp
                    {
                        Timestamp = (int)GetCurrentTimeUnix()
                    },
                    Btn = BtnEvent(choice) as ButtonEvent
                };
                return mreqs_btn_event;
            }
        }

        public static IMessage Test()
        {
            creps_confparam creps = new creps_confparam
            {
                Serialconf = null,
                Netconf = null,
                Recvconf = null,
                Ts = new TimeStamp
                {
                    Timestamp = (int)GetCurrentTimeUnix()
                }
            };
            return creps;

        }

        /// <summary>
        /// 获取时间戳
        /// </summary>
        /// <returns></returns>
        private static long GetCurrentTimeUnix()
        {
            TimeSpan cha = (DateTime.Now - TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)));
            long t = (long)cha.TotalSeconds;
            Console.WriteLine("时间戳:\t" + t.ToString());
            return t;
        }

        #region 二基
        /// <summary>
        /// 日志查询
        /// </summary>
        /// <param name="id"></param>
        /// <param name="peedAddr"></param>
        /// <param name="action"></param>
        /// <param name="rawMessage"></param>
        /// <param name="gentime"></param>
        /// <returns></returns>
        public static IMessage LogQuery(string start, string end, int querytype, int logtype, int pagenum)
        {
            LogQuery LQ = new LogQuery();
            LQ.Start = start;
            LQ.End = end;
            LQ.PageNum = pagenum;
            switch (querytype)
            {
                case 1:
                    LQ.QueryType = global::LogQuery.Types.QueryType.Count;
                    break;
                case 2:
                    LQ.QueryType = global::LogQuery.Types.QueryType.Page;
                    break;
            }
            switch (logtype)
            {
                case 1:
                    LQ.LogType = global::LogQuery.Types.LogType.Action;
                    break;
                case 2:
                    LQ.LogType = global::LogQuery.Types.LogType.Ctrl;
                    break;
                case 3:
                    LQ.LogType = global::LogQuery.Types.LogType.Chat;
                    break;
            }
            return LQ;
        }

        /// <summary>
        /// 发送日志查询请求
        /// </summary>
        /// <param name="autority">0.受控端 1控制端</param>
        /// <param name="start">开始时间</param>
        /// <param name="end">截止时间</param>
        /// <param name="querytype">查询类型</param>
        /// <param name="logtype">日志类型</param>
        /// <param name="pagenum">日志页数</param>
        /// <returns></returns>
        public static IMessage SendLogQuery(bool autority, string start, string end, int querytype, int logtype, int pagenum)
        {
            if (autority)
            {
                creqs_log cl = new creqs_log()
                {
                    Ts = new TimeStamp
                    {
                        Timestamp = (int)GetCurrentTimeUnix()
                    },
                    Lq = LogQuery(start, end, querytype, logtype, pagenum) as LogQuery,
                };
                return cl;
            }
            else
            {
                mreqs_log ml = new mreqs_log
                {
                    Ts = new TimeStamp
                    {
                        Timestamp = (int)GetCurrentTimeUnix()
                    },
                    Lq = LogQuery(start, end, querytype, logtype, pagenum) as LogQuery,
                };
                return ml;
            }

        }
        #endregion
    }
}

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值