/// <summary>
        /// 发送数据转换
        /// </summary>
        public List <SendFrame> NodeX0sToBytes(List <NodeX0> nodeX0s)
        {
            List <SendFrame> sendBytesList = new List <SendFrame>();

            for (int i = 0; i < nodeX0s.Count; i++)
            {
                SendFrame sf = new SendFrame();
                sf.canId = nodeX0s[i].UINTCANID;
                sf.datas = new byte[8];
                for (int j = 0; j < nodeX0s[i].NodeX1s.Count; j++)
                {
                    switch (nodeX0s[i].NodeX1s[j].ItemLengthValue) //第一个可用字节长度
                    {
                    case 1:                                        //一个字节
                        for (int k = 0; k < nodeX0s[i].NodeX1s[j].NodeX2s.Count; k++)
                        {
                            int  a      = nodeX0s[i].NodeX1s[j].NodeX2s[k].Value;
                            int  offset = nodeX0s[i].NodeX1s[j].NodeX2s[k].StartBitIndex;
                            int  and    = (int)Math.Pow(2, nodeX0s[i].NodeX1s[j].NodeX2s[k].BitLength) - 1;
                            byte value  = (byte)((a & and) << offset);
                            value = (byte)((value - nodeX0s[i].NodeX1s[j].NodeX2s[k].Offset) / nodeX0s[i].NodeX1s[j].NodeX2s[k].Resolution);
                            sf.datas[nodeX0s[i].NodeX1s[j].ItemStartValue] += value;
                        }
                        break;

                    case 2:     //二个字节
                    {
                        int value = (int)((nodeX0s[i].NodeX1s[j].NodeX2s[0].Value - nodeX0s[i].NodeX1s[j].NodeX2s[0].Offset) / nodeX0s[i].NodeX1s[j].NodeX2s[0].Resolution);
                        sf.datas[nodeX0s[i].NodeX1s[j].ItemStartValue] = (byte)(value & 0xff);
                        sf.datas[nodeX0s[i].NodeX1s[j].ItemEndValue]   = (byte)((value >> 8) & 0xff);
                    }
                    break;

                    case 3:     //三个字节
                    {
                        int value = (int)((nodeX0s[i].NodeX1s[j].NodeX2s[0].Value - nodeX0s[i].NodeX1s[j].NodeX2s[0].Offset) / nodeX0s[i].NodeX1s[j].NodeX2s[0].Resolution);
                        sf.datas[nodeX0s[i].NodeX1s[j].ItemStartValue]     = (byte)(value & 0xff);
                        sf.datas[nodeX0s[i].NodeX1s[j].ItemStartValue + 1] = (byte)((value >> 8) & 0xff);
                        sf.datas[nodeX0s[i].NodeX1s[j].ItemEndValue]       = (byte)((value >> 16) & 0xff);
                    }
                    break;

                    case 4:     //四个字节
                    {
                        int value = (int)((nodeX0s[i].NodeX1s[j].NodeX2s[0].Value - nodeX0s[i].NodeX1s[j].NodeX2s[0].Offset) / nodeX0s[i].NodeX1s[j].NodeX2s[0].Resolution);
                        sf.datas[nodeX0s[i].NodeX1s[j].ItemStartValue]     = (byte)(value & 0xff);
                        sf.datas[nodeX0s[i].NodeX1s[j].ItemStartValue + 1] = (byte)((value >> 8) & 0xff);
                        sf.datas[nodeX0s[i].NodeX1s[j].ItemStartValue + 2] = (byte)((value >> 16) & 0xff);
                        sf.datas[nodeX0s[i].NodeX1s[j].ItemEndValue]       = (byte)((value >> 24) & 0xff);
                    }
                    break;

                    default:
                        break;
                    }
                }
                sendBytesList.Add(sf);
            }
            return(sendBytesList);
        }
示例#2
0
        private void SendFragment(int id, Bitmap fragment)
        {
            MemoryStream fStream = new MemoryStream();

            fragment.Save(fStream, ImageFormat.Jpeg);
            fStream.Position = 0;

            MemoryStream stream = new MemoryStream();
            BinaryWriter writer = new BinaryWriter(stream);

            writer.Write((Int32)sessionId);
            writer.Write((byte)1);               // 1 = Video
            writer.Write((byte)id);              // id fragment
            writer.Write((Int32)fStream.Length); // size fragment
            writer.Write(fStream.ToArray());
            stream.Position = 0;


            SendFrame?.Invoke(stream.ToArray());
        }
        /// <summary>
        /// 接收数据转换
        /// </summary>
        public void BytesToFrame(SendFrame sf, ref List <NodeX0> nodeX0s)
        {
            for (int i = 0; i < nodeX0s.Count; i++)
            {
                if (sf.canId == nodeX0s[i].UINTCANID)
                {
                    for (int j = 0; j < nodeX0s[i].NodeX1s.Count; j++)
                    {
                        #region 字节值转换
                        switch (nodeX0s[i].NodeX1s[j].ItemLengthValue) //第一个可用字节长度
                        {
                        case 1:                                        //一个字节
                            for (int k = 0; k < nodeX0s[i].NodeX1s[j].NodeX2s.Count; k++)
                            {
                                #region 位域转换
                                int a      = sf.datas[nodeX0s[i].NodeX1s[j].ItemStartValue];
                                int offset = nodeX0s[i].NodeX1s[j].NodeX2s[k].StartBitIndex;
                                int and    = (int)Math.Pow(2, nodeX0s[i].NodeX1s[j].NodeX2s[k].BitLength) - 1;

                                byte value = (byte)((a >> offset) & and);

                                value = (byte)(value * nodeX0s[i].NodeX1s[j].NodeX2s[k].Resolution + nodeX0s[i].NodeX1s[j].NodeX2s[k].Offset);
                                nodeX0s[i].NodeX1s[j].NodeX2s[k].Value = value;

                                #endregion
                            }
                            break;

                        case 2:     //二个字节
                        {
                            nodeX0s[i].NodeX1s[j].NodeX2s[0].Value = (int)((sf.datas[nodeX0s[i].NodeX1s[j].ItemStartValue] +
                                                                            sf.datas[nodeX0s[i].NodeX1s[j].ItemEndValue] * 256) * nodeX0s[i].NodeX1s[j].NodeX2s[0].Resolution + nodeX0s[i].NodeX1s[j].NodeX2s[0].Offset);
                        }
                        break;

                        case 3:     //三个字节
                        {
                            nodeX0s[i].NodeX1s[j].NodeX2s[0].Value = (int)((sf.datas[nodeX0s[i].NodeX1s[j].ItemStartValue] +
                                                                            sf.datas[nodeX0s[i].NodeX1s[j].ItemStartValue + 1] * 256 +
                                                                            sf.datas[nodeX0s[i].NodeX1s[j].ItemEndValue] * 256 * 256) * nodeX0s[i].NodeX1s[j].NodeX2s[0].Resolution + nodeX0s[i].NodeX1s[j].NodeX2s[0].Offset);
                        }

                        break;

                        case 4:     //四个字节
                        {
                            nodeX0s[i].NodeX1s[j].NodeX2s[0].Value = (int)((sf.datas[nodeX0s[i].NodeX1s[j].ItemStartValue] +
                                                                            sf.datas[nodeX0s[i].NodeX1s[j].ItemStartValue + 1] * 256 +
                                                                            sf.datas[nodeX0s[i].NodeX1s[j].ItemStartValue + 1] * 256 * 256 +
                                                                            sf.datas[nodeX0s[i].NodeX1s[j].ItemEndValue] * 256 * 256 * 256) * nodeX0s[i].NodeX1s[j].NodeX2s[0].Resolution + nodeX0s[i].NodeX1s[j].NodeX2s[0].Offset);
                        }
                        break;

                        default:
                            break;
                        }
                        #endregion
                    }
                }
            }
        }
示例#4
0
        public void Send(string topic, string body, string contentType)
        {
            var sendFrame = new SendFrame(topic, body, contentType);

            this.SendStompFrame(sendFrame);
        }
示例#5
0
 public SendReceivedEventArgs(string sessionId, SendFrame sendFrame)
 {
     this.SessionId = sessionId;
     this.SendFrame = sendFrame;
 }