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

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.

                   while (stream.GetBytesRead() < stream.Length)
                    {
                        byte header = stream.ReadByte();
                        switch (header)
                        {
                            case (byte) Headers.Ping:
                                break;
                            case (byte) Headers.ClientDisconnect:
                                _handlerSystem.DisconnectedPlayer(ref stream);
                                break;
                            case (byte) Headers.EntityPosition:
                                _handlerSystem.GetNewEntityPosition(ref stream);
                                break;
                            case (byte) Headers.BuildingUpdate:
                                _handlerSystem.HandleBuildingUpdate(ref stream);
                                break;
                            case (byte) Headers.DensityUpdate:
                                _handlerSystem.HandleDensityUpdate(ref stream);
                                break;
                            case (byte) Headers.GridUpdate:
                                _handlerSystem.UpdateGrid(ref stream);
                                break;
                            case (byte) Headers.SeedAndMapsize:
                                _handlerSystem.SetSeedAndMapsize(ref stream);
                                break;
                            case (byte) Headers.Welcome:
                                _handlerSystem.HandleWelcome();
                                break;
                            case (byte) Headers.DespawnEntity:
                                _handlerSystem.DespawnEntity(ref stream);
                                break;
                            case (byte) Headers.LastPlayerPosition:
                                _handlerSystem.ReceiveLastSpawnPositionOfPlayer(ref stream);
                                break;
                            case (byte) Headers.ReadyToPlay:
                                _handlerSystem.ReadyToPlay();
                                break;
                            case (byte) Headers.PlayerList:
                                _handlerSystem.UpdatePlayerList(ref stream);
                                break;
                            case (byte) Headers.TimeInformation:
                                _handlerSystem.SetTime(ref stream);
                                break;
                            case (byte) Headers.GetMovableEntityInfo:
                                _handlerSystem.SpawnMovableEntity(ref stream);
                                break;
                            case (byte) Headers.WindSpeed:
                                _handlerSystem.SetWindSpeed(ref stream);
                                break;
                        }

When will the documentation of Unity Transport be updated? Especially with more info regarding the usage of the Fragmentation Pipeline?

1 Like

I’ve implemented it but I’d love to hear more about the package but theres literally no video tutorials.