protected override void OnUpdate() { base.OnUpdate(); foreach (var(_, feature) in Features) { feature.Driver.Update(); while (feature.Driver.Accept().IsCreated) { } TransportEvent ev; while ((ev = feature.Driver.PopEvent()).Type != TransportEvent.EType.None) { switch (ev.Type) { case TransportEvent.EType.None: break; case TransportEvent.EType.RequestConnection: break; case TransportEvent.EType.Connect: break; case TransportEvent.EType.Disconnect: break; case TransportEvent.EType.Data: var reader = new DataBufferReader(ev.Data); var type = (EAudioSendType)reader.ReadValue <int>(); switch (type) { case EAudioSendType.Unknown: break; case EAudioSendType.RegisterResource: OnReceiveResource(ev.Connection, ref reader); break; case EAudioSendType.RegisterPlayer: OnReceivePlayer(ev.Connection, ref reader); break; case EAudioSendType.SendAudioPlayerData: var player = reader.ReadBuffer <CharBuffer128>(); var @delegate = playerManager.GetDelegate(player); @delegate?.Invoke(ev.Connection, ref reader); break; default: throw new ArgumentOutOfRangeException($"EAudioSendType: " + type); } break; default: throw new ArgumentOutOfRangeException($"MessageType" + ev.Type); } } } }