public void Acquire() { while (true) { //looped 0.5s timeout to make NT-blocked threads interruptable. uint res = WApi.WaitForSingleObject(handle, interruptReactionTime); try { System.Threading.Thread.Sleep(0); } catch (System.Threading.ThreadInterruptedException e) { if (res == 0) { //Rollback int previousCount; WApi.ReleaseSemaphore(handle, 1, out previousCount); } throw e; } if (res == 0) { return; } if (res != 258) { //throw new SemaphoreFailedException(); } } }
public void Release() { int previousCount; if (!WApi.ReleaseSemaphore(handle, 1, out previousCount)) { //throw new SemaphoreFailedException(); } }
public void Acquire(TimeSpan timeout) { uint milliseconds = (uint)timeout.TotalMilliseconds; if (WApi.WaitForSingleObject(handle, milliseconds) != 0) { //throw new SemaphoreFailedException(); } }
private void button3_Click(object sender, EventArgs e) { //Load before using findme32.exe or findme32.exe IntPtr MainWin = WApi.GetMainWin("findme64", "#32770", "Findme", "Findme"); MainWin = (MainWin == IntPtr.Zero) ? WApi.GetMainWin("findme32", "#32770", "Findme", "Findme") : MainWin; IntPtr ChildWin = WApi.GetChildWindow(MainWin, 2, "SysHeader32", 0, "", 8, 63, "SysListView32", 1000, "List1", 1); MessageBox.Show(SysHeader32.GetItemString(ChildWin, 3)); }
public void Dispose() { if (handle != 0) { if (WApi.CloseHandle(handle)) { handle = 0; } } }
public ProcessSemaphore(string name, int initial, int max, int interruptReactionTime) { this.interruptReactionTime = (uint)interruptReactionTime; this.handle = WApi.CreateSemaphore(null, initial, max, name); if (handle == 0) { //throw new SemaphoreFailedException(); } }
public static IntPtr GetMainWin(string Prc, string Cl, string N, string n) { uint pid = 0; InputData.Result = IntPtr.Zero; Process p; for (int i = 0; i < WApi.GetProcessIDNum(Prc); i++) { GetWindowThreadProcessId(GetProcessID(Prc, i), out pid); var callback = new EnumThreadDelegate(WApi.ThreadWindows); p = Process.GetProcessById((int)pid); InputData.PName = Prc; InputData.WClass = Cl; InputData.BName = N; InputData.EName = n; if ((N != "") && (n != "")) { foreach (ProcessThread thread in Process.GetProcessById((int)pid).Threads) { EnumThreadWindows(thread.Id, callback, IntPtr.Zero); if (InputData.Result != IntPtr.Zero) { return(InputData.Result); } } } if (N != "") { callback = new EnumThreadDelegate(WApi.ThreadWindows1); foreach (ProcessThread thread in Process.GetProcessById((int)pid).Threads) { EnumThreadWindows(thread.Id, callback, IntPtr.Zero); if (InputData.Result != IntPtr.Zero) { return(InputData.Result); } } } if (n != "") { callback = new EnumThreadDelegate(WApi.ThreadWindows2); foreach (ProcessThread thread in Process.GetProcessById((int)pid).Threads) { EnumThreadWindows(thread.Id, callback, IntPtr.Zero); if (InputData.Result != IntPtr.Zero) { return(InputData.Result); } } } } return(InputData.Result); }
internal void PurgeAll() { PurgedAll = true; FutureEvents.Purge((int)Tick); foreach (var comp in CompsToStart) { if (comp?.Platform != null) { CloseComps(comp.MyCube); } } foreach (var readd in CompReAdds) { if (!readd.Ai.Closed) { readd.Ai.AiForceClose(); } if (readd.Comp?.Platform != null) { CloseComps(readd.Comp.MyCube); } } foreach (var comp in CompsDelayed) { if (comp?.Platform != null) { CloseComps(comp.MyCube); } } foreach (var gridAi in DelayedAiClean) { if (!gridAi.Closed) { gridAi.AiForceClose(); } } PlatFormPool.Clean(); CompsToStart.ClearImmediate(); DelayedAiClean.ClearImmediate(); CompsDelayed.Clear(); CompReAdds.Clear(); GridAiPool.Clean(); PurgeTerminalSystem(this); HudUi.Purge(); TerminalMon.Purge(); foreach (var reports in Reporter.ReportData.Values) { foreach (var report in reports) { report.Clean(); Reporter.ReportPool.Return(report); } reports.Clear(); } Reporter.ReportData.Clear(); Reporter.ReportPool.Clean(); PacketsToClient.Clear(); PacketsToServer.Clear(); AcqManager.Clean(); CleanSounds(true); foreach (var e in Emitters) { e.StopSound(true); } foreach (var e in Av.HitEmitters) { e.StopSound(true); } foreach (var e in Av.FireEmitters) { e.StopSound(true); } foreach (var e in Av.TravelEmitters) { e.StopSound(true); } Emitters.Clear(); Av.HitEmitters.Clear(); Av.FireEmitters.Clear(); Av.TravelEmitters.Clear(); foreach (var item in EffectedCubes) { var cubeid = item.Key; var blockInfo = item.Value; var functBlock = blockInfo.FunctBlock; if (functBlock == null || functBlock.MarkedForClose) { _effectPurge.Enqueue(cubeid); continue; } functBlock.EnabledChanged -= ForceDisable; functBlock.Enabled = blockInfo.FirstState; functBlock.SetDamageEffect(false); if (HandlesInput) { functBlock.AppendingCustomInfo -= blockInfo.AppendCustomInfo; } _effectPurge.Enqueue(cubeid); } while (_effectPurge.Count != 0) { EffectedCubes.Remove(_effectPurge.Dequeue()); } Av.Glows.Clear(); Av.AvShotPool.Clean(); DeferedUpBlockTypeCleanUp(true); BlockTypeCleanUp.Clear(); foreach (var map in GridToInfoMap.Keys) { RemoveGridFromMap(map); } GridToInfoMap.Clear(); GridMapPool.Clean(); DirtyGridsTmp.Clear(); foreach (var structure in WeaponPlatforms.Values) { foreach (var system in structure.WeaponSystems) { system.Value.PreFirePairs.Clear(); system.Value.FireWhenDonePairs.Clear(); system.Value.FirePerShotPairs.Clear(); system.Value.RotatePairs.Clear(); system.Value.ReloadPairs.Clear(); foreach (var ammo in system.Value.AmmoTypes) { ammo.AmmoDef.Const.PrimeEntityPool?.Clean(); ammo.AmmoDef.Const.HitDefaultSoundPairs.Clear(); ammo.AmmoDef.Const.HitVoxelSoundPairs.Clear(); ammo.AmmoDef.Const.HitShieldSoundPairs.Clear(); ammo.AmmoDef.Const.HitFloatingSoundPairs.Clear(); ammo.AmmoDef.Const.HitPlayerSoundPairs.Clear(); ammo.AmmoDef.Const.TravelSoundPairs.Clear(); ammo.AmmoDef.Const.CustomSoundPairs.Clear(); } } structure.WeaponSystems.Clear(); } WeaponPlatforms.Clear(); foreach (var gridToMap in GridToBlockTypeMap) { foreach (var map in gridToMap.Value) { ConcurrentListPool.Return(map.Value); } gridToMap.Value.Clear(); BlockTypePool.Return(gridToMap.Value); } GridToBlockTypeMap.Clear(); foreach (var playerGrids in PlayerEntityIdInRange) { playerGrids.Value.Clear(); } PlayerEntityIdInRange.Clear(); DirtyGridInfos.Clear(); DsUtil.Purge(); DsUtil2.Purge(); ShootingWeapons.Clear(); WeaponToPullAmmo.Clear(); AmmoToPullQueue.Clear(); ChargingWeaponsIndexer.Clear(); WeaponsToRemoveAmmoIndexer.Clear(); ChargingWeapons.Clear(); Hits.Clear(); HomingWeapons.Clear(); GridToMasterAi.Clear(); Players.Clear(); IdToCompMap.Clear(); AllArmorBaseDefinitions.Clear(); HeavyArmorBaseDefinitions.Clear(); AllArmorBaseDefinitions.Clear(); AcquireTargets.Clear(); LargeBlockSphereDb.Clear(); SmallBlockSphereDb.Clear(); AnimationsToProcess.Clear(); _subTypeIdToWeaponDefs.Clear(); WeaponDefinitions.Clear(); SlimsSortedList.Clear(); _destroyedSlims.Clear(); _destroyedSlimsClient.Clear(); _slimHealthClient.Clear(); _slimsSet.Clear(); _turretDefinitions.Clear(); _tmpNearByBlocks.Clear(); foreach (var av in Av.AvShots) { av.GlowSteps.Clear(); Av.AvShotPool.Return(av); } Av.AvShotPool.Clean(); Av.AvBarrels1.Clear(); Av.AvBarrels2.Clear(); Av.AvShots.Clear(); Av.HitSounds.Clear(); foreach (var errorpkt in ClientSideErrorPkt) { errorpkt.Packet.CleanUp(); } ClientSideErrorPkt.Clear(); GridEffectPool.Clean(); GridEffectsPool.Clean(); BlockTypePool.Clean(); ConcurrentListPool.Clean(); TargetInfoPool.Clean(); PacketObjPool.Clean(); InventoryMoveRequestPool.Clean(); WeaponCoreBlockDefs.Clear(); VanillaIds.Clear(); VanillaCoreIds.Clear(); WeaponCoreFixedBlockDefs.Clear(); WeaponCoreTurretBlockDefs.Clear(); VoxelCaches.Clear(); ArmorCubes.Clear(); foreach (var p in Projectiles.ProjectilePool) { p.Info?.AvShot?.AmmoEffect?.Stop(); } Projectiles.ShrapnelToSpawn.Clear(); Projectiles.ShrapnelPool.Clean(); Projectiles.FragmentPool.Clean(); Projectiles.ActiveProjetiles.Clear(); Projectiles.ProjectilePool.Clear(); Projectiles.HitEntityPool.Clean(); Projectiles.VirtInfoPool.Clean(); DbsToUpdate.Clear(); GridTargetingAIs.Clear(); DsUtil = null; DsUtil2 = null; SlimsSortedList = null; Settings = null; StallReporter = null; TerminalMon = null; Physics = null; Camera = null; Projectiles = null; TrackingAi = null; UiInput = null; TargetUi = null; Placer = null; TargetGps = null; SApi.Unload(); if (WaterApiLoaded) { WApi.Unload(); } SApi = null; Api = null; ApiServer = null; Reporter = null; WeaponDefinitions = null; AnimationsToProcess = null; ProjectileTree.Clear(); ProjectileTree = null; Av = null; HudUi = null; AllDefinitions = null; SoundDefinitions = null; ActiveCockPit = null; ActiveControlBlock = null; ControlledEntity = null; TmpStorage = null; }
public void HandleWeather(IRCMessage sIRCMessage) { var sSendMessage = sIrcBase.Networks[sIRCMessage.ServerName].sSendMessage; var text = sLManager.GetCommandTexts("weather", sIRCMessage.Channel, sIRCMessage.ServerName); if(text.Length < 5) { sSendMessage.SendChatMessage(sIRCMessage, sLConsole.Translations("NoFound2", sLManager.GetChannelLocalization(sIRCMessage.Channel, sIRCMessage.ServerName))); return; } if(sIRCMessage.Info.Length < 5) { sSendMessage.SendChatMessage(sIRCMessage, sLManager.GetWarningText("NoCountryName", sIRCMessage.Channel, sIRCMessage.ServerName)); return; } if(sIRCMessage.Info.Length < 6 && sIRCMessage.Info[4].ToLower() != "home") { sSendMessage.SendChatMessage(sIRCMessage, sLManager.GetWarningText("NoCityName", sIRCMessage.Channel, sIRCMessage.ServerName)); return; } bool home = false; string language = string.Empty; switch(sLManager.GetChannelLocalization(sIRCMessage.Channel, sIRCMessage.ServerName)) { case "huHU": language = "HU"; break; case "enUS": case "enGB": language = "US"; break; default: language = "US"; break; } if(sIRCMessage.Info[4].ToLower() == "home") home = true; try { ForecastData source = null; string country = sIRCMessage.Info[4]; WApi wApi = new WApi(WeatherConfig.Key); if(home) source = wApi.GetForecast(WeatherConfig.Country, WeatherConfig.City, language); else source = wApi.GetForecast(country, sIRCMessage.Info.SplitToString(5, SchumixBase.Space).Trim(), language); var day = source.Forecast.Txt_Forecast.ForecastDay[0].FctText_Metric; var night = source.Forecast.Txt_Forecast.ForecastDay[1].FctText_Metric; if(home) sSendMessage.SendChatMessage(sIRCMessage, text[0]); else sSendMessage.SendChatMessage(sIRCMessage, text[1], sIRCMessage.Info[4] + ", " + sIRCMessage.Info.SplitToString(5, SchumixBase.Space).Trim()); sSendMessage.SendChatMessage(sIRCMessage, text[2], day); sSendMessage.SendChatMessage(sIRCMessage, text[3], night); } catch { sSendMessage.SendChatMessage(sIRCMessage, text[4]); } }
protected override void UnloadData() { try { if (SuppressWc) { return; } if (!PTask.IsComplete) { PTask.Wait(); } if (!CTask.IsComplete) { CTask.Wait(); } if (!ITask.IsComplete) { ITask.Wait(); } if (WaterMod) { WApi.Unregister(); WApi.RecievedData -= WApiReceiveData; } if (IsServer || DedicatedServer) { MyAPIGateway.Multiplayer.UnregisterMessageHandler(ServerPacketId, ProccessServerPacket); } else { MyAPIGateway.Multiplayer.UnregisterMessageHandler(ClientPacketId, ClientReceivedPacket); MyAPIGateway.Multiplayer.UnregisterMessageHandler(StringPacketId, StringReceived); } if (HandlesInput) { MyAPIGateway.Utilities.MessageEntered -= ChatMessageSet; } MyAPIGateway.Utilities.UnregisterMessageHandler(7771, Handler); MyAPIGateway.TerminalControls.CustomControlGetter -= CustomControlHandler; MyEntities.OnEntityCreate -= OnEntityCreate; MyAPIGateway.Gui.GuiControlCreated -= MenuOpened; MyAPIGateway.Gui.GuiControlRemoved -= MenuClosed; MyVisualScriptLogicProvider.PlayerDisconnected -= PlayerDisconnected; MyVisualScriptLogicProvider.PlayerRespawnRequest -= PlayerConnected; ApiServer.Unload(); PurgeAll(); Log.Line("Logging stopped."); Log.Close(); } catch (Exception ex) { Log.Line($"Exception in UnloadData: {ex}"); } }
public override void LoadData() { try { foreach (var mod in Session.Mods) { if (mod.PublishedFileId == 1365616918 || mod.PublishedFileId == 2189703321) { ShieldMod = true; } else if (mod.GetPath().Contains("AppData\\Roaming\\SpaceEngineers\\Mods\\DefenseShields")) { ShieldMod = true; } else if (mod.PublishedFileId == 1931509062 || mod.PublishedFileId == 1995197719 || mod.PublishedFileId == 2006751214 || mod.PublishedFileId == 2015560129) { ReplaceVanilla = true; } else if (mod.GetPath().Contains("AppData\\Roaming\\SpaceEngineers\\Mods\\VanillaReplacement")) { ReplaceVanilla = true; } else if (mod.PublishedFileId == 2123506303) { if (mod.Name != ModContext.ModId) { SuppressWc = true; } } else if (mod.PublishedFileId == 2200451495) { WaterMod = true; } } if (SuppressWc) { return; } if (WaterMod) { WaterHash = MyStringHash.GetOrCompute("Water"); WApi.Register("WeaponCore"); WApi.RecievedData += WApiReceiveData; } AllDefinitions = Static.GetAllDefinitions(); SoundDefinitions = Static.GetSoundDefinitions(); MyEntities.OnEntityCreate += OnEntityCreate; MyAPIGateway.Gui.GuiControlCreated += MenuOpened; MyAPIGateway.Gui.GuiControlRemoved += MenuClosed; MyAPIGateway.Utilities.RegisterMessageHandler(7773, ArmorHandler); MyAPIGateway.Utilities.RegisterMessageHandler(7771, Handler); MyAPIGateway.Utilities.SendModMessage(7772, null); TriggerEntityModel = ModContext.ModPath + "\\Models\\Environment\\JumpNullField.mwm"; TriggerEntityPool = new MyConcurrentPool <MyEntity>(0, TriggerEntityClear, 10000, TriggerEntityActivator); ReallyStupidKeenShit(); } catch (Exception ex) { Log.Line($"Exception in LoadData: {ex}"); } }
private void BeforeStartInit() { MpActive = MyAPIGateway.Multiplayer.MultiplayerActive; IsServer = MyAPIGateway.Multiplayer.IsServer; DedicatedServer = MyAPIGateway.Utilities.IsDedicated; IsCreative = MyAPIGateway.Session.CreativeMode || MyAPIGateway.Session.SessionSettings.InfiniteAmmo; IsClient = !IsServer && !DedicatedServer && MpActive; HandlesInput = !IsServer || IsServer && !DedicatedServer; IsHost = IsServer && !DedicatedServer && MpActive; MpServer = IsHost || DedicatedServer; if (IsServer || DedicatedServer) { MyAPIGateway.Multiplayer.RegisterMessageHandler(ServerPacketId, ProccessServerPacket); } else { MyAPIGateway.Multiplayer.RegisterMessageHandler(ClientPacketId, ClientReceivedPacket); MyAPIGateway.Multiplayer.RegisterMessageHandler(StringPacketId, StringReceived); } if (DamageHandler) { Session.DamageSystem.RegisterBeforeDamageHandler(int.MinValue, BeforeDamageHandler); } if (IsServer) { MyVisualScriptLogicProvider.PlayerDisconnected += PlayerDisconnected; MyVisualScriptLogicProvider.PlayerRespawnRequest += PlayerConnected; } if (HandlesInput) { MyAPIGateway.Utilities.MessageEntered += ChatMessageSet; } var env = MyDefinitionManager.Static.EnvironmentDefinition; if (env.LargeShipMaxSpeed > MaxEntitySpeed) { MaxEntitySpeed = env.LargeShipMaxSpeed; } else if (env.SmallShipMaxSpeed > MaxEntitySpeed) { MaxEntitySpeed = env.SmallShipMaxSpeed; } if (MpActive) { SyncDist = MyAPIGateway.Session.SessionSettings.SyncDistance; SyncDistSqr = SyncDist * SyncDist; SyncBufferedDistSqr = SyncDistSqr + 250000; } else { SyncDist = MyAPIGateway.Session.SessionSettings.ViewDistance; SyncDistSqr = SyncDist * SyncDist; SyncBufferedDistSqr = (SyncDist + 500) * (SyncDist + 500); } Physics = MyAPIGateway.Physics; Camera = MyAPIGateway.Session.Camera; TargetGps = MyAPIGateway.Session.GPS.Create("WEAPONCORE", "", Vector3D.MaxValue, true, false); CheckDirtyGridInfos(); ApiServer.Load(); GenerateButtonMap(); Settings = new CoreSettings(this); LocalVersion = ModContext.ModId == "WeaponCore"; CounterKeenLogMessage(); if (ShieldMod && !ShieldApiLoaded && SApi.Load()) { ShieldApiLoaded = true; ShieldHash = MyStringHash.GetOrCompute("DefenseShield"); } if (WaterMod && !WaterApiLoaded) { WaterApiLoaded = true; WApi.Load(); WaterHash = MyStringHash.GetOrCompute("Water"); } if (!CompsToStart.IsEmpty) { StartComps(); } EarlyInitControls(this); }