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); }
public override void HandleMessage(ClientStructure client, IClientMessageBase message) { var messageData = message.Data as VesselBaseMsgData; switch (messageData?.VesselMessageType) { case VesselMessageType.Sync: HandleVesselsSync(client, messageData); message.Recycle(); break; case VesselMessageType.Proto: HandleVesselProto(client, messageData); break; case VesselMessageType.Dock: HandleVesselDock(client, messageData); break; case VesselMessageType.Remove: HandleVesselRemove(client, messageData); break; case VesselMessageType.Position: VesselRelaySystem.HandleVesselMessage(client, messageData); if (!GeneralSettings.SettingsStore.ShowVesselsInThePast || client.Subspace == WarpContext.LatestSubspace) { VesselDataUpdater.WritePositionDataToFile(messageData); } break; case VesselMessageType.Flightstate: VesselRelaySystem.HandleVesselMessage(client, messageData); break; case VesselMessageType.Update: VesselDataUpdater.WriteUpdateDataToFile(messageData); MessageQueuer.RelayMessage <VesselSrvMsg>(client, messageData); break; case VesselMessageType.Resource: VesselDataUpdater.WriteResourceDataToFile(messageData); MessageQueuer.RelayMessage <VesselSrvMsg>(client, messageData); break; case VesselMessageType.PartSync: VesselDataUpdater.WriteModuleDataToFile(messageData); MessageQueuer.RelayMessage <VesselSrvMsg>(client, messageData); break; case VesselMessageType.Fairing: VesselDataUpdater.WriteFairingDataToFile(messageData); MessageQueuer.RelayMessage <VesselSrvMsg>(client, messageData); break; default: throw new NotImplementedException("Vessel message type not implemented"); } }
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); }
public override void HandleMessage(ClientStructure client, IClientMessageBase message) { var messageData = message.Data as VesselBaseMsgData; switch (messageData?.VesselMessageType) { case VesselMessageType.Sync: HandleVesselsSync(client, messageData); message.Recycle(); break; case VesselMessageType.Proto: HandleVesselProto(client, messageData); break; case VesselMessageType.Remove: HandleVesselRemove(client, messageData); break; case VesselMessageType.Position: MessageQueuer.RelayMessage <VesselSrvMsg>(client, messageData); if (client.Subspace == WarpContext.LatestSubspace.Id) { VesselDataUpdater.WritePositionDataToFile(messageData); } break; case VesselMessageType.Flightstate: MessageQueuer.RelayMessage <VesselSrvMsg>(client, messageData); VesselDataUpdater.WriteFlightstateDataToFile(messageData); break; case VesselMessageType.Update: VesselDataUpdater.WriteUpdateDataToFile(messageData); MessageQueuer.RelayMessage <VesselSrvMsg>(client, messageData); break; case VesselMessageType.Resource: VesselDataUpdater.WriteResourceDataToFile(messageData); MessageQueuer.RelayMessage <VesselSrvMsg>(client, messageData); break; case VesselMessageType.PartSyncField: VesselDataUpdater.WritePartSyncFieldDataToFile(messageData); MessageQueuer.RelayMessage <VesselSrvMsg>(client, messageData); break; case VesselMessageType.PartSyncUiField: VesselDataUpdater.WritePartSyncUiFieldDataToFile(messageData); MessageQueuer.RelayMessage <VesselSrvMsg>(client, messageData); break; case VesselMessageType.PartSyncCall: MessageQueuer.RelayMessage <VesselSrvMsg>(client, messageData); break; case VesselMessageType.ActionGroup: VesselDataUpdater.WriteActionGroupDataToFile(messageData); MessageQueuer.RelayMessage <VesselSrvMsg>(client, messageData); break; case VesselMessageType.Fairing: VesselDataUpdater.WriteFairingDataToFile(messageData); MessageQueuer.RelayMessage <VesselSrvMsg>(client, messageData); break; case VesselMessageType.Decouple: MessageQueuer.RelayMessage <VesselSrvMsg>(client, messageData); break; case VesselMessageType.Couple: HandleVesselCouple(client, messageData); break; case VesselMessageType.Undock: MessageQueuer.RelayMessage <VesselSrvMsg>(client, messageData); break; default: throw new NotImplementedException("Vessel message type not implemented"); } }