コード例 #1
0
        public async Task <bool> AppClientsDoActionAsync(string address, string appId, WebsocketAction action)
        {
            var result = await FunctionUtil.TRY(async() =>
            {
                using (var resp = await(address + "/RemoteOP/AppClientsDoAction".AppendQueryString("appId", appId))
                                  .AsHttp("POST", action)
                                  .Config(new RequestOptions {
                    ContentType = "application/json"
                })
                                  .SendAsync())
                {
                    if (resp.StatusCode == System.Net.HttpStatusCode.OK)
                    {
                        var result = resp.Deserialize <dynamic>();

                        if ((bool)result.success)
                        {
                            return(true);
                        }
                    }

                    return(false);
                }
            }, 5);

            await _sysLogService.AddSysLogAsync(new SysLog
            {
                LogTime = DateTime.Now,
                LogType = result ? SysLogType.Normal : SysLogType.Warn,
                AppId   = appId,
                LogText = $"通知节点{address}应用{appId}的客户端:{action.Action} 响应:{(result ? "成功" : "失败")}"
            });

            return(result);
        }
コード例 #2
0
    private void CreateAllAvatarRes()
    {
        DirectoryInfo dir = new DirectoryInfo("Assets/Resources/");

        foreach (var subdir in dir.GetDirectories())
        {
            string[] splits  = subdir.Name.Split('/');
            string   dirname = splits[splits.Length - 1];

            GameObject [] golist = Resources.LoadAll <GameObject>(dirname);

            AvatarRes avatarres = new AvatarRes();
            mAvatarResList.Add(avatarres);

            avatarres.mName      = dirname;
            avatarres.mSkeleton  = FindRes(golist, SkeletonName)[0];
            avatarres.mEyesList  = FindRes(golist, EyesName);
            avatarres.mFaceList  = FindRes(golist, FaceName);
            avatarres.mHairList  = FindRes(golist, HairName);
            avatarres.mPantsList = FindRes(golist, PantsName);
            avatarres.mShoesList = FindRes(golist, ShoesName);
            avatarres.mTopList   = FindRes(golist, TopName);

            string animpath            = "Assets/Anims/" + dirname + "/";
            List <AnimationClip> clips = FunctionUtil.CollectAll <AnimationClip>(animpath);
            avatarres.mAnimList.AddRange(clips);
        }
    }
コード例 #3
0
        public async Task <bool> OneClientDoActionAsync(string address, string clientId, WebsocketAction action)
        {
            var result = await FunctionUtil.TRY(async() =>
            {
                using (var resp = await(address + "/RemoteOP/OneClientDoAction?clientId=" + clientId)
                                  .AsHttp("POST", action)
                                  .Config(new RequestOptions {
                    ContentType = "application/json"
                })
                                  .SendAsync())
                {
                    if (resp.StatusCode == System.Net.HttpStatusCode.OK)
                    {
                        var result = resp.Deserialize <dynamic>();

                        if ((bool)result.success)
                        {
                            if (action.Action == ActionConst.Offline || action.Action == ActionConst.Remove)
                            {
                                if (_serverNodeClientReports.ContainsKey(address))
                                {
                                    if (_serverNodeClientReports[address].Infos != null)
                                    {
                                        var report = _serverNodeClientReports[address];
                                        report.Infos.RemoveAll(c => c.Id == clientId);
                                        report.ClientCount = report.Infos.Count;
                                    }
                                }
                            }

                            return(true);
                        }
                    }

                    return(false);
                }
            }, 5);

            using (var service = GetSysLogService())
            {
                await service.AddSysLogAsync(new SysLog
                {
                    LogTime = DateTime.Now,
                    LogType = result ? SysLogType.Normal : SysLogType.Warn,
                    LogText = $"通知节点【{address}】的客户端【{clientId}】:【{action.Action}】 响应:{(result ? "成功" : "失败")}"
                });
            }

            return(result);
        }
コード例 #4
0
        private bool GetDonwloadBandwidth(long countBytes, ref byte[] downloadData, byte[] endDown)
        {
            if (FunctionUtil.ContainsArrays(downloadData, endDown))
            {
                // bytes * 8bits / 7s * 1E+6 = X Mbits
                double bandwidth = ((double)(countBytes * 8L) / (double)(7.0 * 1E+6));
                network.BandwidthDownload = Convert.ToString(bandwidth);
                downloadData = null;

                return(true);
            }

            return(false);
        }
コード例 #5
0
        public Task TestEchoAsync()
        {
            return(Task.Run(async() =>
            {
                while (true)
                {
                    var nodes = await _serverNodeService.GetAllNodesAsync();
                    nodes.ForEach(n =>
                    {
                        try
                        {
                            FunctionUtil.TRY(() =>
                            {
                                using (var resp = (n.Address + "/home/echo").AsHttp().Send())
                                {
                                    if (resp.StatusCode == System.Net.HttpStatusCode.OK && resp.GetResponseContent() == "ok")
                                    {
                                        n.LastEchoTime = DateTime.Now;
                                        n.Status = Data.Entity.NodeStatus.Online;
                                        var report = GetClientReport(n);
                                        if (_serverNodeClientReports.ContainsKey(n.Address))
                                        {
                                            _serverNodeClientReports[n.Address] = report;
                                        }
                                        else
                                        {
                                            _serverNodeClientReports.AddOrUpdate(n.Address, report, (k, r) => report);
                                        }
                                    }
                                    else
                                    {
                                        n.Status = Data.Entity.NodeStatus.Offline;
                                    }
                                    _serverNodeService.UpdateAsync(n);
                                }
                            }, 5);
                        }
                        catch (Exception e)
                        {
                            _logger.LogInformation(e, "Try test node {0} echo , but fail .", n.Address);
                        }
                    });

                    await Task.Delay(5000 * 1);
                }
            }));
        }
コード例 #6
0
    private static void GenerateSkeleton(GameObject srcobj, string dir, string middir)
    {
        string prefabpath = Prefab_PATH + "/" + middir + "/";
        string animpath   = ANIM_PATH + "/" + middir + "/";

        DirectoryInfo dirinfo = new DirectoryInfo(dir);

        if (!dirinfo.Exists)
        {
            return;
        }

        GameObject obj = GameObject.Instantiate(srcobj);

        obj.name = middir + "_skeleton";
        obj.transform.position   = Vector3.zero;
        obj.transform.rotation   = Quaternion.identity;
        obj.transform.localScale = Vector3.one;

        foreach (SkinnedMeshRenderer smr in obj.GetComponentsInChildren <SkinnedMeshRenderer>())
        {
            GameObject.DestroyImmediate(smr.gameObject);
        }

        Animation anim = obj.GetComponent <Animation>();

        GameObject.DestroyImmediate(anim);

        anim = obj.AddComponent <Animation>();

        List <AnimationClip> clips = FunctionUtil.CollectAll <AnimationClip>(animpath);

        foreach (var clip in clips)
        {
            anim.AddClip(clip, clip.name);
        }

        string dstpath = prefabpath + obj.name.ToLower() + PREAFAB_SUFFIX;

        PrefabUtility.CreatePrefab(dstpath, obj);

        GameObject.DestroyImmediate(obj);
    }
コード例 #7
0
        public async Task TestEchoAsync(string address)
        {
            var node = await _serverNodeService.GetAsync(address);

            try
            {
                FunctionUtil.TRY(() =>
                {
                    using (var resp = (node.Address + "/home/echo").AsHttp().Send())
                    {
                        if (resp.StatusCode == System.Net.HttpStatusCode.OK && resp.GetResponseContent() == "ok")
                        {
                            node.LastEchoTime = DateTime.Now;
                            node.Status       = Data.Entity.NodeStatus.Online;
                            var report        = GetClientReport(node);
                            if (report != null)
                            {
                                if (_serverNodeClientReports.ContainsKey(node.Address))
                                {
                                    _serverNodeClientReports[node.Address] = report;
                                }
                                else
                                {
                                    _serverNodeClientReports.AddOrUpdate(node.Address, report, (k, r) => report);
                                }
                            }
                        }
                        else
                        {
                            node.Status = Data.Entity.NodeStatus.Offline;
                        }
                        _serverNodeService.UpdateAsync(node);
                    }
                }, 5);
            }
            catch (Exception e)
            {
                _logger.LogInformation(e, "Try test node {0} echo , but fail .", node.Address);
            }
        }
コード例 #8
0
        private ClientInfos GetClientReport(ServerNode node)
        {
            return(FunctionUtil.TRY(() =>
            {
                using (var resp = (node.Address + "/report/Clients").AsHttp().Config(new RequestOptions(new SerializeProvider())).Send())
                {
                    if (resp.StatusCode == System.Net.HttpStatusCode.OK)
                    {
                        var content = resp.GetResponseContent();
                        _logger.LogTrace($"ServerNode: {node.Address} report clients infomation , {content}");

                        var report = resp.Deserialize <ClientInfos>();
                        if (report != null)
                        {
                            return report;
                        }
                    }

                    return null;
                }
            }, 5));
        }
コード例 #9
0
        private async Task <bool> BandwidthCalculation()
        {
            System.Diagnostics.Debug.WriteLine("[ProfileNetworkFull]: Download");
            PublishProgress(55);

            streamSocket = new StreamSocket();
            await streamSocket.ConnectAsync(hostName, server.BandwidthPort.ToString());

            DataWriter writer = new DataWriter(streamSocket.OutputStream);
            DataReader reader = new DataReader(streamSocket.InputStream);

            byte[] endDown    = Encoding.UTF8.GetBytes("end_down");
            byte[] endSession = Encoding.UTF8.GetBytes("end_session");

            writer.WriteString("down");
            await writer.StoreAsync();

            await writer.FlushAsync();

            uint bufferSize = 8192;

            reader.InputStreamOptions = InputStreamOptions.Partial;

            long countBytes = 0L;

            byte[] downloadData = new byte[bufferSize];
            while (true)
            {
                uint readTransmittedData = await reader.LoadAsync(bufferSize);

                countBytes += readTransmittedData;

                if (readTransmittedData == bufferSize)
                {
                    reader.ReadBytes(downloadData);
                    if (GetDonwloadBandwidth(countBytes, ref downloadData, endDown))
                    {
                        break;
                    }
                }
                else
                {
                    byte[] tempData = new byte[readTransmittedData];
                    reader.ReadBytes(tempData);
                    //System.Diagnostics.Debug.WriteLine("[ProfileNetworkFull]: " + readTransmittedData + "/" + countBytes);
                    if (GetDonwloadBandwidth(countBytes, ref tempData, endDown))
                    {
                        break;
                    }
                }
            }

            if (halted)
            {
                return(false);
            }

            System.Diagnostics.Debug.WriteLine("[ProfileNetworkFull]: Upload");
            PublishProgress(75);
            writer.WriteString("up");
            await writer.StoreAsync();

            await writer.FlushAsync();

            System.Diagnostics.Stopwatch stopWatch = System.Diagnostics.Stopwatch.StartNew();
            while (stopWatch.ElapsedMilliseconds < 11000)
            {
                writer.WriteBytes(data);
                await writer.StoreAsync();

                await writer.FlushAsync();
            }
            stopWatch.Stop();

            writer.WriteString("end_up");
            await writer.StoreAsync();

            await writer.FlushAsync();

            var readFinish = await reader.LoadAsync(64);

            var endSessionBuffer = new byte[readFinish];

            reader.ReadBytes(endSessionBuffer);

            if (FunctionUtil.ContainsArrays(endSessionBuffer, endSession))
            {
                string   dataBlock = Encoding.UTF8.GetString(endSessionBuffer, 0, endSessionBuffer.Length);
                string[] res       = dataBlock.Split(new char[] { ':' });
                network.BandwidthUpload = res[1];
            }

            Close(ref writer);
            Close(ref reader);
            Close(ref streamSocket);

            endSessionBuffer = null;

            return(true);
        }
コード例 #10
0
    private static void GeneratePrefab(GameObject srcobj, string dir, string middir)
    {
        string prefabpath = Prefab_PATH + "/" + middir + "/";
        string matpath    = MAT_PATH + middir + "/";

        DirectoryInfo dirinfo = new DirectoryInfo(dir);

        if (!dirinfo.Exists)
        {
            return;
        }

        dirinfo = new DirectoryInfo(prefabpath);
        if (!dirinfo.Exists)
        {
            Directory.CreateDirectory(prefabpath);
        }

        List <Material> materials = FunctionUtil.CollectAll <Material>(matpath);

        foreach (SkinnedMeshRenderer smr in srcobj.GetComponentsInChildren <SkinnedMeshRenderer>(true))
        {
            GameObject          obj            = (GameObject)PrefabUtility.InstantiatePrefab(smr.gameObject);
            SkinnedMeshRenderer renderer       = obj.GetComponent <SkinnedMeshRenderer>();
            GameObject          rendererParent = obj.transform.parent.gameObject;
            foreach (SkinnedMeshRenderer tempsmr in rendererParent.GetComponentsInChildren <SkinnedMeshRenderer>())
            {
                if (tempsmr != renderer)
                {
                    GameObject.DestroyImmediate(tempsmr.gameObject);
                }
            }

            Animation anim = rendererParent.GetComponent <Animation>();
            GameObject.DestroyImmediate(anim);

            foreach (var material in materials)
            {
                if (material == null)
                {
                    continue;
                }

                if (!material.name.Contains(obj.name))
                {
                    continue;
                }

                GameObject newobj = GameObject.Instantiate(rendererParent);
                newobj.name = material.name;
                newobj.transform.position   = Vector3.zero;
                newobj.transform.rotation   = Quaternion.identity;
                newobj.transform.localScale = Vector3.one;

                SkinnedMeshRenderer newrenderer = newobj.GetComponentInChildren <SkinnedMeshRenderer>();
                newrenderer.material = material;

                string dstpath = prefabpath + newobj.name + PREAFAB_SUFFIX;
                PrefabUtility.CreatePrefab(dstpath, newobj);

                GameObject.DestroyImmediate(newobj);
            }

            GameObject.DestroyImmediate(rendererParent);
        }
    }