LocalConnectionToClient.cs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. using System;
  2. namespace Mirror
  3. {
  4. // a server's connection TO a LocalClient.
  5. // sending messages on this connection causes the client's handler function to be invoked directly
  6. public class LocalConnectionToClient : NetworkConnectionToClient
  7. {
  8. internal LocalConnectionToServer connectionToServer;
  9. public LocalConnectionToClient() : base(LocalConnectionId) {}
  10. public override string address => "localhost";
  11. // Send stage two: serialized NetworkMessage as ArraySegment<byte>
  12. internal override void Send(ArraySegment<byte> segment, int channelId = Channels.Reliable)
  13. {
  14. // get a writer to copy the message into since the segment is only
  15. // valid until returning.
  16. // => pooled writer will be returned to pool when dequeuing.
  17. // => WriteBytes instead of WriteArraySegment because the latter
  18. // includes a 4 bytes header. we just want to write raw.
  19. //Debug.Log($"Enqueue {BitConverter.ToString(segment.Array, segment.Offset, segment.Count)}");
  20. NetworkWriterPooled writer = NetworkWriterPool.Get();
  21. writer.WriteBytes(segment.Array, segment.Offset, segment.Count);
  22. connectionToServer.queue.Enqueue(writer);
  23. }
  24. // true because local connections never timeout
  25. internal override bool IsAlive(float timeout) => true;
  26. internal void DisconnectInternal()
  27. {
  28. // set not ready and handle clientscene disconnect in any case
  29. // (might be client or host mode here)
  30. isReady = false;
  31. RemoveFromObservingsObservers();
  32. }
  33. /// <summary>Disconnects this connection.</summary>
  34. public override void Disconnect()
  35. {
  36. DisconnectInternal();
  37. connectionToServer.DisconnectInternal();
  38. }
  39. }
  40. }