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); }
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); } }
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); }
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); }
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); } })); }
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); }
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); } }
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)); }
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); }
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); } }