//// Writing public void WriteHeader(int clientIndex, double startTimestamp, byte[] data) { if (_mode != Mode.Write) { Debug.LogError("SessionCaptureFileStream: Cannot call WriteHeader on read stream."); return; } if (_writing) { Debug.LogError("SessionCaptureFileStream: WriteHeader() has been called twice. Ignoring. This is a bug!"); return; } // Keep track of start timestamps so all future timestamps can be written as deltas _startTimestamp = startTimestamp; // Write local client ID WriteVarint32ToStream(_gzipStream, WriteStream.ConvertNegativeOneIntToUInt(clientIndex)); // Write start timestamp WriteDoubleToStream(_gzipStream, _startTimestamp); // Initial datastore data length WriteVarint32ToStream(_gzipStream, (uint)data.Length); // Initial datastore data _gzipStream.Write(data, 0, data.Length); _writing = true; }
public void Write(WriteStream stream, StreamContext context) { if (context.fullModel) { // ClientID/StreamID stream.WriteVarint32(1, WriteStream.ConvertNegativeOneIntToUInt(_clientID)); stream.WriteVarint32(2, WriteStream.ConvertNegativeOneIntToUInt(_streamID)); } else { // ClientID/StreamID if (context.reliableChannel) { // If we're going to send an update. Push the cache to inflight. LocalCacheEntry entry = _cache.localCache; if (entry.clientIDSet || entry.streamIDSet) { _cache.PushLocalCacheToInflight(context.updateID); } if (entry.clientIDSet) { stream.WriteVarint32(1, WriteStream.ConvertNegativeOneIntToUInt(entry.clientID)); } if (entry.streamIDSet) { stream.WriteVarint32(2, WriteStream.ConvertNegativeOneIntToUInt(entry.streamID)); } } } }
// Serialization public int WriteLength(StreamContext context) { int length = 0; if (context.fullModel) { // Flatten cache _clientID = clientID; _streamID = streamID; _cache.Clear(); // ClientID/StreamID length += WriteStream.WriteVarint32Length(1, WriteStream.ConvertNegativeOneIntToUInt(_clientID)); length += WriteStream.WriteVarint32Length(2, WriteStream.ConvertNegativeOneIntToUInt(_streamID)); } else { // ClientID/StreamID if (context.reliableChannel) { LocalCacheEntry entry = _cache.localCache; if (entry.clientIDSet) { length += WriteStream.WriteVarint32Length(1, WriteStream.ConvertNegativeOneIntToUInt(entry.clientID)); } if (entry.streamIDSet) { length += WriteStream.WriteVarint32Length(2, WriteStream.ConvertNegativeOneIntToUInt(entry.streamID)); } } } return(length); }
private static uint CombineSenderReliableAndIncoming(int sender, bool reliable, bool incoming) { uint senderUInt = WriteStream.ConvertNegativeOneIntToUInt(sender); uint reliableUInt = reliable ? 1u : 0u; uint incomingUInt = incoming ? 1u : 0u; return((senderUInt << 2) | (reliableUInt << 1) | (incomingUInt << 0)); }