Beispiel #1
0
        //// 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;
        }
Beispiel #2
0
        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));
                    }
                }
            }
        }
Beispiel #3
0
        // 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);
        }
Beispiel #4
0
        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));
        }