Waste/Waste.Web.Entry/Pages/Socket/Test.cshtml.cs

101 lines
3.7 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.WebSockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Waste.Application;
namespace Waste.Web.Entry.Pages.Socket
{
public class TestModel : PageModel
{
private readonly ILoggerService _loggerService;
public TestModel(ILoggerService loggerService)
{
_loggerService = loggerService;
}
public async Task OnGetAsync()
{
await OnGetTestAsync();
}
public async Task OnGetTestAsync()
{
string BaseUrl = "wss://api.device.suzhou.ljflytjl.cn/device_rpc";
ClientWebSocket client = new ClientWebSocket();
client.Options.AddSubProtocol("protocol1");
client.Options.SetRequestHeader("device", "08d9588d-4796-48f9-8c5b-f28f271b51d0");
client.Options.SetRequestHeader("secret", "bfbaf98fb5b343b2");
client.Options.SetRequestHeader("time", GetTimestamp().ToString());
client.Options.SetRequestHeader("os", "12");
client.Options.SetRequestHeader("script", "2");
client.Options.SetRequestHeader("baseProgrameLang", "10");
client.Options.SetRequestHeader("dev", "true");
await client.ConnectAsync(new Uri(BaseUrl), CancellationToken.None);
Console.WriteLine("Connect success");
await client.SendAsync(new ArraySegment<byte>(AddSeparator(Encoding.UTF8.GetBytes(@"{""protocol"":""json"", ""version"":1}")))
, WebSocketMessageType.Text, true, CancellationToken.None);//发送握手包
Console.WriteLine("Send success");
var buffer = new ArraySegment<byte>(new byte[1024]);
while (client.State == WebSocketState.Open)
{
var bytes = Encoding.UTF8.GetBytes(@"{
""type"": 6
}");//发送远程调用 log方法
await client.SendAsync(new ArraySegment<byte>(AddSeparator(bytes)), WebSocketMessageType.Text, true, CancellationToken.None);
await client.ReceiveAsync(buffer, CancellationToken.None);
byte[] databytes = new byte[buffer.Count];
for(int i = buffer.Offset; i < (buffer.Offset + buffer.Count); i++)
{
var aa = buffer.Array[i];
databytes[i] = aa;
}
var str = Encoding.UTF8.GetString(databytes);
//保存数据
_loggerService.AddLogger(str, 1);
Console.WriteLine(str);
}
}
private static byte[] AddSeparator(byte[] data)
{
List<byte> t = new List<byte>(data) { 0x1e };//0x1e record separator
return t.ToArray();
}
private static byte[] RemoveSeparator(byte[] data)
{
List<byte> t = new List<byte>(data);
t.Remove(0x1e);
return t.ToArray();
}
/// <summary>
/// 获取时间戳
/// </summary>
/// <returns></returns>
private int GetTimestamp()
{
DateTime dateTimeStart = TimeZoneInfo.ConvertTimeToUtc(new DateTime(1970, 1, 1, 8, 0, 0));
int timestamp = Convert.ToInt32((DateTime.Now - dateTimeStart).TotalSeconds);
return timestamp;
}
/// <summary>
/// 获取随机数
/// </summary>
/// <returns></returns>
private int GetNonce()
{
var random = new Random();
int nonce = random.Next(1, Int32.MaxValue);
return nonce;
}
}
}