예제 #1
0
 public static Action <MessageMetaData, BasicMessage.CreateObject, NetBuffer> CreateObject(
     ObjectMessageParser messageParser,
     ReplicatedObjectStore objectStore)
 {
     return((metadata, message, reader) => {
         var instance = objectStore.Instantiate(message.ObjectType, message.ObjectRole,
                                                message.ObjectId, metadata.ConnectionId, message.Position, message.Rotation);
         var bytesRead = 0;
         while (bytesRead < message.AdditionalData.WriterPosition())
         {
             var objectMessage = messageParser.Parse(message.AdditionalData);
             bytesRead = message.AdditionalData.ReaderPosition();
             objectStore.DispatchMessage(metadata.ConnectionId, message.ObjectId, objectMessage,
                                         new SequenceNumber(1), metadata.Latency);
         }
         objectStore.Activate(instance);
     });
 }
예제 #2
0
        public void Activate(ReplicatedObject replicatedObject)
        {
            // Generate initial state and send it to self
            _initialStateBuffer.Reset();
            replicatedObject.ReplicationConstructor.SerializeInitialState(_initialStateBuffer);
            var bytesRead = 0;

            while (bytesRead < _initialStateBuffer.WriterPosition())
            {
                var objectMessage = _messageParser.Parse(_initialStateBuffer);
                bytesRead = _initialStateBuffer.ReaderPosition();
                _store.DispatchMessage(ConnectionId.Self, replicatedObject.Id, objectMessage,
                                       new SequenceNumber(1), latency: 0f);
            }

            _store.Activate(replicatedObject);

            _networkReplicator.Replicate(_connectionGroup.ActiveConnections, replicatedObject);
        }