89 lines
1.8 KiB
C#
89 lines
1.8 KiB
C#
using System.Threading;
|
|
using System.Windows.Forms;
|
|
using Crysome.Common.Network;
|
|
using Crysome.Common.Network.Packets;
|
|
|
|
namespace Crysome.Client.Handlers;
|
|
|
|
public static class ChatHandlers
|
|
{
|
|
private static CrysomeClient _client;
|
|
|
|
private static ChatForm _form;
|
|
|
|
private static Thread _uiThread;
|
|
|
|
private static readonly object _lock = new object();
|
|
|
|
public static void HandleChatMessage(CrysomeClient client, IPacket packet)
|
|
{
|
|
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_0007: Expected O, but got Unknown
|
|
ChatMessagePacket val = (ChatMessagePacket)packet;
|
|
if (string.IsNullOrEmpty(val.Message))
|
|
{
|
|
return;
|
|
}
|
|
_client = client;
|
|
EnsureForm();
|
|
try
|
|
{
|
|
_form?.AddMessage("Server", val.Message);
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
}
|
|
|
|
internal static void OnFormClosed()
|
|
{
|
|
lock (_lock)
|
|
{
|
|
_form = null;
|
|
}
|
|
}
|
|
|
|
private static void EnsureForm()
|
|
{
|
|
lock (_lock)
|
|
{
|
|
if (_form == null || _form.IsDisposed)
|
|
{
|
|
_form = new ChatForm(SendToServer);
|
|
_uiThread = new Thread((ThreadStart)delegate
|
|
{
|
|
Application.EnableVisualStyles();
|
|
Application.SetCompatibleTextRenderingDefault(defaultValue: false);
|
|
Application.Run(_form);
|
|
})
|
|
{
|
|
IsBackground = true
|
|
};
|
|
_uiThread.SetApartmentState(ApartmentState.STA);
|
|
_uiThread.Start();
|
|
while (_form == null || !_form.IsHandleCreated)
|
|
{
|
|
Thread.Sleep(50);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private static void SendToServer(string msg)
|
|
{
|
|
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_0023: Expected O, but got Unknown
|
|
try
|
|
{
|
|
CrysomeClient client = _client;
|
|
if (client != null && client.IsConnected)
|
|
{
|
|
_client.SendPacket((IPacket)new ChatMessagePacket(msg));
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
}
|
|
}
|