Files

160 lines
4.0 KiB
C#
Raw Permalink Normal View History

2026-08-27 11:22:54 -06:00
using System;
using System.CodeDom.Compiler;
using System.ComponentModel;
using System.Diagnostics;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Input;
using System.Windows.Markup;
using System.Windows.Threading;
using Crysome.Server.Model;
using Crysome.Server.ViewModel;
using Wpf.Ui.Controls;
namespace Crysome.Server.View;
public class RemoteChatWindow : FluentWindow, IComponentConnector
{
private readonly ClientInfo _client;
private readonly ManageClientsViewModel _vm;
internal TextBlock TitleText;
internal Button CloseBtn;
internal ListBox ChatList;
internal TextBox MessageBox;
internal Button SendBtn;
internal TextBlock StatusText;
private bool _contentLoaded;
public RemoteChatWindow(ClientInfo client, ManageClientsViewModel vm)
{
InitializeComponent();
_client = client;
_vm = vm;
((Window)this).Title = "Chat — " + (client?.Address ?? "?");
TitleText.Text = ((Window)this).Title;
_vm.RegisterChatHandler(_client, OnChatMessage);
((Window)this).Closed += delegate
{
_vm.UnregisterChatHandler(_client);
};
}
private void OnChatMessage(string from, string msg)
{
((DispatcherObject)this).Dispatcher.BeginInvoke((Delegate)(Action)delegate
{
ChatList.Items.Add("[" + from + "]: " + msg);
if (ChatList.Items.Count > 0)
{
ChatList.ScrollIntoView(ChatList.Items[ChatList.Items.Count - 1]);
}
}, Array.Empty<object>());
}
private void SendBtn_Click(object sender, RoutedEventArgs e)
{
SendMessage();
}
private void MessageBox_KeyDown(object sender, KeyEventArgs e)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Invalid comparison between Unknown and I4
//IL_000f: Unknown result type (might be due to invalid IL or missing references)
if ((int)e.Key == 6 && !((Enum)e.KeyboardDevice.Modifiers).HasFlag((Enum)(object)(ModifierKeys)4))
{
e.Handled = true;
SendMessage();
}
}
private void SendMessage()
{
string text = MessageBox?.Text?.Trim();
if (!string.IsNullOrEmpty(text))
{
MessageBox.Clear();
_vm.SendChatMessage(_client, text);
OnChatMessage("You", text);
}
}
private void CloseBtn_Click(object sender, RoutedEventArgs e)
{
((Window)this).Close();
}
private void Header_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
try
{
((Window)this).DragMove();
}
catch
{
}
}
[DebuggerNonUserCode]
[GeneratedCode("PresentationBuildTasks", "9.0.14.0")]
public void InitializeComponent()
{
if (!_contentLoaded)
{
_contentLoaded = true;
Uri resourceLocator = new Uri("/Crysome.Server;component/view/remotechatwindow.xaml", UriKind.Relative);
Application.LoadComponent(this, resourceLocator);
}
}
[DebuggerNonUserCode]
[GeneratedCode("PresentationBuildTasks", "9.0.14.0")]
[EditorBrowsable(EditorBrowsableState.Never)]
void IComponentConnector.Connect(int connectionId, object target)
{
//IL_0050: Unknown result type (might be due to invalid IL or missing references)
//IL_005a: Expected O, but got Unknown
//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
//IL_00af: Expected O, but got Unknown
switch (connectionId)
{
case 1:
((Border)target).MouseLeftButtonDown += Header_MouseLeftButtonDown;
break;
case 2:
TitleText = (TextBlock)target;
break;
case 3:
CloseBtn = (Button)target;
((ButtonBase)(object)CloseBtn).Click += CloseBtn_Click;
break;
case 4:
ChatList = (ListBox)target;
break;
case 5:
MessageBox = (TextBox)target;
MessageBox.KeyDown += MessageBox_KeyDown;
break;
case 6:
SendBtn = (Button)target;
((ButtonBase)(object)SendBtn).Click += SendBtn_Click;
break;
case 7:
StatusText = (TextBlock)target;
break;
default:
_contentLoaded = true;
break;
}
}
}