public void StartServer() { TcpServerChannel channelTcpServer = new TcpServerChannel("TcpServerChannel", 9988); MultipleFormatterByteArrayInterpreter interpreter = new MultipleFormatterByteArrayInterpreter("Interpreter"); interpreter.SetTailers(new byte[] { 0xAA, 0x55 }); interpreter.SetHeaders(new byte[] { 0x55, 0xAA }); ///////////////////////////////////////////////////////////////////////////////////////// ByteArrayFormatter formatter_F1 = new ByteArrayFormatter("Formatter1", 1); ByteArrayCompositeValueItem byteArrayCompositeValueItem_F1 = new ByteArrayCompositeValueItem("F1_ByteArrayCompositeValueItem1"); byteArrayCompositeValueItem_F1.AddItem(new ByteArrayStringItem("F1_NodeName", 1, 6, Encoding.ASCII)); byteArrayCompositeValueItem_F1.AddItem(new ByteArrayInt32Item("F1_NodeId", 0)); byteArrayCompositeValueItem_F1.AddItem(new ByteArrayInt16Item("F1_Temperature", 2)); byteArrayCompositeValueItem_F1.AddItem(new ByteArrayDoubleItem("F1_Longitude", 3)); byteArrayCompositeValueItem_F1.AddItem(new ByteArrayByteItem("F1_Reserved", 4)); ByteArrayLoopItem byteArrayLoopItem_F1 = new ByteArrayLoopItem("F1_byteArrayLoopItem1", 1, byteArrayCompositeValueItem_F1); formatter_F1.AddItem(new ByteArrayInt32Item("F1_Type", 0)); formatter_F1.AddItem(byteArrayLoopItem_F1); ///////////////////////////////////////////////////////////////////////////////////////// ByteArrayFormatter formatter_F2 = new ByteArrayFormatter("Formatter2", 2); formatter_F2.AddItem(new ByteArrayInt32Item("F2_Type", 0)); formatter_F2.AddItem(new ByteArrayStringItem("F2_NodeName", 2, 6, Encoding.ASCII)); formatter_F2.AddItem(new ByteArrayInt32Item("F2_NodeId", 1)); formatter_F2.AddItem(new ByteArrayInt16Item("F2_Temperature", 3)); formatter_F2.AddItem(new ByteArrayDoubleItem("F2_Longitude", 4)); formatter_F2.AddItem(new ByteArrayByteItem("F2_Reserved", 5)); /////////////////////////////////////////////////////////////////////////////////////////////// ByteArrayTypedFormatterFilter byteArrayTypedFormatterFilter = new ByteArrayTypedFormatterFilter("ByteArrayTypedFormatterFilter", 0); //the index we use 0 meaning the Type Id is the index[0] in the input buffer without header. interpreter.AddFormatter(formatter_F1); interpreter.AddFormatter(formatter_F2); interpreter.AddFormatterFilter(byteArrayTypedFormatterFilter); ByteArrayAdapter baa = new ByteArrayAdapter("ByteArrayAdapter", channelTcpServer, interpreter, Program.ShowEnvelop); baa.Setup(); }
private object GetFormatterFilter(XElement element) { string filterType = GetAttribute(element, "Type"); string filterName = GetAttribute(element, "Name"); if (filterType == "ByteArrayTypedFormatterFilter") { int formatterTypeIndex = int.Parse(GetAttribute(element, "FormatterTypeIndex")); ByteArrayTypedFormatterFilter filter = new ByteArrayTypedFormatterFilter(filterName, formatterTypeIndex); if (element.Element("FormatterFilter") != null) { foreach (var subFilterElement in element.Elements("FormatterFilter")) { IFormatterFilter <byte[]> subFilter = (IFormatterFilter <byte[]>)GetFormatterFilter(subFilterElement); } } return(filter); } else if (filterType == "ByteArrayLengthGreatThanFormatterFilter") { int length = int.Parse(GetAttribute(element, "Length")); ByteArrayLengthGreatThanFormatterFilter filter = new ByteArrayLengthGreatThanFormatterFilter(filterName, length); if (element.Element("FormatterFilter") != null) { foreach (var subFilterElement in element.Elements("FormatterFilter")) { IFormatterFilter <byte[]> subFilter = (IFormatterFilter <byte[]>)GetFormatterFilter(subFilterElement); } } return(filter); } else if (filterType == "ByteArrayLengthEqualFormatterFilter") { int length = int.Parse(GetAttribute(element, "Length")); ByteArrayLengthEqualFormatterFilter filter = new ByteArrayLengthEqualFormatterFilter(filterName, length); if (element.Element("FormatterFilter") != null) { foreach (var subFilterElement in element.Elements("FormatterFilter")) { IFormatterFilter <byte[]> subFilter = (IFormatterFilter <byte[]>)GetFormatterFilter(subFilterElement); } } return(filter); } else if (filterType == "Custom") { string customTypeName = GetAttribute(element, "CustomTypeName"); Type type = Type.GetType(customTypeName); object[] args = null; if (element.Elements("Parameter") != null) { args = new object[element.Elements("Parameter").Count()]; int i = 0; foreach (var paraElement in element.Elements("Parameter")) { string pType = GetAttribute(paraElement, "Type"); string pValue = GetAttribute(paraElement, "Value"); object p = Convert.ChangeType(pValue, Type.GetType(pType)); args[i] = p; i++; } } object custom = System.Activator.CreateInstance(type, args); return(custom); } else { throw new UnknownElementException("Unknown FormatterFilter type:" + filterType); } }
private object GetFormatterFilter(XElement element) { string filterType = GetAttribute(element, "Type"); string filterName = GetAttribute(element, "Name"); if (filterType == "ByteArrayTypedFormatterFilter") { int formatterTypeIndex = int.Parse(GetAttribute(element, "FormatterTypeIndex")); ByteArrayTypedFormatterFilter filter = new ByteArrayTypedFormatterFilter(filterName, formatterTypeIndex); if (element.Element("FormatterFilter") != null) { foreach (var subFilterElement in element.Elements("FormatterFilter")) { IFormatterFilter<byte[]> subFilter = (IFormatterFilter<byte[]>)GetFormatterFilter(subFilterElement); } } return filter; } else if (filterType == "ByteArrayLengthGreatThanFormatterFilter") { int length = int.Parse(GetAttribute(element, "Length")); ByteArrayLengthGreatThanFormatterFilter filter = new ByteArrayLengthGreatThanFormatterFilter(filterName, length); if (element.Element("FormatterFilter") != null) { foreach (var subFilterElement in element.Elements("FormatterFilter")) { IFormatterFilter<byte[]> subFilter = (IFormatterFilter<byte[]>)GetFormatterFilter(subFilterElement); } } return filter; } else if (filterType == "ByteArrayLengthEqualFormatterFilter") { int length = int.Parse(GetAttribute(element, "Length")); ByteArrayLengthEqualFormatterFilter filter = new ByteArrayLengthEqualFormatterFilter(filterName, length); if (element.Element("FormatterFilter") != null) { foreach (var subFilterElement in element.Elements("FormatterFilter")) { IFormatterFilter<byte[]> subFilter = (IFormatterFilter<byte[]>)GetFormatterFilter(subFilterElement); } } return filter; } else if (filterType == "Custom") { string customTypeName = GetAttribute(element, "CustomTypeName"); Type type = Type.GetType(customTypeName); object[] args = null; if (element.Elements("Parameter") != null) { args = new object[element.Elements("Parameter").Count()]; int i = 0; foreach (var paraElement in element.Elements("Parameter")) { string pType = GetAttribute(paraElement, "Type"); string pValue = GetAttribute(paraElement, "Value"); object p = Convert.ChangeType(pValue, Type.GetType(pType)); args[i] = p; i++; } } object custom = System.Activator.CreateInstance(type, args); return custom; } else { throw new UnknownElementException("Unknown FormatterFilter type:" + filterType); } }