using DevComponents.DotNetBar.Controls;
using DevComponents.DotNetBar;
using System.Windows;
using System.Drawing;
using System;
using System.Threading.Tasks;
using System.Timers;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using PdmAlert.Entity;
using System.Threading;
using System.Net.Http;
using PdmAlert.Util;
using log4net;
using WebSocketSharp;
using System.Windows.Controls;
namespace PdmAlert
{
///
/// MainWindow.xaml 的交互逻辑
///
public partial class MainWindow : Window, INotifyPropertyChanged
{
#region INotifyPropertyChanged
public virtual event PropertyChangedEventHandler PropertyChanged;
protected virtual void RaisePropertyChanged(string name)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}
protected void RaiseAndSetIfChanged(ref T old, T @new, [CallerMemberName] string propertyName = null)
{
old = @new;
if (propertyName != null)
{
RaisePropertyChanged(propertyName);
}
}
#endregion
private static ILog Logger = LogManager.GetLogger("MsgAlert");
// private ClientWebSocket socket;
private WebSocket socket;
private Task readTask;
private System.Timers.Timer heartbeatTimer;
private CancellationTokenSource cancelTokenSource;
private CancellationToken cancelToken;
private ToolSetting setting;
private HttpClient client;
private volatile bool IsRefreshing = false;
private string _messageTitle = "共有 0 条未读消息";
public string messageTitle
{
get => _messageTitle;
set => RaiseAndSetIfChanged(ref _messageTitle, value);
}
private string _statusMessage = "启动中...";
public string statusMessage
{
get => _statusMessage;
set => RaiseAndSetIfChanged(ref _statusMessage, value);
}
private string _userInfo = "";
public string userInfo
{
get => _userInfo;
set => RaiseAndSetIfChanged(ref _userInfo, value);
}
private string _socketStatus = "";
public string socketStatus
{
get => _socketStatus;
set => RaiseAndSetIfChanged(ref _socketStatus, value);
}
private ObservableCollection _messages;
public ObservableCollection messages
{
get => _messages;
set => RaiseAndSetIfChanged(ref _messages, value);
}
public MainWindow()
{
cancelTokenSource = new CancellationTokenSource();
cancelToken = cancelTokenSource.Token;
setting = ToolSetting.Instance;
client = new HttpClient
{
BaseAddress = new Uri($"http://{setting.Ip}:{setting.Port}/{setting.BaseUrl}/"),
Timeout = TimeSpan.FromSeconds(setting.TimeOut),
};
client.DefaultRequestHeaders.Add("Client-Access-Token", LoginUser.CurrentUser.username);
userInfo = $"用户:{LoginUser.CurrentUser.realName}";
DataContext = this;
InitializeComponent();
}
private void ShowStatus(string status, string message)
{
Dispatcher.Invoke(() =>
{
socketStatus = status;
statusMessage = message;
});
}
private void Refresh_Click(object sender, RoutedEventArgs e)
{
MaskAdorner.ShowMask(mainContent);
Task.Run(() =>
{
try
{
RefreshData();
}
catch (Exception ex)
{
Logger.Error("Request Unread Message Failed.", ex);
}
finally
{
MaskAdorner.HideMask(mainContent);
}
});
}
public void RefreshData()
{
try
{
IsRefreshing = true;
Result> res = client.GetSyncAction>("pdm/annountCement/listSysMsgByUser", new Page