Ejemplo n.º 1
0
 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();
         }
     }
 }
Ejemplo n.º 2
0
        public void Release()
        {
            int previousCount;

            if (!WApi.ReleaseSemaphore(handle, 1, out previousCount))
            {
                //throw new SemaphoreFailedException();
            }
        }
Ejemplo n.º 3
0
        public void Acquire(TimeSpan timeout)
        {
            uint milliseconds = (uint)timeout.TotalMilliseconds;

            if (WApi.WaitForSingleObject(handle, milliseconds) != 0)
            {
                //throw new SemaphoreFailedException();
            }
        }
Ejemplo n.º 4
0
        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));
        }
Ejemplo n.º 5
0
 public void Dispose()
 {
     if (handle != 0)
     {
         if (WApi.CloseHandle(handle))
         {
             handle = 0;
         }
     }
 }
Ejemplo n.º 6
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();
            }
        }
Ejemplo n.º 7
0
    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);
    }
Ejemplo n.º 8
0
        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;
        }
Ejemplo n.º 9
0
        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]);
            }
        }
Ejemplo n.º 10
0
        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}"); }
        }
Ejemplo n.º 11
0
        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}"); }
        }
Ejemplo n.º 12
0
        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);
        }