Files
i2p 773d05f8f1
Pulsar .NET 9.0 Windows Release / build (push) Waiting to run
Mirror to Codeberg and Gitea / mirror (push) Waiting to run
initial commit
2026-08-27 10:57:58 -06:00

171 lines
5.5 KiB
C#

using Pulsar.Common.Messages;
using Pulsar.Common.Messages.Other;
using Pulsar.Common.Messages.UserSupport.MessageBox;
using Pulsar.Common.Messages.UserSupport.RemoteChat;
using Pulsar.Server.Forms.DarkMode;
using Pulsar.Server.Helper;
using Pulsar.Server.Messages;
using Pulsar.Server.Networking;
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace Pulsar.Server.Forms
{
public partial class FrmRemoteChat : Form
{
private readonly Client _connectClient;
private readonly RemoteChatHandler chatHandler;
private static readonly Dictionary<Client, FrmRemoteChat> OpenedForms = new Dictionary<Client, FrmRemoteChat>();
public static FrmRemoteChat CreateNewOrGetExisting(Client client)
{
if (OpenedForms.ContainsKey(client))
{
return OpenedForms[client];
}
FrmRemoteChat r = new FrmRemoteChat(client);
r.Disposed += (sender, args) => OpenedForms.Remove(client);
OpenedForms.Add(client, r);
return r;
}
private void ClientDisconnected(Client client, bool connected)
{
if (!connected)
{
this.Invoke((MethodInvoker)this.Close);
}
}
public FrmRemoteChat(Client client)
{
DarkModeManager.ApplyDarkMode(this);
_connectClient = client;
chatHandler = new RemoteChatHandler(client);
RegisterMessageHandler();
InitializeComponent();
message.KeyDown += new KeyEventHandler(message_KeyDown); // Subscribe to the KeyDown event
}
private void RegisterMessageHandler()
{
_connectClient.ClientState += ClientDisconnected;
chatHandler.PacketsRetrieved += AddMessageClient;
MessageHandler.Register(chatHandler);
}
private void UnregisterMessageHandler()
{
try
{
MessageHandler.Unregister(chatHandler);
chatHandler.PacketsRetrieved -= AddMessageClient;
_connectClient.ClientState -= ClientDisconnected;
}
catch (Exception)
{
// Ignore exceptions during cleanup
}
}
private void FrmRemoteChat_Load(object sender, EventArgs e)
{
this.Text = WindowHelper.GetWindowTitle("Remote Chat | ", _connectClient);
}
private void FrmRemoteChat_FormClosing(object sender, FormClosingEventArgs e)
{
chatHandler.KillForm();
UnregisterMessageHandler();
}
public void AddMessageClient(object sender, string message)
{
if (this.IsHandleCreated && !this.Disposing && !this.IsDisposed)
{
Chatlog.Invoke((MethodInvoker)delegate
{
Chatlog.AppendText(string.Format("{0} {1}: {2}{3}", DateTime.Now.ToString("HH:mm:ss"), "Client", message, Environment.NewLine));
});
}
}
public void AddMessageServer(object sender, string message)
{
Chatlog.Invoke((MethodInvoker)delegate
{
Chatlog.AppendText(string.Format("{0} {1}: {2}{3}", DateTime.Now.ToString("HH:mm:ss"), sender, message, Environment.NewLine));
});
}
private void Sendpacket_Click(object sender, EventArgs e)
{
if (message.Text.Trim() != "")
{
chatHandler.SendMessageClient(NameTB.Text, message.Text.Trim());
AddMessageServer(NameTB.Text, message.Text.Trim());
message.Text = "";
}
}
private void SendBTN_Click(object sender, EventArgs e)
{
if (message.Text.Trim() != "")
{
chatHandler.SendMessageClient(NameTB.Text, message.Text.Trim());
AddMessageServer(NameTB.Text, message.Text.Trim());
message.Text = "";
}
}
private void message_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
e.SuppressKeyPress = true;
Sendpacket_Click(this, new EventArgs());
}
}
private void button1_Click(object sender, EventArgs e)
{
chatHandler.StartForm(ChatTitleTB.Text, WelcomeMsgRB.Text, TopMostChk.Checked, DisableCloseChk.Checked, DisableTypeChk.Checked);
noButtonTabControl1.SelectedIndex = 1;
NameTB.Text = textBox1.Text;
}
private void button4_Click(object sender, EventArgs e)
{
chatHandler.KillForm();
noButtonTabControl1.SelectedIndex = 0;
}
private void button2_Click(object sender, EventArgs e)
{
_connectClient.Send(new DoChatAction());
Chatlog.Clear();
}
private void button3_Click(object sender, EventArgs e)
{
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.DefaultExt = "txt";
saveFileDialog.Filter = "Text files (*.txt)|*.txt";
saveFileDialog.FileName = DateTime.Now.ToString("yyyy-MM-dd") + ".txt";
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
string filePath = saveFileDialog.FileName;
System.IO.File.WriteAllText(filePath, Chatlog.Text);
}
}
}
}