예제 #1
0
파일: HttpUtil.cs 프로젝트: nocook/SuperB
        public static async Task <T> GetAsync <T>(string url, string token = null)
        {
            T res = default(T);

            try
            {
                var request = (HttpWebRequest)WebRequest.Create(url);
                request.Method      = "GET";
                request.ContentType = "application/json;charset=UTF-8";
                if (!string.IsNullOrEmpty(token))
                {
                    request.Headers.Add("access_token", token);
                }

                var   resTask = request.GetResponseAsync();
                await resTask;
                if (!(resTask.Result is HttpWebResponse response))
                {
                    return(res);
                }
                Stream       readStream = response.GetResponseStream();
                StreamReader Reader     = new StreamReader(readStream, Encoding.UTF8);
                res = JsonSrialize.Desrialize <T>(Reader.ReadLine());
            }
            catch (Exception ex)
            {
                LogHelper.Error(ex);
            }

            return(res);
        }
예제 #2
0
파일: HttpUtil.cs 프로젝트: nocook/SuperB
        public static async Task <RequestResponse> PostAsync(string url, string param, string token = null)
        {
            RequestResponse res = null;

            try
            {
                byte[] payload = Encoding.UTF8.GetBytes(param);
                var    request = (HttpWebRequest)WebRequest.Create(url);
                request.Method        = "POST";
                request.ContentType   = "application/json;charset=UTF-8";
                request.ContentLength = payload.Length;
                if (!string.IsNullOrEmpty(token))
                {
                    request.Headers.Add("access_token", token);
                }
                var   streamTask = request.GetRequestStreamAsync();
                await streamTask;
                if (streamTask.Result == null)
                {
                    return(res);
                }
                Stream writer = streamTask.Result;
                writer.Write(payload, 0, payload.Length);
                writer.Close();

                var   resTask = request.GetResponseAsync();
                await resTask;
                if (!(resTask.Result is HttpWebResponse response))
                {
                    return(res);
                }
                Stream       readStream = response.GetResponseStream();
                StreamReader Reader     = new StreamReader(readStream, Encoding.UTF8);
                res = JsonSrialize.Desrialize <RequestResponse>(Reader.ReadLine());
            }
            catch (Exception ex)
            {
                LogHelper.Error(ex);
            }

            return(res);
        }
예제 #3
0
        /// <summary>
        /// 收集所有的page之后,再response
        /// </summary>
        /// <param name="topic"></param>
        /// <param name="payload"></param>
        private async void TagSetupReceived(string topic, byte[] payload)
        {
            string     strPayload = Encoding.UTF8.GetString(payload);
            SetupModel setup      = JsonSrialize.Desrialize <SetupModel>(strPayload);

            LogHelper.Debug("TagSetupReceived: " + strPayload);
            if (!(PageModelBase <GroupRes> .GatherAllPages(setup, 5000, null) is SetupModel pages))
            {
                return;
            }

            var   task = Setup2Proxys(pages);
            await task;

            if (task.Result != null)
            {
                LogHelper.Debug("task.Result.code = " + task.Result.code);
                await MqttMgr.Inst.PublishAsync(topic + "/response", JsonSrialize.Srialize(task.Result));
            }
        }
예제 #4
0
파일: HttpUtil.cs 프로젝트: nocook/SuperB
        public static async Task <string> LoginAsync(string url, LoginUser param)
        {
            string res = string.Empty;

            try
            {
                byte[] payload = JsonSrialize.Object2Bytes(param);
                var    request = (HttpWebRequest)WebRequest.Create(url);
                request.Method        = "POST";
                request.ContentType   = "application/json;charset=UTF-8";
                request.ContentLength = payload.Length;
                var   streamTask = request.GetRequestStreamAsync();
                await streamTask;
                if (streamTask.Result == null)
                {
                    return(res);
                }
                Stream writer = streamTask.Result;
                writer.Write(payload, 0, payload.Length);
                writer.Close();
                var   resTask = request.GetResponseAsync();
                await resTask;
                if (!(resTask.Result is HttpWebResponse response))
                {
                    return(res);
                }
                Stream       readStream = response.GetResponseStream();
                StreamReader Reader     = new StreamReader(readStream, Encoding.UTF8);
                res = Reader.ReadLine();
            }
            catch (Exception ex)
            {
                LogHelper.Error(ex);
            }

            return(res);
        }
예제 #5
0
        public void Init()
        {
            var token = HttpUtil.LoginAsync($"http://{cfg.AppSettings["serverUrl"]}/inIoT/userServer/tologin",
                                            new LoginUser()
            {
                username = "******",
                pwd      = "12345"
            });

            token.Wait();

            if (string.IsNullOrEmpty(token.Result))
            {
                LogHelper.Error($"LoginAsync {cfg.AppSettings["serverUrl"]} error");
                return;
            }
            ServerToken = JsonSrialize.Desrialize <LoginResponse>(token.Result).data.token;

            var req1 = HttpUtil.GetAsync <GroupResResponse>($"http://{cfg.AppSettings["serverUrl"]}/inIoT/devServer/tagGroup/G433635714868056",
                                                            ServerToken);

            req1.Wait();
            var req = HttpUtil.PostAsync($"http://{cfg.AppSettings["serverUrl"]}/inIoT/devServer/deviceRes",
                                         JsonSrialize.Srialize(new DevModel()
            {
                dvIsid      = "dfsdf",
                dvName      = "ssssssf",
                dvTypeCode  = "15",
                managerIsid = cfg.AppSettings["managerIsid"],
                nodeIsid    = "100114",
                addrRes     = new MqttCommon.Setup.AddResource()
                {
                    communicationType = 1,
                    dvAddr1           = "1.1.1.1",
                    dvAddr2           = "2222"
                }
            }), SuperBCenter.ServerToken);


            SdkMgr.Inst.Init().Wait();
            //   SuperBRepertory.Inst.SynchronizeDb().Wait();

            //    MqttMgr.Inst.Init().Wait();

            //   SetupMgr.Inst.Init().Wait();
            return;


            string ss = JsonSrialize.Srialize(new DevModel[]
            {
                new DevModel()
                {
                    addrRes = new AddResource()
                    {
                        communicationType = 0,
                        connectParam1     = "9600",
                        connectParam2     = "8",
                        connectParam3     = "1",
                        connectParam4     = "1",
                        dvAddr1           = "3",
                        dvAddr2           = "1",
                    },
                    dvName      = "sdf",
                    dvTypeCode  = "10",
                    managerIsid = "mgrTest2",
                    nodeIsid    = "zhc-yq",
                    dvIsid      = Uuid.Create16Token(),
                }
            });

            HttpUtil.PostAsync("http://10.10.12.164:8080/inIoT/devServer/deviceRes/list", ss, token.Result);
        }
예제 #6
0
        private async Task HandleAttribute(List <BStruBase> atts)
        {
            PlateformDevs pl = new PlateformDevs();
            ConcurrentDictionary <string, List <TagRes> > groupBuffer = new ConcurrentDictionary <string, List <TagRes> >();

            foreach (var att in atts)
            {
                switch (att.Type)
                {
                case EnumType.STATION:
                {
                    if (!(att is TStation st))
                    {
                        continue;
                    }
                    await SuperBRepertory.Inst.UpdateOrAddStation(st);
                }
                break;

                case EnumType.DEVICE:
                {
                    if (!(att is TDevice dev))
                    {
                        continue;
                    }
                    await SuperBRepertory.Inst.UpdateOrAddDevice(dev);
                }
                break;

                case EnumType.AI:
                case EnumType.AO:
                case EnumType.DI:
                case EnumType.DO:
                case EnumType.STRIN:
                {
                    await SuperBRepertory.Inst.BeginUpdateOrAddTag(att, async (tag, groupIsid, change) =>
                        {
                            if (change == MqttCommon.ChangeType.Add)
                            {
                                groupBuffer.AddOrUpdate(groupIsid, new List <TagRes>(),
                                                        (oKey, oVal) => { oVal.Add(tag.Tag); return(oVal); });
                            }
                            else if (change == MqttCommon.ChangeType.Update)
                            {
                                return(true);
                            }

                            return(false);
                        });
                }
                break;

                default:
                    break;
                }

                foreach (var pair in groupBuffer)
                {
                    var req = await HttpUtil.GetAsync <GroupResResponse>(
                        $"http://{cfg.AppSettings["serverUrl"]}/inIoT/devServer/tagGroup/{pair.Key}",
                        SuperBCenter.ServerToken);

                    if (req == null)
                    {
                        continue;
                    }
                    if (req.codeid != 0)
                    {
                        var devMap = SuperBRepertory.Inst.devicemap.Find(d => d.groupIsid == pair.Key);
                        if (devMap == null)
                        {
                            LogHelper.Error($"GroupRes {pair.Key} cannot find map to device");
                            continue;
                        }
                        var device = SuperBRepertory.Inst.DevList.Find(d => d.Device.dvIsid == devMap.devIsid);
                        if (device == null)
                        {
                            LogHelper.Error($"GroupRes {pair.Key} cannot find device");
                            continue;
                        }
                        var res = await HttpUtil.PostAsync($"http://{cfg.AppSettings["serverUrl"]}/inIoT/devServer/tagGroup",
                                                           JsonSrialize.Srialize(new GroupRes()
                        {
                            groupIsid       = pair.Key,
                            collectPeriod   = 2,
                            dvIsid          = device.Device.dvIsid,
                            nodeIsid        = device.NodeIsid,
                            overTime        = 2,
                            relinkCount     = 2,
                            relinkPeriod    = 2,
                            transProtocolId = "1",
                        }),
                                                           SuperBCenter.ServerToken);

                        if (res == null || res.codeid != 0)
                        {
                            LogHelper.Error($"GroupRes {pair.Key} cannot add");
                            continue;
                        }
                    }
                }
            }
        }
예제 #7
0
        public async Task <bool> UpdateOrAddDevice(TDevice data)
        {
            var node = nodemap.Find(m => m.objId == data.ParentID);

            if (node == null)
            {
                return(false);              //没有父节点,返回
            }
            var dev = DevList.Find(n => n.OrgiData.ID == data.ID);

            if (dev == null)    //新增设备,返回新增的设备,等web新增成功,插入数据库
            {
                dev = new SuperBDevice(data, node.nodeIsid);
                var map = new SqlDeviceMap()
                {
                    devIsid = dev.Device.dvIsid, objId = data.ID, groupIsid = Uuid.Create16Token()
                };
                var req = await HttpUtil.PostAsync($"http://{cfg.AppSettings["serverUrl"]}/inIoT/devServer/deviceRes",
                                                   JsonSrialize.Srialize(new DevModel()
                {
                    dvIsid      = dev.Device.dvIsid,
                    dvName      = dev.Device.dvName,
                    dvTypeCode  = dev.Device.dvTypeCode,
                    managerIsid = cfg.AppSettings["managerIsid"],
                    nodeIsid    = dev.NodeIsid,
                    addrRes     = new MqttCommon.Setup.AddResource()
                    {
                        communicationType = 1,
                        dvAddr1           = "1.1.1.1",
                        dvAddr2           = "2222"
                    }
                }), SuperBCenter.ServerToken);

                if (req == null || req.codeid != 0)
                {
                    return(false);
                }

                try
                {
                    await _db.tDevice.AddAsync(dev.DbData);

                    if (!devicemap.Exists(d => d.objId == dev.OrgiData.ID && d.devIsid == dev.NodeIsid))
                    {
                        await _db.devicemap.AddAsync(map);

                        devicemap.Add(map);
                    }
                    await _db.SaveChangesAsync();

                    DevList.Add(dev);
                }
                catch (Exception ex)
                {
                    LogHelper.Error(ex);
                    return(false);
                }
            }
            else
            {
                if (!devicemap.Exists(d => d.objId == dev.OrgiData.ID && d.devIsid == dev.Device.dvIsid))
                {
                    return(false);
                }
                if (dev.Update(data))
                {
                    try
                    {
                        _db.tDevice.Update(dev.DbData);
                        await _db.SaveChangesAsync();
                    }
                    catch (Exception ex)
                    {
                        LogHelper.Error(ex);
                        return(false);
                    }
                }
            }

            return(true);
        }