Example #1
0
        public override void Receive(byte[] data, int startIndex, int length)
        {
            //UnityEngine.Debug.LogError("Receive: " + GetType().ToString() + ": " + DeBox.Teleport.Debugging.TeleportDebugUtils.DebugString(data, startIndex, length));
            var expectedDataSize = BitConverter.ToUInt16(data, startIndex);

            startIndex += sizeof(ushort);
            length      = length - sizeof(ushort);
            var receivedDataSize = length;

            if (_receiveLeftoversLength > 0)
            {
                Array.Copy(data, startIndex, _receiveLeftovers, _receiveLeftoversLength, receivedDataSize);
                data = _receiveLeftovers;
                _receiveLeftoversLength = _receiveLeftoversLength + receivedDataSize;
                receivedDataSize        = _receiveLeftoversLength;
                UnityEngine.Debug.LogError("Had leftovers");
                startIndex = 0;
                length     = _receiveLeftoversLength;
            }
            if (expectedDataSize > receivedDataSize)
            {
                Array.Copy(data, startIndex, _receiveLeftovers, 0, receivedDataSize);
                _receiveLeftoversLength = receivedDataSize;
                UnityEngine.Debug.LogError("Not enough data! expected: " + expectedDataSize + " got: " + receivedDataSize);
                return;
            }
            else if (expectedDataSize < receivedDataSize)
            {
                _receiveLeftoversLength = receivedDataSize - expectedDataSize;
                Array.Copy(data, startIndex + expectedDataSize, _receiveLeftovers, 0, _receiveLeftoversLength);
                length = expectedDataSize;
            }
            InternalChannel.Receive(data, startIndex, length);
        }
Example #2
0
        private void ProcessInbox()
        {
            if (_inbox.Count == 0)
            {
                return;
            }
            InboxItem inboxItem;
            ushort    nextIndex;

            while (_lastReceiveIndex > _lastProcessedReceiveIndex)
            {
                nextIndex = (ushort)(_lastProcessedReceiveIndex + 1);
                if (!_inbox.TryGetValue(nextIndex, out inboxItem))
                {
                    break;
                }

                InternalChannel.Receive(inboxItem.data, inboxItem.startIndex, inboxItem.length);
                _lastProcessedReceiveIndex = nextIndex;
            }
        }