添加websocket客户端

master
mzhifa 1 year ago
parent 0e98480a7c
commit 1d750488ff

@ -13,6 +13,7 @@
<PackageReference Include="MySql.Data" Version="8.0.33" /> <PackageReference Include="MySql.Data" Version="8.0.33" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" /> <PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="Prism.Wpf" Version="8.1.97" /> <PackageReference Include="Prism.Wpf" Version="8.1.97" />
<PackageReference Include="WebSocket4Net" Version="0.15.2" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Reference Include="DotRas"> <Reference Include="DotRas">

@ -23,7 +23,7 @@ namespace StartServerWPF.Modules.Main.ViewModels
{ {
public class MainViewModel : BindableBase public class MainViewModel : BindableBase
{ {
public MainViewModel(IDialogService dialogService) public MainViewModel(IDialogService dialogService, WebsocketClient websocket)
{ {
Message = "View A from your Prism Module"; Message = "View A from your Prism Module";
Console.WriteLine(System.Environment.CurrentDirectory + "\\" + JsonParser.systemConfigPath); Console.WriteLine(System.Environment.CurrentDirectory + "\\" + JsonParser.systemConfigPath);
@ -45,6 +45,8 @@ namespace StartServerWPF.Modules.Main.ViewModels
Console.WriteLine(sc.remoteDb.ServerAddress + "\t" + sc.remoteDb.ServerPort Console.WriteLine(sc.remoteDb.ServerAddress + "\t" + sc.remoteDb.ServerPort
+ "\t" + sc.remoteDb.UserName + "\t" + sc.remoteDb.Password); + "\t" + sc.remoteDb.UserName + "\t" + sc.remoteDb.Password);
this._dialogService = dialogService; this._dialogService = dialogService;
this._websocket = websocket;
_websocket.WebSocketInit();
} }
@ -452,6 +454,7 @@ namespace StartServerWPF.Modules.Main.ViewModels
private DispatcherTimer timer1= new DispatcherTimer(); private DispatcherTimer timer1= new DispatcherTimer();
private readonly IDialogService _dialogService; private readonly IDialogService _dialogService;
private readonly WebsocketClient _websocket;
public void InitializeParams() public void InitializeParams()
{ {
@ -477,6 +480,16 @@ namespace StartServerWPF.Modules.Main.ViewModels
/// <returns>进程启动返回值</returns> /// <returns>进程启动返回值</returns>
private int StartProcess(ProcessInfo proInfo) private int StartProcess(ProcessInfo proInfo)
{ {
//using (Process compiler = new Process())
//{
// compiler.StartInfo.FileName = proInfo.ProName;
// compiler.StartInfo.Arguments = proInfo.ProPath + " -o " + proInfo.ProParams;
// compiler.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
// compiler.Start();
// compiler.WaitForExit();
//}
int seInd = ShellExecute(IntPtr.Zero, new StringBuilder("open"), new StringBuilder(proInfo.ProName + ".exe") int seInd = ShellExecute(IntPtr.Zero, new StringBuilder("open"), new StringBuilder(proInfo.ProName + ".exe")
, new StringBuilder(proInfo.ProParams), new StringBuilder(proInfo.ProPath), proInfo.ShowState); , new StringBuilder(proInfo.ProParams), new StringBuilder(proInfo.ProPath), proInfo.ShowState);
return seInd; return seInd;

@ -0,0 +1,64 @@
using SuperSocket.ClientEngine;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using WebSocket4Net;
namespace StartServerWPF.Modules.Main
{
public class WebsocketClient
{
public WebSocket webSocket4Net = null;
public void WebSocketInit()
{
Console.WriteLine("客户端");
webSocket4Net = new WebSocket("ws://localhost:5000/ws");
webSocket4Net.Opened += WebSocket4Net_Opened;
webSocket4Net.Error += new EventHandler<ErrorEventArgs>(WebSocket_Error);
webSocket4Net.MessageReceived += WebSocket4Net_MessageReceived;
webSocket4Net.Open();
Console.WriteLine("客户端连接成功!");
Thread thread = new Thread(ClientSendMsgToServer);
thread.IsBackground = true;
thread.Start();
// webSocket4Net.Dispose();
}
public void ClientSendMsgToServer()
{
int i = 88;
while (true)
{
//Console.WriteLine($"客户端发送数据{i++}");
Thread.Sleep(TimeSpan.FromSeconds(2));
if (webSocket4Net.State == WebSocketState.Open)
{
webSocket4Net.Send("{\"type\":\"heartbeat\",\"utype\":\"device\",\"uid\":123}");
}
else if (webSocket4Net.State == WebSocketState.Closed)
{
Thread.Sleep(TimeSpan.FromSeconds(5));
webSocket4Net.Open();
}
}
}
private void WebSocket4Net_MessageReceived(object sender, MessageReceivedEventArgs e)
{
Debug.WriteLine($"服务端回复数据:{e.Message}");
}
private void WebSocket4Net_Opened(object sender, EventArgs e)
{
// webSocket4Net.Send($"客户端准备发送数据!");
}
void WebSocket_Error(object sender, ErrorEventArgs e)
{
Debug.WriteLine("websocket_Error:" + e.Exception.ToString());
}
}
}

@ -18,7 +18,7 @@ namespace StartServerWPF
protected override void RegisterTypes(IContainerRegistry containerRegistry) protected override void RegisterTypes(IContainerRegistry containerRegistry)
{ {
containerRegistry.RegisterSingleton<WebsocketClient>();
} }
protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog) protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog)

@ -1,7 +1,7 @@
<Window x:Class="StartServerWPF.Views.MainWindow" <Window x:Class="StartServerWPF.Views.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:prism="http://prismlibrary.com/" xmlns:prism="http://prismlibrary.com/" ResizeMode="NoResize"
prism:ViewModelLocator.AutoWireViewModel="True" prism:ViewModelLocator.AutoWireViewModel="True"
Title="{Binding Title}" Height="500" Width="800" > Title="{Binding Title}" Height="500" Width="800" >
<Grid> <Grid>

Loading…
Cancel
Save