using ServiceBase; using SqlSugar; using System; using System.IO; using Universal; namespace EEMSCenterUI.ViewModels; internal partial class MainWindowViewModel : ObservableObject, IEEMSBaseServerProvider { public MainWindowViewModel() { this.Server = new() { IP = "127.0.0.1", Port = 50054 }; } private IClientProvider? _clientProvider; [ObservableProperty] private ServiceEndpoint _Server; [ObservableProperty] private string? _GUID; [RelayCommand] private void StartService() { EEMSBaseServer baseServer = new(); if (!baseServer.Initialize(this, out _clientProvider) || _clientProvider is null) { MessageBox.Show("Service Start Failed"); return; } Task.Factory.StartNew(async () => { if (!await baseServer.StartServiceAsync(this.Server.IP!, this.Server.Port)) MessageBox.Show("Service Start Failed"); }, TaskCreationOptions.LongRunning); } [RelayCommand] private void RequestFile() { Guid.TryParse(this.GUID, out Guid guid); bool? b = this._clientProvider?.RequestFile(guid, FileType.Config).Result; } [RelayCommand] private async Task SendFile() { if (_clientProvider is null || this.GUID is null) { MessageBox.Show("Send File Failed"); return; } if (!Guid.TryParse(this.GUID, out Guid guid)) { MessageBox.Show("Send File Failed"); return; } using MemoryStream stream = new(); Compressor.CompressZipFileDirectory(new(@"E:\RTConfig"), stream); if (!stream.Split(out List? buffer, 8192) || buffer is null) { MessageBox.Show("Send File Failed"); return; } for (int i = 0; i < buffer.Count; i++) { try { if (!await _clientProvider.PushFile(guid, FileType.Config, buffer[i], i + 1, buffer.Count)) { MessageBox.Show("Send File Failed"); return; } } catch { MessageBox.Show("Send File Failed"); return; } } } void IEEMSBaseServerProvider.Started() { Task.Factory.StartNew(() => { MessageBox.Show($"Service Started {this.Server.IP}:{this.Server.Port}"); }); } void IEEMSBaseServerProvider.OnConnected(string ip, ushort port, ServiceHub serviceHub) { ServiceEndpoint serviceEndpoint = new() { IP = ip, Port = port, Hub = serviceHub }; App.Current.Dispatcher?.Invoke(() => { Clients[$"{ip}{port}{serviceHub}"] = serviceEndpoint; }); } public void OnDisConnected(string ip, ushort port, ServiceHub serviceHub) { App.Current.Dispatcher?.Invoke(() => { Clients.TryRemove($"{ip}{port}{serviceHub}", out _); }); } [ObservableProperty] ObservableDictionary _Clients = []; } public partial class ServiceEndpoint : ObservableObject { [ObservableProperty] private string? _IP; [ObservableProperty] private ushort _Port; [ObservableProperty] private ServiceHub _Hub; }