private BSPMessage parse(Message message) { if (message == null) { Console.Error.WriteLine("Could not parse null message"); return(null); } NetworkBuffer buffer = new NetworkBuffer(message.data); if (buffer.size() < HEADER_LENGTH) { throw new Exception("Invalid message: " + System.Text.Encoding.Default.GetString(buffer.getBuffer())); } int messageType = buffer.parseInt32(HEADER_TYPE_OFFSET); BSPMessageType type = BSPMessageType.UNKNOWN; if (Enum.IsDefined(typeof(BSPMessageType), messageType)) { type = (BSPMessageType)messageType; } int sourceID = buffer.parseInt32(HEADER_SOURCE_OFFSET); int bytesRemaining = buffer.size() - HEADER_LENGTH; NetworkBuffer data = new NetworkBuffer(bytesRemaining); if (bytesRemaining > 0) { data.writeBytes(buffer.getBuffer(), HEADER_LENGTH, 0, bytesRemaining); } return(new BSPMessage(message.address, type, sourceID, data)); }
private Message formatMessage(BSPMessage data) { if (data == null) { Console.Error.WriteLine("Could not format null data"); return(null); } int messageLength = data.getData().size(); NetworkBuffer messageData = new NetworkBuffer(HEADER_LENGTH + messageLength); messageData.writeInt32(HEADER_TYPE_OFFSET, (int)data.getType()); messageData.writeInt32(HEADER_SOURCE_OFFSET, data.getSourceID()); if (data.getData().size() > 0) { messageData.writeBytes(data.getData().getBuffer(), 0, HEADER_LENGTH, data.getData().size()); } return(new Message(data.getAddress(), messageData.getBuffer())); }