Пример #1
0
        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));
        }
Пример #2
0
        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()));
        }