示例#1
0
        //发送包
        public void SendPackage(byte[] data)
        {
            byte[] sha = SignTool.ComputeSHA256(data, 0, data.Length);
            string key = SignTool.Hex2String(sha, 0, sha.Length);

            datapool[key] = data;
            Message msg = new Message();

            msg.tag1  = 0x01;                   //0字节
            msg.tag2  = 0x01;                   //1字节
            msg.msgid = SignTool.RandomShort(); // 2 3 字节

            //4~7 字节
            var byteLength = BitConverter.GetBytes((UInt32)data.Length);

            for (var i = 0; i < 4; i++)
            {
                msg.data[i] = byteLength[i];
            }
            //8 到39 字节
            for (var i = 0; i < 32; i++)
            {
                msg.data[i + 4] = sha[i];
            }

            SendMessage(msg, true);
        }
示例#2
0
        void OnMsg(Message msg)
        {
            Message srcmsg = null;

            if (msg.tag1 == 0x00 || msg.tag2 >= 0xa0)//如果是一条回复消息,找原始消息
            {
                srcmsg = this.needBackMessage[msg.msgid];
            }
            System.Threading.ThreadPool.QueueUserWorkItem((_state) =>
            {
                if (msg.tag1 == 0x01 && msg.tag2 == 0x10)//请求数据
                {
                    int blockbegin = BitConverter.ToUInt16(msg.data, 0);
                    int blockend   = BitConverter.ToUInt16(msg.data, 2);
                    string hash    = SignTool.Hex2String(msg.data, 4, 32);
                    if (datapool.ContainsKey(hash) == false)
                    {
                        //发送错误回应,下一步再说
                    }
                    else
                    {
                        for (var i = blockbegin; i < blockend; i++)
                        {
                            int begin = i * 50;
                            int end   = (i + 1) * 50;
                            //Send0102
                            Message msg1  = new Message();
                            msg1.tag1     = 0x01;
                            msg1.tag2     = 0x02;
                            msg1.msgid    = msg.msgid;//这是一条回复消息
                            var bytepiece = BitConverter.GetBytes((ushort)i);
                            msg1.data[0]  = bytepiece[0];
                            msg1.data[1]  = bytepiece[1];
                            var srcdata   = datapool[hash];
                            for (var s = begin; s < end; s++)
                            {
                                if (s < srcdata.Length)
                                {
                                    msg1.data[s - begin + 2] = srcdata[s];
                                }
                                else
                                {
                                    msg1.data[s - begin + 2] = 0;
                                }
                            }
                            SendMessage(msg1, false);
                        }
                        //Send0103
                        Message msg2 = new Message();
                        msg2.tag1    = 0x01;
                        msg2.tag2    = 0x03;
                        msg2.msgid   = msg.msgid;//这是一条回复消息
                        SendMessage(msg2, false);
                    }
                }
                if (userHandleRecv != null)
                {
                    userHandleRecv(msg, srcmsg);
                }
            });
        }