public MultiPlayerClient(IClientNetworkProvider networkProvider) { this.clientNetworkProvider = networkProvider; networkProvider.MessageReceived.SubscribeForLifetime((m) => { var hydratedEvent = MultiPlayerMessage.Deserialize(m); EventRouter.Route(hydratedEvent.GetType().Name, hydratedEvent); }, this); this.OnDisposed(() => { if (isConnected) { TrySendMessage(new LeftMessage() { ClientWhoLeft = this.ClientId }); } this.clientNetworkProvider.Dispose(); }); EventRouter.Register <Ack>(OnAck, this); }