1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- //------------------------------------------------------------
- // Game Framework
- // Copyright © 2013-2021 Jiang Yin. All rights reserved.
- // Homepage: https://gameframework.cn/
- // Feedback: mailto:ellan@gameframework.cn
- //------------------------------------------------------------
- using System;
- using System.IO;
- namespace GameFramework.Network
- {
- internal sealed partial class NetworkManager : GameFrameworkModule, INetworkManager
- {
- private sealed class ReceiveState : IDisposable
- {
- private const int DefaultBufferLength = 1024 * 64;
- private MemoryStream m_Stream;
- private IPacketHeader m_PacketHeader;
- private bool m_Disposed;
- public ReceiveState()
- {
- m_Stream = new MemoryStream(DefaultBufferLength);
- m_PacketHeader = null;
- m_Disposed = false;
- }
- public MemoryStream Stream
- {
- get
- {
- return m_Stream;
- }
- }
- public IPacketHeader PacketHeader
- {
- get
- {
- return m_PacketHeader;
- }
- }
- public void PrepareForPacketHeader(int packetHeaderLength)
- {
- Reset(packetHeaderLength, null);
- }
- public void PrepareForPacket(IPacketHeader packetHeader)
- {
- if (packetHeader == null)
- {
- throw new GameFrameworkException("Packet header is invalid.");
- }
- Reset(packetHeader.PacketLength, packetHeader);
- }
- public void Dispose()
- {
- Dispose(true);
- GC.SuppressFinalize(this);
- }
- private void Dispose(bool disposing)
- {
- if (m_Disposed)
- {
- return;
- }
- if (disposing)
- {
- if (m_Stream != null)
- {
- m_Stream.Dispose();
- m_Stream = null;
- }
- }
- m_Disposed = true;
- }
- private void Reset(int targetLength, IPacketHeader packetHeader)
- {
- if (targetLength < 0)
- {
- throw new GameFrameworkException("Target length is invalid.");
- }
- m_Stream.Position = 0L;
- m_Stream.SetLength(targetLength);
- m_PacketHeader = packetHeader;
- }
- }
- }
- }
|