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

101 lines
3.7 KiB
C#
Raw Normal View History

2021-08-06 18:23:12 +08:00
using System;
using System.Collections.Generic;
using System.Linq;
2021-08-11 08:16:16 +08:00
using System.Net.WebSockets;
using System.Text;
using System.Threading;
2021-08-06 18:23:12 +08:00
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
2021-08-11 08:16:16 +08:00
using Waste.Application;
2021-08-06 18:23:12 +08:00
namespace Waste.Web.Entry.Pages.Socket
{
public class TestModel : PageModel
{
2021-08-11 08:16:16 +08:00
private readonly ILoggerService _loggerService;
public TestModel(ILoggerService loggerService)
2021-08-06 18:23:12 +08:00
{
2021-08-11 08:16:16 +08:00
_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);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ְ<EFBFBD>
Console.WriteLine("Send success");
var buffer = new ArraySegment<byte>(new byte[1024]);
while (client.State == WebSocketState.Open)
{
var bytes = Encoding.UTF8.GetBytes(@"{
""type"": 6
}");//<2F><><EFBFBD><EFBFBD>Զ<EFBFBD>̵<EFBFBD><CCB5><EFBFBD> log<6F><67><EFBFBD><EFBFBD>
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);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
_loggerService.AddLogger(str, 1);
Console.WriteLine(str);
}
}
2021-08-07 18:33:27 +08:00
2021-08-11 08:16:16 +08:00
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>
/// <20><>ȡʱ<C8A1><CAB1><EFBFBD><EFBFBD>
/// </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>
/// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <returns></returns>
private int GetNonce()
{
var random = new Random();
int nonce = random.Next(1, Int32.MaxValue);
return nonce;
2021-08-06 18:23:12 +08:00
}
}
}