Ejemplo n.º 1
0
 public IotCommand(string command, string dataHex, byte[] data = null)
 {
     Name    = command;
     DataHex = dataHex;
     Data    = data ?? EncodingHelper.HexToBytes(dataHex);
     Value   = NaryHelper.HexToInt(command);
 }
Ejemplo n.º 2
0
        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");
            });
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
            }
        }
Ejemplo n.º 5
0
        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);
            }
        }
Ejemplo n.º 6
0
        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);
        }
Ejemplo n.º 7
0
        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();
        }
Ejemplo n.º 8
0
        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");
        }
Ejemplo n.º 9
0
        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;
        }
Ejemplo n.º 10
0
 public virtual string NextStringId()
 {
     return(NaryHelper.FromNary(NextId(), 36));
 }