public override INetworkSerializable[] CreateSerializables(EntityManager entityManager, Entity entity)
    {
        var serializableArray = new INetworkSerializable[1];

        serializableArray[0] = new SerializedComponentDataHandler <ProjectileData>(entityManager, entity);
        return(serializableArray);
    }
Example #2
0
        public static void Send(this NetworkConnection connection, byte header,
                                INetworkSerializable message, NetworkReliablity reliablity = NetworkReliablity.Reliable)
        {
            var writer = new Serializer();

            writer.Write(header);
            message.Serialize(writer);
            connection.SendBytes(writer.AsArray(), writer.Position, reliablity);
            (message as IDisposable)?.Dispose();
        }
Example #3
0
 public void AddGob(int gobId, INetworkSerializable gob, SerializationModeFlags serializationMode)
 {
     // Note: Data in GobUpdateMessage may get lost on client because of this case:
     // Client doesn't have the gob at the moment the update message is received.
     // Because the gob doesn't exist, the client doesn't know the type of the gob and
     // therefore has no way of knowing how many bytes in the message are for that one gob.
     // The only solution is to skip the remaining message, losing many gob updates.
     // This is why GobUpdateMessage sends only varying data.
     if (_state != StateType.Initial && _state != StateType.AddingGobs) throw new InvalidOperationException("Cannot add a gob in state " + _state);
     _state = StateType.AddingGobs;
     _gobIds.Add(gobId);
     Write(gob, serializationMode);
 }
 public void Add(int id, INetworkSerializable spectatorOrTeam, SerializationModeFlags serializationMode)
 {
     _ids.Add(id);
     Write(spectatorOrTeam, serializationMode);
 }
Example #5
0
 public void Write(INetworkSerializable msg) => msg.Serialize(this);
 public void Add(int id, INetworkSerializable item, SerializationModeFlags mode)
 {
     _ids.Add(id);
     Write(item, mode);
 }
Example #7
0
 public void Add(INetworkSerializable message)
 {
     message.Serialize(this);
 }
Example #8
0
 /// <summary>
 /// Writes a serialisable object to streamed data, 
 /// appending to previously written streamed data.
 /// </summary>
 /// <param name="serializable">The object to serialise.</param>
 /// <param name="mode">What to serialise of the serialisable object.</param>
 /// <returns>The number of serialised bytes.</returns>
 public int Write(INetworkSerializable serializable, SerializationModeFlags mode)
 {
     switch (DataMode)
     {
         case DataModeType.Uninitialized:
             _writer = NetworkBinaryWriter.Create(new MemoryStream());
             break;
         case DataModeType.SettingDataByWrite:
             break;
         default:
             throw new InvalidOperationException("Cannot Write() streamed data in mode " + DataMode);
     }
     DataMode = DataModeType.SettingDataByWrite;
     long oldPos = _writer.Seek(0, SeekOrigin.Current);
     serializable.Serialize(_writer, mode);
     long newPos = _writer.Seek(0, SeekOrigin.Current);
     return (int)(newPos - oldPos);
 }
Example #9
0
        /// <summary>
        /// Reads the state of a serialisable object from streamed data
        /// at the current read position.
        /// </summary>
        /// <param name="serializable">The object to adopt the serialised state.</param>
        /// <param name="mode">What kind of state we are deserialising. Must match 
        /// the mode the data was written in.</param>
        /// <param name="framesAgo">How long ago was the message current.</param>
        public void Read(INetworkSerializable serializable, SerializationModeFlags mode, int framesAgo)
        {
            SetDataModeToRead();
            serializable.Deserialize(_reader, mode, framesAgo);

            // The reader will be closed when the message goes to garbage collection.
            // For now, we leave it open for successive calls to Read().
            //reader.Close();
        }