private static void HandleVesselDock(ClientStructure client, VesselBaseMsgData message) { var msgData = (VesselDockMsgData)message; LunaLog.Debug($"Docking message received! Dominant vessel: {msgData.DominantVesselId}"); if (VesselContext.RemovedVessels.Contains(msgData.WeakVesselId)) { return; } if (VesselStoreSystem.VesselExists(msgData.DominantVesselId)) { LunaLog.Debug($"Saving DOCKED vessel {msgData.DominantVesselId} from {client.PlayerName}. Bytes: {msgData.NumBytes}"); } VesselDataUpdater.RawConfigNodeInsertOrUpdate(msgData.DominantVesselId, Encoding.UTF8.GetString(msgData.FinalVesselData, 0, msgData.NumBytes)); //Now remove the weak vessel but DO NOT add to the removed vessels as they might undock!!! LunaLog.Debug($"Removing weak docked vessel {msgData.WeakVesselId}"); VesselStoreSystem.RemoveVessel(msgData.WeakVesselId); MessageQueuer.RelayMessage <VesselSrvMsg>(client, msgData); //Tell all clients to remove the weak vessel var removeMsgData = ServerContext.ServerMessageFactory.CreateNewMessageData <VesselRemoveMsgData>(); removeMsgData.VesselId = msgData.WeakVesselId; MessageQueuer.SendToAllClients <VesselSrvMsg>(removeMsgData); }
private static void HandleVesselRemove(ClientStructure client, VesselBaseMsgData message) { var data = (VesselRemoveMsgData)message; if (data.Force) { LunaLog.Debug($"Received a FORCED remove against vessel {data.VesselId} from {client.PlayerName}"); } if (!data.Force && LockSystem.LockQuery.ControlLockExists(data.VesselId) && !LockSystem.LockQuery.ControlLockBelongsToPlayer(data.VesselId, client.PlayerName)) { return; } if (VesselStoreSystem.VesselExists(data.VesselId)) { LunaLog.Debug($"Removing vessel {data.VesselId} from {client.PlayerName}"); VesselStoreSystem.RemoveVessel(data.VesselId); } if (data.AddToKillList) { VesselContext.RemovedVessels.Add(data.VesselId); } //Relay the message. MessageQueuer.SendToAllClients <VesselSrvMsg>(data); }
public override bool Execute(string commandArgs) { var allLocks = new List <LockDefinition>(); foreach (var lockDefinition in LockSystem.LockQuery.GetAllLocks()) { switch (lockDefinition.Type) { case LockType.Contract: case LockType.Asteroid: case LockType.Kerbal: case LockType.Spectator: allLocks.Add(lockDefinition); break; case LockType.Control: case LockType.Update: case LockType.UnloadedUpdate: if (VesselStoreSystem.VesselExists(lockDefinition.VesselId)) { allLocks.Add(lockDefinition); } break; default: throw new ArgumentOutOfRangeException(); } } if (!allLocks.Any()) { LunaLog.Normal("No locks"); } else { foreach (var lockDef in allLocks) { LunaLog.Normal(lockDef.ToString()); } } return(true); }
private static void HandleVesselProto(ClientStructure client, VesselBaseMsgData message) { var msgData = (VesselProtoMsgData)message; if (VesselContext.RemovedVessels.Contains(msgData.Vessel.VesselId)) { return; } if (msgData.Vessel.NumBytes == 0) { LunaLog.Warning($"Received a vessel with 0 bytes ({msgData.Vessel.VesselId}) from {client.PlayerName}."); return; } if (!VesselStoreSystem.VesselExists(msgData.Vessel.VesselId)) { LunaLog.Debug($"Saving vessel {msgData.Vessel.VesselId} from {client.PlayerName}. Bytes: {msgData.Vessel.NumBytes}"); } VesselDataUpdater.RawConfigNodeInsertOrUpdate(msgData.Vessel.VesselId, Encoding.UTF8.GetString(msgData.Vessel.Data, 0, msgData.Vessel.NumBytes)); MessageQueuer.RelayMessage <VesselSrvMsg>(client, msgData); }