LocalConnectionToClient.cs 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  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. // don't ping host client in host mode
  27. protected override void UpdatePing() {}
  28. internal void DisconnectInternal()
  29. {
  30. // set not ready and handle clientscene disconnect in any case
  31. // (might be client or host mode here)
  32. isReady = false;
  33. RemoveFromObservingsObservers();
  34. }
  35. /// <summary>Disconnects this connection.</summary>
  36. public override void Disconnect()
  37. {
  38. DisconnectInternal();
  39. connectionToServer.DisconnectInternal();
  40. }
  41. }
  42. }