initial commit
Pulsar .NET 9.0 Windows Release / build (push) Waiting to run
Mirror to Codeberg and Gitea / mirror (push) Waiting to run

This commit is contained in:
i2p
2026-08-27 10:57:58 -06:00
commit 773d05f8f1
1038 changed files with 109261 additions and 0 deletions
+131
View File
@@ -0,0 +1,131 @@
using DiscordRPC;
using System;
using System.Diagnostics;
using System.Windows.Forms;
namespace Pulsar.Server.DiscordRPC
{
internal class DiscordRPC
{
private readonly Form _form;
private bool _enabled;
private DiscordRpcClient _client;
private Timer _updateTimer; // Made timer a field for proper cleanup
private readonly string _applicationId = "1351391347491344445";
public DiscordRPC(Form form)
{
_form = form;
_enabled = false;
_client = new DiscordRpcClient(_applicationId);
}
public bool Enabled
{
get { return _enabled; }
set
{
_enabled = value;
if (_enabled)
{
if (_client == null || _client.IsDisposed)
{
_client = new DiscordRpcClient(_applicationId);
Debug.WriteLine("Discord RPC Client recreated");
}
if (!_client.IsInitialized)
{
try
{
_client.Initialize();
Debug.WriteLine("Discord RPC Client Initialized");
}
catch (Exception ex)
{
Debug.WriteLine("Failed to initialize Discord RPC: " + ex.Message);
return;
}
}
try
{
_client.OnReady += (sender, e) =>
{
Debug.WriteLine("Discord RPC Ready for " + _form.Text);
};
SetPresence();
_updateTimer = new Timer();
_updateTimer.Interval = 5000; // 5 seconds
_updateTimer.Tick += (s, e) => SetPresence();
_updateTimer.Start();
Debug.WriteLine("Discord RPC Enabled for " + _form.Text);
}
catch (Exception ex)
{
Debug.WriteLine("Failed to set Discord presence: " + ex.Message);
}
}
else
{
if (_client != null && _client.IsInitialized)
{
try
{
_client.ClearPresence();
_client.Deinitialize();
if (_updateTimer != null)
{
_updateTimer.Stop();
_updateTimer.Dispose();
_updateTimer = null;
}
Debug.WriteLine("Discord RPC Disabled for " + _form.Text);
}
catch (Exception ex)
{
Debug.WriteLine("Failed to disable Discord RPC: " + ex.Message);
}
}
}
}
}
private int GetConnectedClientsCount()
{
try
{
string title = _form.Text;
const string marker = "Connected: ";
int markerIndex = title.IndexOf(marker);
if (markerIndex == -1)
return 0;
int startIndex = markerIndex + marker.Length;
int endIndex = title.IndexOf(" ", startIndex);
if (endIndex == -1)
endIndex = title.Length;
string countStr = title.Substring(startIndex, endIndex - startIndex);
return int.Parse(countStr);
}
catch
{
return 0;
}
}
private void SetPresence()
{
int connectedClients = GetConnectedClientsCount();
_client.SetPresence(new RichPresence
{
State = $"Connected Clients: {connectedClients}",
Assets = new Assets
{
LargeImageKey = "default",
LargeImageText = "Pulsar RAT"
},
Timestamps = new Timestamps { Start = DateTime.UtcNow }
});
}
}
}
@@ -0,0 +1,47 @@
using Pulsar.Server.Models;
using System.Windows.Forms;
namespace Pulsar.Server.DiscordRPC
{
internal class DiscordRPCManager
{
private static DiscordRPC _rpcInstance;
public static void Initialize(Form form)
{
if (_rpcInstance == null)
{
_rpcInstance = new DiscordRPC(form);
}
ApplyDiscordRPC(form);
}
public static void ApplyDiscordRPC(Form form)
{
bool isDiscordRPCChecked = Settings.DiscordRPC;
if (_rpcInstance == null || _rpcInstance.Enabled != isDiscordRPCChecked)
{
if (_rpcInstance != null)
{
_rpcInstance.Enabled = false; // Explicitly disable the old instance
_rpcInstance = null; // Clear reference for garbage collection
}
_rpcInstance = new DiscordRPC(form);
_rpcInstance.Enabled = isDiscordRPCChecked;
}
else
{
_rpcInstance.Enabled = isDiscordRPCChecked; // Enforce the state
}
}
public static void Shutdown()
{
if (_rpcInstance != null)
{
_rpcInstance.Enabled = false;
_rpcInstance = null;
}
}
}
}