private void Client_ServerFailedToConnect() { //Resume heartbeat if we fail to connect //Basically the same as just doing another connect here... //But with some extra delay. I don't really know why //I'm doing it this way if (shouldHeartbeat) { heartbeatTimer.Start(); } FailedToConnectToServer?.Invoke(null); }
protected virtual void Client_PacketReceived(Packet packet) { #region LOGGING Log(packet); #endregion LOGGING //Ready to go, only disabled since it is currently unusued /*if (packet.Type != PacketType.Acknowledgement) * { * Send(packet.From, new Packet(new Acknowledgement() * { * PacketId = packet.Id * })); * }*/ if (packet.Type == PacketType.Acknowledgement) { Acknowledgement acknowledgement = packet.SpecificPacket as Acknowledgement; AckReceived?.Invoke(acknowledgement, packet.From); } else if (packet.Type == PacketType.Event) { Event @event = packet.SpecificPacket as Event; switch (@event.Type) { case Event.Types.EventType.CoordinatorAdded: AddCoordinatorReceived(@event.ChangedObject.Unpack <Coordinator>()); break; case Event.Types.EventType.CoordinatorLeft: RemoveCoordinatorReceived(@event.ChangedObject.Unpack <Coordinator>()); break; case Event.Types.EventType.MatchCreated: AddMatchReceived(@event.ChangedObject.Unpack <Match>()); break; case Event.Types.EventType.MatchUpdated: UpdateMatchReceived(@event.ChangedObject.Unpack <Match>()); break; case Event.Types.EventType.MatchDeleted: DeleteMatchReceived(@event.ChangedObject.Unpack <Match>()); break; case Event.Types.EventType.PlayerAdded: AddPlayerReceived(@event.ChangedObject.Unpack <Player>()); break; case Event.Types.EventType.PlayerUpdated: UpdatePlayerReceived(@event.ChangedObject.Unpack <Player>()); break; case Event.Types.EventType.PlayerLeft: RemovePlayerReceived(@event.ChangedObject.Unpack <Player>()); break; case Event.Types.EventType.QualifierEventCreated: AddQualifierEventReceived(@event.ChangedObject.Unpack <QualifierEvent>()); break; case Event.Types.EventType.QualifierEventUpdated: UpdateQualifierEventReceived(@event.ChangedObject.Unpack <QualifierEvent>()); break; case Event.Types.EventType.QualifierEventDeleted: DeleteQualifierEventReceived(@event.ChangedObject.Unpack <QualifierEvent>()); break; case Event.Types.EventType.HostAdded: break; case Event.Types.EventType.HostRemoved: break; default: Logger.Error($"Unknown command received!"); break; } } else if (packet.Type == PacketType.ConnectResponse) { var response = packet.SpecificPacket as ConnectResponse; if (response.Response.Type == Response.Types.ResponseType.Success) { switch (response.UserCase) { case ConnectResponse.UserOneofCase.Coordinator: SelfObject = response.Coordinator; Self = new User { Id = response.Coordinator.Id, Name = response.Coordinator.Name }; break; case ConnectResponse.UserOneofCase.Player: SelfObject = response.Player; Self = new User { Id = response.Player.Id, Name = response.Player.Name }; break; } State = response.State; ConnectedToServer?.Invoke(response); } else if (response.Response.Type == Response.Types.ResponseType.Fail) { FailedToConnectToServer?.Invoke(response); } } else if (packet.Type == PacketType.SongFinished) { PlayerFinishedSong?.Invoke(packet.SpecificPacket as SongFinished); } }
protected virtual void Client_PacketRecieved(Packet packet) { #region LOGGING string secondaryInfo = string.Empty; if (packet.Type == PacketType.PlaySong) { secondaryInfo = (packet.SpecificPacket as PlaySong).Beatmap.LevelId + " : " + (packet.SpecificPacket as PlaySong).Beatmap.Difficulty; } else if (packet.Type == PacketType.LoadSong) { secondaryInfo = (packet.SpecificPacket as LoadSong).LevelId; } else if (packet.Type == PacketType.Command) { secondaryInfo = (packet.SpecificPacket as Command).CommandType.ToString(); } else if (packet.Type == PacketType.Event) { secondaryInfo = (packet.SpecificPacket as Event).Type.ToString(); if ((packet.SpecificPacket as Event).Type == Event.EventType.PlayerUpdated) { secondaryInfo = $"{secondaryInfo} from ({((packet.SpecificPacket as Event).ChangedObject as Player).Name} : {((packet.SpecificPacket as Event).ChangedObject as Player).DownloadState}) : ({((packet.SpecificPacket as Event).ChangedObject as Player).PlayState} : {((packet.SpecificPacket as Event).ChangedObject as Player).Score} : {((packet.SpecificPacket as Event).ChangedObject as Player).StreamDelayMs})"; } else if ((packet.SpecificPacket as Event).Type == Event.EventType.MatchUpdated) { secondaryInfo = $"{secondaryInfo} ({((packet.SpecificPacket as Event).ChangedObject as Match).SelectedDifficulty})"; } } Logger.Debug($"Recieved {packet.ToBytes().Length} bytes: ({packet.Type}) ({secondaryInfo})"); #endregion LOGGING //Ready to go, only disabled since it is currently unusued /*if (packet.Type != PacketType.Acknowledgement) * { * Send(packet.From, new Packet(new Acknowledgement() * { * PacketId = packet.Id * })); * }*/ if (packet.Type == PacketType.Acknowledgement) { Acknowledgement acknowledgement = packet.SpecificPacket as Acknowledgement; AckReceived?.Invoke(acknowledgement, packet.From); } else if (packet.Type == PacketType.Event) { Event @event = packet.SpecificPacket as Event; switch (@event.Type) { case Event.EventType.CoordinatorAdded: AddCoordinatorRecieved(@event.ChangedObject as MatchCoordinator); break; case Event.EventType.CoordinatorLeft: RemoveCoordinatorRecieved(@event.ChangedObject as MatchCoordinator); break; case Event.EventType.MatchCreated: AddMatchRecieved(@event.ChangedObject as Match); break; case Event.EventType.MatchUpdated: UpdateMatchRecieved(@event.ChangedObject as Match); break; case Event.EventType.MatchDeleted: DeleteMatchRecieved(@event.ChangedObject as Match); break; case Event.EventType.PlayerAdded: AddPlayerRecieved(@event.ChangedObject as Player); break; case Event.EventType.PlayerUpdated: UpdatePlayerRecieved(@event.ChangedObject as Player); break; case Event.EventType.PlayerLeft: RemovePlayerRecieved(@event.ChangedObject as Player); break; default: Logger.Error($"Unknown command recieved!"); break; } } else if (packet.Type == PacketType.ConnectResponse) { var response = packet.SpecificPacket as ConnectResponse; if (response.Type == ConnectResponse.ResponseType.Success) { Self = response.Self; State = response.State; ConnectedToServer?.Invoke(response); } else if (response.Type == ConnectResponse.ResponseType.Fail) { FailedToConnectToServer?.Invoke(response); } } else if (packet.Type == PacketType.SongFinished) { PlayerFinishedSong?.Invoke(packet.SpecificPacket as SongFinished); } }