public static byte[] encoder(Message message) { int location = 0; byte[] finalMessage = new byte[getMessageSize(message) + 4]; byte[] totalSizeMessage = BitConverter.GetBytes(getMessageSize(message)); totalSizeMessage.CopyTo(finalMessage, location); location += 4; MessageItem mSource = new MessageItem(message.Source); mSource.getItemSizeAndContent().CopyTo(finalMessage, location); location += mSource.getItemLength(); MessageItem mTarget = new MessageItem(message.Target); mTarget.getItemSizeAndContent().CopyTo(finalMessage, location); location += mTarget.getItemLength(); MessageItem mOperation = new MessageItem(message.Operation); mOperation.getItemSizeAndContent().CopyTo(finalMessage, location); location += mOperation.getItemLength(); MessageItem mStamp = new MessageItem(message.Stamp); mStamp.getItemSizeAndContent().CopyTo(finalMessage, location); location += mStamp.getItemLength(); BitConverter.GetBytes(message.ListParams.Count).CopyTo(finalMessage, location); location += 4; foreach (string param in message.ListParams) { MessageItem mParam = new MessageItem(param); mParam.getItemSizeAndContent().CopyTo(finalMessage, location); location += mParam.getItemLength(); } return finalMessage; }
public static Message decoder(byte[] restMessage) { byte[] sizeSource = readNByte(restMessage, 4); restMessage = removeNByte(restMessage, 4); byte[] contentSource = readNByte(restMessage, byteToInt(sizeSource)); restMessage = removeNByte(restMessage, byteToInt(sizeSource)); MessageItem source = new MessageItem(sizeSource, contentSource); byte[] sizeTarget = readNByte(restMessage, 4); restMessage = removeNByte(restMessage, 4); byte[] contentTarget = readNByte(restMessage, byteToInt(sizeTarget)); restMessage = removeNByte(restMessage, byteToInt(sizeTarget)); MessageItem target = new MessageItem(sizeTarget, contentTarget); byte[] sizeOperation = readNByte(restMessage, 4); restMessage = removeNByte(restMessage, 4); byte[] contentOperation = readNByte(restMessage, byteToInt(sizeOperation)); restMessage = removeNByte(restMessage, byteToInt(sizeOperation)); MessageItem operation = new MessageItem(sizeOperation, contentOperation); byte[] sizeStamp = readNByte(restMessage, 4); restMessage = removeNByte(restMessage, 4); byte[] contentStamp = readNByte(restMessage, byteToInt(sizeStamp)); restMessage = removeNByte(restMessage, byteToInt(sizeStamp)); MessageItem stamp = new MessageItem(sizeStamp, contentStamp); byte[] paramsCount = readNByte(restMessage, 4); restMessage = removeNByte(restMessage, 4); List<string> listParams = new List<string>(); for (int i = 0; i < byteToInt(paramsCount); i++) { byte[] sizeParam = readNByte(restMessage, 4); restMessage = removeNByte(restMessage, 4); byte[] contentParam = readNByte(restMessage, byteToInt(sizeParam)); restMessage = removeNByte(restMessage, byteToInt(sizeParam)); listParams.Add((new MessageItem(sizeParam, contentParam)).DecoderItem()); } return new Message(source.DecoderItem(), target.DecoderItem(), operation.DecoderItem() , stamp.DecoderItem(), listParams); }