public IotCommand(string command, string dataHex, byte[] data = null) { Name = command; DataHex = dataHex; Data = data ?? EncodingHelper.HexToBytes(dataHex); Value = NaryHelper.HexToInt(command); }
public Func <HttpContext, object> Get() { return(ctx => { var userService = ctx.RequestServices.GetService <IUserService>(); if (ctx.User.Identity.IsAuthenticated) { var claim = ctx.User.FindFirst("sub"); if (claim != null) { var userId = NaryHelper.ToNary(claim.Value, 36); var authId = ctx.User.FindFirst("authid")?.Value ?? "none"; logger.LogDebug($"Sync user from \"{ctx.User.Identity.AuthenticationType}\" with \"{userId}:{authId}\""); return userService.QueryById(userId, authId); } else { logger.LogError($"Sync user from \"{ctx.User.Identity.AuthenticationType}\" with error"); return null; } } return userService.QueryByUserName("guest", "none"); }); }
public async Task Login(string mac, string body) { var iotData = GetData(mac); iotData.Online = true; iotData.LastLoginTime = DateTime.Now; iotData.Save(); await iotDataHub.Clients.Group(mac).SendAsync("Send", iotData); var ctx = new RequestContext("iot", "exe_iot_login") .SetParam(new { mac, softver = NaryHelper.YmHexToDouble(body.Substring(0, 4)), hardver = NaryHelper.YmHexToDouble(body.Substring(4, 4)), wifi = EncodingHelper.HexToBytes(body.Substring(8)).ToStr("") }); await Session.ExecuteAsync(ctx); var json = SerializeHelper.ToJson(ctx.Params); logger.LogDebug($"IotService-LOGIN: {json}"); LogRec(mac, iotData.Device.Sbno, "登录", "Login", body, json); }
private object GetParamValue(string dataHex, IotParam param) { try { var length = param.Type == "C" ? 1 : param.Length; var val = dataHex.Substring(2 * param.Start, 2 * length); if (val != "EEEE" && val != "EE") { switch (param.Type) { case "I": return(NaryHelper.YmHexToInt(val)); case "B": return(NaryHelper.HexToInt(val) > 0); case "C": return(BinaryHelper.GetHexBit(val, param.Length)); default: return(NaryHelper.YmHexToDouble(val)); } } return("异常"); } catch { return(null); } }
public string Create(string name, string prefix, int length, bool autoSave, int?nary) { var value = ""; name += prefix; lock (SyncObj) { var seed = GetSeed(name); if (seed != null && seed.Value.Length != prefix.Length + length) { base.Delete(seed); seed = null; } if (seed == null) { value = $"{prefix}{"1".PadLeft(length, '0')}"; seed = new Sys_Seed(); seed.InitializeId(); seed.Name = name; seed.Value = $"{prefix}{"0".PadLeft(length, '0')}"; seed.DCreate = DateTime.Now; seed.DUpdate = DateTime.Now; base.Insert(seed); } else { var preVal = seed.Value.Substring(prefix.Length).ToUpper(); string curVal = null; if (!nary.HasValue) { if (int.TryParse(preVal, out int result)) { curVal = (++result).ToString(); } else { nary = 36; } } if (!curVal.HasValue()) { curVal = NaryHelper.FromNary(NaryHelper.ToNary(curVal, nary.Value) + 1, nary.Value); } value = prefix + curVal.PadLeft(length, '0'); } if (autoSave) { Save(name, value); } return(value); } }
private void btnLogin_Click(object sender, EventArgs e) { var wifi = EncodingHelper.ToBytes(txtWifi.Text).ToHex(); var hard = NaryHelper.ToYmHex(txtHard.Text.Trim(), 4); var soft = NaryHelper.ToYmHex(txtSoft.Text.Trim(), 4); var req = IotRequest.CreateRequest(filter, txtMac.Text.Trim(), "00F1", soft + hard + wifi); Send(req); }
static void Main(string[] args) { var value = -444.77; var ymHex = value.ToYmHex(6); Console.WriteLine(ymHex); value = NaryHelper.YmHexToDouble(ymHex); Console.WriteLine(value); Console.ReadLine(); }
private string GetWeaHex(string mac) { var iotData = App.Cache.Get <IotData>($"iot_data_{mac}"); if (iotData != null && iotData.Weather != null) { var pm25 = int.Parse(iotData.Weather.aqi.pm25); var temp = double.Parse(iotData.Weather.condition.temp); var humi = int.Parse(iotData.Weather.condition.humidity); return($"{NaryHelper.ToYmHex(pm25, 2)}{NaryHelper.ToYmHex(temp, 4)}{NaryHelper.ToYmHex(humi, 2)}"); } return($"EEEEEEEE"); }
private async void btnConn_Click(object sender, EventArgs e) { this.btnConn.Enabled = false; this.Cursor = Cursors.WaitCursor; filter = new IotReceiveFilter(header.Text.Trim(), Convert.ToInt32(key.Text.Trim(), 16)); client = new EasyClient(); client.Closed += (s, arg) => Output("Client-Conn: disonnected from server."); client.Error += (s, arg) => Output($"Error: {arg.Exception.GetMessage()}"); client.Initialize(filter, req => { Output($"Rece-加密数据: {req.HeaderHex}-{req.Length.ToString("{00}")} {req.EncryptedBody.ToHex()}"); Output($"Rece-解密数据: {req.HeaderHex}-{req.Length.ToString("{00}")} {req.BodyHex}"); Output($"Rece-拆包解验: {req.HeaderHex}-{req.Length.ToString("{00}")} {req.Device.Mac}-{req.SessionId} {req.Command} {req.Crc16}"); if (req.Command.IsResponse) { var cmd = req.Command.Name; if (cmd == "80F1") { if (req.Command.DataHex.StartsWith("00")) { sessions[req.Device.Mac] = req.SessionId; Output($"Client-Login: Success with SessionId-{req.SessionId}"); } else { Output($"Client-Login: Fail with response Code-{req.Command.DataHex}"); } } } else { var body = ""; switch (req.Command.Name) { case "00A1": SetBox(txtOn, NaryHelper.HexToInt(req.Command.DataHex).ToString()); break; case "00A2": SetBox(txtSpeed, NaryHelper.HexToInt(req.Command.DataHex).ToString()); break; case "00A3": SetBox(txtMode, NaryHelper.HexToInt(req.Command.DataHex).ToString()); break; case "00A7": var type = req.Command.DataHex.Substring(0, 2); if (type == "01") { body = int.Parse(txtNetDay.Text).ToYmHex(4); } else if (type == "02") { SetBox(txtNetDay, NaryHelper.HexToInt(req.Command.DataHex.Substring(2)).ToString()); } else { txtNetDay.Text = "200"; } break; case "00AB": SetBox(txtHumSet, NaryHelper.HexToInt(req.Command.DataHex).ToString()); break; case "00AD": type = req.Command.DataHex.Substring(0, 2); if (type == "01") { body = txtMenu.Text.Trim(); } else { SetBox(txtMenu, req.Command.DataHex.Substring(2)); } break; case "00AE": type = req.Command.DataHex.Substring(0, 2); if (type == "01") { body = txtTime.Text.Trim(); } else { SetBox(txtTime, req.Command.DataHex.Substring(2)); } break; case "00AF": type = req.Command.DataHex.Substring(0, 2); if (type == "01") { body = txtShuang.Text.Trim(); } else { SetBox(txtShuang, req.Command.DataHex.Substring(2)); } break; } var res = req.CreateResponse("00" + body); Send(res); Send(); } }); var ip = IPAddress.Parse(txtIP.Text.Trim().Split(':')[0]); var port = int.Parse(txtIP.Text.Trim().Split(':')[1]); if (await client.ConnectAsync(new IPEndPoint(ip, port))) { Output($"Connect to server [{txtIP.Text.Trim()}] success!"); } else { Output($"Connect to server [{txtIP.Text.Trim()}] fail!"); } this.Cursor = Cursors.Default; this.btnConn.Enabled = true; }
public virtual string NextStringId() { return(NaryHelper.FromNary(NextId(), 36)); }