Search Unity

  1. Welcome to the Unity Forums! Please take the time to read our Code of Conduct to familiarize yourself with the forum rules and how to post constructively.
  2. Dismiss Notice

Question Unity Transport 0.5 Fragmentation PipeLine Large then MTU breaks stream.Read()

Discussion in 'Entity Component System' started by sietse85, Nov 2, 2020.

  1. sietse85

    sietse85

    Joined:
    Feb 22, 2019
    Posts:
    99
    Hello all! I use the below code to read network Events in my Tick() loop. The code works fine.

    But then I added the fragmentation pipeline (so i can send large then MTU size) and when the messages are larger then the MTU threshold the following code breaks ( It says I am trying to read outside of the stream ).

    Is the code below sufficient to read when using the fragmentation pipeline or do I need to do more here? I am a bit uncertain if Unity Transport assembles the packets and then makes an event or not.

    Code (CSharp):
    1.  
    2.                    while (stream.GetBytesRead() < stream.Length)
    3.                     {
    4.                         byte header = stream.ReadByte();
    5.                         switch (header)
    6.                         {
    7.                             case (byte) Headers.Ping:
    8.                                 break;
    9.                             case (byte) Headers.ClientDisconnect:
    10.                                 _handlerSystem.DisconnectedPlayer(ref stream);
    11.                                 break;
    12.                             case (byte) Headers.EntityPosition:
    13.                                 _handlerSystem.GetNewEntityPosition(ref stream);
    14.                                 break;
    15.                             case (byte) Headers.BuildingUpdate:
    16.                                 _handlerSystem.HandleBuildingUpdate(ref stream);
    17.                                 break;
    18.                             case (byte) Headers.DensityUpdate:
    19.                                 _handlerSystem.HandleDensityUpdate(ref stream);
    20.                                 break;
    21.                             case (byte) Headers.GridUpdate:
    22.                                 _handlerSystem.UpdateGrid(ref stream);
    23.                                 break;
    24.                             case (byte) Headers.SeedAndMapsize:
    25.                                 _handlerSystem.SetSeedAndMapsize(ref stream);
    26.                                 break;
    27.                             case (byte) Headers.Welcome:
    28.                                 _handlerSystem.HandleWelcome();
    29.                                 break;
    30.                             case (byte) Headers.DespawnEntity:
    31.                                 _handlerSystem.DespawnEntity(ref stream);
    32.                                 break;
    33.                             case (byte) Headers.LastPlayerPosition:
    34.                                 _handlerSystem.ReceiveLastSpawnPositionOfPlayer(ref stream);
    35.                                 break;
    36.                             case (byte) Headers.ReadyToPlay:
    37.                                 _handlerSystem.ReadyToPlay();
    38.                                 break;
    39.                             case (byte) Headers.PlayerList:
    40.                                 _handlerSystem.UpdatePlayerList(ref stream);
    41.                                 break;
    42.                             case (byte) Headers.TimeInformation:
    43.                                 _handlerSystem.SetTime(ref stream);
    44.                                 break;
    45.                             case (byte) Headers.GetMovableEntityInfo:
    46.                                 _handlerSystem.SpawnMovableEntity(ref stream);
    47.                                 break;
    48.                             case (byte) Headers.WindSpeed:
    49.                                 _handlerSystem.SetWindSpeed(ref stream);
    50.                                 break;
    51.                         }
     
  2. sietse85

    sietse85

    Joined:
    Feb 22, 2019
    Posts:
    99
    When will the documentation of Unity Transport be updated? Especially with more info regarding the usage of the Fragmentation Pipeline?
     
    Mxill likes this.
  3. Mxill

    Mxill

    Joined:
    Jul 25, 2017
    Posts:
    62
    I've implemented it but I'd love to hear more about the package but theres literally no video tutorials.