Ejemplo n.º 1
0
 public BSPMessage(IPEndPoint address, BSPMessageType type, int sourceID, NetworkBuffer messageData)
 {
     this.address     = address;
     this.type        = type;
     this.sourceID    = sourceID;
     this.messageData = messageData;
 }
Ejemplo n.º 2
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));
        }
Ejemplo n.º 3
0
        public void synchronizeAllBeliefs()
        {
            if (protocol.getConnection().getRemoteAddress() == null)
            {
                return;
            }

            RepositoryStateSerializer serializer = new RepositoryStateSerializer();
            NetworkBuffer             buffer     = serializer.serialize(repo.CurrentState());
            BSPMessage message = new BSPMessage(protocol.getConnection().getRemoteAddress(),
                                                BSPMessageType.SYNC,
                                                protocol.getAgentID(),
                                                buffer);

            protocol.getConnection().send(message);
        }
Ejemplo n.º 4
0
        public RepositoryState deserialize(NetworkBuffer buffer)
        {
            int             revisionNumber = buffer.parseInt32(COMMIT_OFFSET);
            RepositoryState state          = new RepositoryState(revisionNumber);

            int numberOfBeliefs = buffer.parseInt32(NUM_BELIEFS_OFFSET);
            int baseOffset      = HEADER_SIZE;

            for (int i = 0; i < numberOfBeliefs; ++i, baseOffset += BELIEF_SIZE)
            {
                int typeVal            = buffer.readByte(baseOffset + TYPE_OFFSET);
                Belief.BeliefType type = Belief.BeliefType.INVALID;
                if (Enum.IsDefined(typeof(Belief.BeliefType), typeVal))
                {
                    type = (Belief.BeliefType)typeVal;
                }
                else
                {
                    Log.error("Invalid belief type: " + typeVal);
                }

                int    customType = buffer.parseInt32(baseOffset + CUSTOM_TYPE_OFFSET);
                int    id         = buffer.parseInt32(baseOffset + BELIEF_ID_OFFSET);
                byte[] digest     = buffer.readBytes(baseOffset + DIGEST_OFFSET, DIGEST_SIZE);
                Hash   hash       = new Hash(digest);

                Belief.Key key = null;
                if (type == Belief.BeliefType.CUSTOM)
                {
                    key = new Belief.Key(customType);
                }
                else
                {
                    key = new Belief.Key(type);
                }

                state.Add(new CacheKey(key, id), hash);
            }

            return(state);
        }
Ejemplo n.º 5
0
        public NetworkBuffer serialize(RepositoryState state)
        {
            NetworkBuffer buffer = new NetworkBuffer(HEADER_SIZE + (state.Size() * BELIEF_SIZE));

            buffer.writeInt32(COMMIT_OFFSET, state.RevisionNumber());
            buffer.writeInt32(NUM_BELIEFS_OFFSET, state.Size());

            int offset = HEADER_SIZE;

            foreach (RepositoryState.RepositoryObject belief in state.GetObjects())
            {
                buffer.writeByte(offset + TYPE_OFFSET, (byte)belief.key.getBeliefType());
                buffer.writeInt32(offset + CUSTOM_TYPE_OFFSET, belief.key.getCustomType());
                buffer.writeInt32(offset + BELIEF_ID_OFFSET, belief.key.getBeliefID());

                byte[] hashBytes = belief.hash.GetBytes();
                buffer.writeBytes(hashBytes, 0, offset + DIGEST_OFFSET, hashBytes.Length);
            }

            return(buffer);
        }
Ejemplo n.º 6
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()));
        }