Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #4
0
        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);
        }