/// <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); }
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 } } } }
public void Send(string topic, string body, string contentType) { var sendFrame = new SendFrame(topic, body, contentType); this.SendStompFrame(sendFrame); }
public SendReceivedEventArgs(string sessionId, SendFrame sendFrame) { this.SessionId = sessionId; this.SendFrame = sendFrame; }