public void QueryClientsAsync(QueryClientsRequest query) { try { var data = _clientDataSet.QueryClients( user: null, query, out int total, out CoinSnapshotData[] latestSnapshots,
public void QueryClientsAsync(QueryClientsRequest query, Action <QueryClientsResponse, Exception> callback) { RpcRoot.JsonRequestBinaryResponseRpcHelper.SignPostAsync( RpcRoot.OfficialServerHost, RpcRoot.OfficialServerPort, _controllerName, nameof(IClientDataBinaryController <HttpResponseMessage> .QueryClients), data: query, callback); }
public void QueryClientsAsync(QueryClientsRequest query, Action <QueryClientsResponse, Exception> callback) { RpcRoot.JsonRpc.SignPostAsync( RpcRoot.OfficialServerHost, RpcRoot.OfficialServerPort, _controllerName, nameof(IClientDataController.QueryClients), data: query, callback); }
public HttpResponseMessage QueryClients([FromBody] QueryClientsRequest request) { QueryClientsResponse response = ClientDataController.DoQueryClients(request, User); var httpResponseMessage = new HttpResponseMessage(HttpStatusCode.OK) { Content = new ByteArrayContent(VirtualRoot.BinarySerializer.Serialize(response)) }; httpResponseMessage.Content.Headers.ContentType = WebApiRoot.BinaryContentType; return(httpResponseMessage); }
public void QueryClientsAsync(QueryClientsRequest query) { if (!MinerStudioRoot.WsClient.IsOpen) { VirtualRoot.Out.ShowWarn("和服务器失去连接", autoHideSeconds: 4); return; } MinerStudioRoot.WsClient.SendAsync(new WsMessage(Guid.NewGuid(), WsMessage.QueryClientDatas) { Data = query }); }
public void QueryClients( int pageIndex, int pageSize, Guid?mineWorkId, string minerIp, string minerName, MineStatus mineState, string mainCoin, string mainCoinPool, string mainCoinWallet, string dualCoin, string dualCoinPool, string dualCoinWallet, Action <QueryClientsResponse> callback) { Task.Factory.StartNew(() => { Guid messageId = Guid.NewGuid(); try { using (var service = CreateService()) { var request = new QueryClientsRequest { LoginName = LoginName, PageIndex = pageIndex, PageSize = pageSize, MineWorkId = mineWorkId, MinerIp = minerIp, MinerName = minerName, MineState = mineState, MainCoin = mainCoin, MainCoinPool = mainCoinPool, MainCoinWallet = mainCoinWallet, DualCoin = dualCoin, DualCoinPool = dualCoinPool, DualCoinWallet = dualCoinWallet, Timestamp = DateTime.Now }; request.SignIt(Password); QueryClientsResponse response = service.QueryClients(request); callback?.Invoke(response); } } catch (CommunicationException e) { Global.DebugLine(e.Message, ConsoleColor.Red); callback?.Invoke(QueryClientsResponse.ClientError(messageId, e.Message)); } catch (Exception e) { Global.Logger.Error(e.Message, e); callback?.Invoke(QueryClientsResponse.ClientError(messageId, e.Message)); } }); }
public void QueryClientsAsync(QueryClientsRequest query, Action <QueryClientsResponse, Exception> callback) { try { var data = _clientDataSet.QueryClients( user: null, query, out int total, out List <CoinSnapshotData> latestSnapshots, out int totalOnlineCount, out int totalMiningCount); callback?.Invoke(QueryClientsResponse.Ok(data, total, latestSnapshots, totalMiningCount, totalOnlineCount), null); } catch (Exception e) { callback?.Invoke(ResponseBase.ServerError <QueryClientsResponse>(e.Message), e); } }
public void QueryClientsAsync(QueryClientsRequest query) { try { var data = _clientDataSet.QueryClients( user: null, query, out int total, out List <CoinSnapshotData> latestSnapshots, out int totalOnlineCount, out int totalMiningCount); VirtualRoot.RaiseEvent(new QueryClientsResponseEvent(QueryClientsResponse.Ok(data, total, latestSnapshots, totalMiningCount, totalOnlineCount))); } catch (Exception e) { VirtualRoot.RaiseEvent(new QueryClientsResponseEvent(ResponseBase.ServerError <QueryClientsResponse>(e.Message))); } }
public void QueryClientsAsync(QueryClientsRequest query) { if (!MinerStudioRoot.WsClient.IsOpen) { // 如果是刚刚登录,Ws连接可能正在连接中还没连上了就不用提示和服务器失去连接了。 if ((DateTime.Now - RpcRoot.LoginedOn).Seconds < 2) { return; } return; } MinerStudioRoot.WsClient.SendAsync(new WsMessage(Guid.NewGuid(), WsMessage.QueryClientDatas) { Data = query }); }
internal static QueryClientsResponse DoQueryClients(QueryClientsRequest request, UserData user) { if (request == null) { return(ResponseBase.InvalidInput <QueryClientsResponse>("参数错误")); } request.PagingTrim(); try { var data = WebApiRoot.ClientDataSet.QueryClients( user, request, out int total, out List <CoinSnapshotData> latestSnapshots, out int totalOnlineCount, out int totalMiningCount) ?? new List <ClientData>(); return(QueryClientsResponse.Ok(data, total, latestSnapshots, totalMiningCount, totalOnlineCount)); } catch (Exception e) { Logger.ErrorDebugLine(e); return(ResponseBase.ServerError <QueryClientsResponse>(e.Message)); } }
public QueryClientsResponse QueryClients(QueryClientsRequest request) { if (request == null) { return(QueryClientsResponse.InvalidInput(Guid.Empty, "参数错误")); } try { if (string.IsNullOrEmpty(request.LoginName)) { return(QueryClientsResponse.InvalidInput(request.MessageId, "登录名不能为空")); } if (!HostRoot.Current.UserSet.TryGetKey(request.LoginName, out IUser key)) { return(QueryClientsResponse.Forbidden(request.MessageId)); } if (!request.Timestamp.IsInTime()) { return(QueryClientsResponse.Expired(request.MessageId)); } if (request.Sign != request.GetSign(key.Password)) { return(QueryClientsResponse.Forbidden(request.MessageId, "签名验证未通过")); } int total; var data = HostRoot.Current.ClientSet.QueryClients( request.PageIndex, request.PageSize, request.MineWorkId, request.MinerIp, request.MinerName, request.MineState, request.MainCoin, request.MainCoinPool, request.MainCoinWallet, request.DualCoin, request.DualCoinPool, request.DualCoinWallet, out total) ?? new List <ClientData>(); return(new QueryClientsResponse(data) { Total = total }); } catch (Exception e) { Global.Logger.ErrorDebugLine(e.Message, e); return(QueryClientsResponse.ServerError(request.MessageId, e.Message)); } }
public static QueryClientsForWsRequest Create(QueryClientsRequest request, string loginName) { return(new QueryClientsForWsRequest { Coin = request.Coin, GpuDriver = request.GpuDriver, GpuName = request.GpuName, GpuType = request.GpuType, GroupId = request.GroupId, Kernel = request.Kernel, MinerIp = request.MinerIp, MinerName = request.MinerName, MineState = request.MineState, PageIndex = request.PageIndex, PageSize = request.PageSize, Pool = request.Pool, SortDirection = request.SortDirection, SortField = request.SortField, Version = request.Version, Wallet = request.Wallet, WorkId = request.WorkId, LoginName = loginName }); }
public QueryClientsResponse QueryClients([FromBody] QueryClientsRequest request) { return(DoQueryClients(request, User)); }
public void QueryClientsAsync(QueryClientsRequest query) { Service.QueryClientsAsync(query); }
public void QueryClientsAsync(QueryClientsRequest query, Action <QueryClientsResponse, Exception> callback) { // 什么也不做 }
/// <summary> /// /// </summary> /// <param name="user">传null表示是内网群控调用</param> /// <param name="query"></param> /// <param name="total"></param> /// <param name="coinSnapshots"></param> /// <param name="onlineCount"></param> /// <param name="miningCount"></param> /// <returns></returns> public List <ClientData> QueryClients( IUser user, QueryClientsRequest query, out int total, out CoinSnapshotData[] coinSnapshots, out int onlineCount, out int miningCount) { Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); coinSnapshots = new CoinSnapshotData[0]; onlineCount = 0; miningCount = 0; if (!IsReadied || query == null) { total = 0; return(new List <ClientData>()); } List <ClientData> list = new List <ClientData>(); ClientData[] data = null; bool isIntranet = user == null; if (isIntranet) { data = _dicByObjectId.Values.ToArray(); } else if (user.IsAdmin()) { data = _dicByObjectId.Values.ToArray(); } else { string loginName = user.LoginName; if (string.IsNullOrEmpty(loginName)) { total = 0; return(new List <ClientData>()); } if (!_clientDatasByLoginName.TryGetValue(loginName, out ClientDatas clientDatas)) { clientDatas = new ClientDatas(loginName, _dicByObjectId.Values.Where(a => a.LoginName == loginName).ToList()); _clientDatasByLoginName[loginName] = clientDatas; } data = clientDatas.Datas; } bool isFilterByGroup = query.GroupId.HasValue && query.GroupId.Value != Guid.Empty; bool isFilterByMinerIp = !string.IsNullOrEmpty(query.MinerIp); bool isFilterByMinerName = !string.IsNullOrEmpty(query.MinerName); bool isFilterByVersion = !string.IsNullOrEmpty(query.Version); bool isFilterByWork = query.WorkId.HasValue && query.WorkId.Value != Guid.Empty; bool isFilterByCoin = !isFilterByWork && !string.IsNullOrEmpty(query.Coin); bool isFilterByPool = !isFilterByWork && !string.IsNullOrEmpty(query.Pool); bool isFilterByWallet = !isFilterByWork && !string.IsNullOrEmpty(query.Wallet); bool isFilterByKernel = !isFilterByWork && !string.IsNullOrEmpty(query.Kernel); bool isFilterByGpuType = query.GpuType != GpuType.Empty; bool isFilterByGpuName = !string.IsNullOrEmpty(query.GpuName); bool isFilterByGpuDriver = !string.IsNullOrEmpty(query.GpuDriver); for (int i = 0; i < data.Length; i++) { var item = data[i]; bool isInclude = true; if (isInclude && isFilterByGroup) { isInclude = item.GroupId == query.GroupId.Value; } if (isInclude) { switch (query.MineState) { case MineStatus.All: break; case MineStatus.Mining: isInclude = item.IsMining == true; break; case MineStatus.UnMining: isInclude = item.IsMining == false; break; default: break; } } if (isInclude && isFilterByMinerIp) { isInclude = !string.IsNullOrEmpty(item.LocalIp) && item.LocalIp.Contains(query.MinerIp); if (!isInclude) { if (query.MinerIp.IndexOf(':') != -1) { isInclude = query.MinerIp.Equals(item.MinerIp); } else if (!string.IsNullOrEmpty(item.MinerIp)) { // MinerIp可能带有端口号 int index = item.MinerIp.IndexOf(':'); string minerIp = item.MinerIp; if (index != -1) { minerIp = minerIp.Substring(0, index); } isInclude = query.MinerIp.Equals(minerIp); } } } if (isInclude && isFilterByMinerName) { isInclude = (!string.IsNullOrEmpty(item.MinerName) && item.MinerName.IndexOf(query.MinerName, StringComparison.OrdinalIgnoreCase) != -1) || (!string.IsNullOrEmpty(item.WorkerName) && item.WorkerName.IndexOf(query.MinerName, StringComparison.OrdinalIgnoreCase) != -1); } if (isInclude && isFilterByVersion) { isInclude = !string.IsNullOrEmpty(item.Version) && item.Version.Contains(query.Version); } if (isInclude) { if (isFilterByWork) { isInclude = item.WorkId == query.WorkId.Value; } else { if (isInclude && isFilterByCoin) { isInclude = query.Coin.Equals(item.MainCoinCode) || query.Coin.Equals(item.DualCoinCode); } if (isInclude && isFilterByPool) { isInclude = query.Pool.Equals(item.MainCoinPool) || query.Pool.Equals(item.DualCoinPool); } if (isInclude && isFilterByWallet) { isInclude = query.Wallet.Equals(item.MainCoinWallet) || query.Wallet.Equals(item.DualCoinWallet); } if (isInclude && isFilterByKernel) { isInclude = !string.IsNullOrEmpty(item.Kernel) && item.Kernel.IgnoreCaseContains(query.Kernel); } } } if (isInclude && isFilterByGpuType) { isInclude = item.GpuType == query.GpuType; } if (isInclude && isFilterByGpuName) { isInclude = !string.IsNullOrEmpty(item.GpuInfo) && item.GpuInfo.IgnoreCaseContains(query.GpuName); } if (isInclude && isFilterByGpuDriver) { isInclude = !string.IsNullOrEmpty(item.GpuDriver) && item.GpuDriver.IgnoreCaseContains(query.GpuDriver); } if (isInclude) { list.Add(item); } } total = list.Count(); list.Sort(new ClientDataComparer(query.SortDirection, query.SortField)); coinSnapshots = VirtualRoot.CreateCoinSnapshots(_isPull, DateTime.Now, data, out onlineCount, out miningCount).ToArray(); var results = list.Take(query).ToList(); DateTime time = DateTime.Now.AddSeconds(_isPull ? -20 : -180); // 一定时间未上报算力视为0算力 foreach (var clientData in results) { if (clientData.MinerActiveOn < time) { clientData.DualCoinSpeed = 0; clientData.MainCoinSpeed = 0; } } stopwatch.Stop(); _queryClientsMilliseconds.Enqueue(stopwatch.ElapsedMilliseconds); while (_queryClientsMilliseconds.Count > 100) { _queryClientsMilliseconds.Dequeue(); } return(results); }
public List <ClientData> QueryClients( IUser user, QueryClientsRequest query, out int total, out List <CoinSnapshotData> coinSnapshots, out int onlineCount, out int miningCount) { coinSnapshots = new List <CoinSnapshotData>(); onlineCount = 0; miningCount = 0; if (!IsReadied) { total = 0; return(new List <ClientData>()); } List <ClientData> list = new List <ClientData>(); var data = _dicByObjectId.Values.ToArray(); bool isFilterByUser = user != null && !string.IsNullOrEmpty(user.LoginName) && !user.IsAdmin(); bool isFilterByGroup = query.GroupId.HasValue && query.GroupId.Value != Guid.Empty; bool isFilterByMinerIp = !string.IsNullOrEmpty(query.MinerIp); bool isFilterByMinerName = !string.IsNullOrEmpty(query.MinerName); bool isFilterByVersion = !string.IsNullOrEmpty(query.Version); bool isFilterByWork = query.WorkId.HasValue && query.WorkId.Value != Guid.Empty; bool isFilterByCoin = !isFilterByWork && !string.IsNullOrEmpty(query.Coin); bool isFilterByPool = !isFilterByWork && !string.IsNullOrEmpty(query.Pool); bool isFilterByWallet = !isFilterByWork && !string.IsNullOrEmpty(query.Wallet); bool isFilterByKernel = !isFilterByWork && !string.IsNullOrEmpty(query.Kernel); bool isFilterByGpuType = query.GpuType != GpuType.Empty; bool isFilterByGpuName = !string.IsNullOrEmpty(query.GpuName); bool isFilterByGpuDriver = !string.IsNullOrEmpty(query.GpuDriver); for (int i = 0; i < data.Length; i++) { var item = data[i]; bool isInclude = true; if (isInclude && isFilterByUser) { isInclude = user.LoginName.Equals(item.LoginName); } if (isInclude && isFilterByGroup) { isInclude = item.GroupId == query.GroupId.Value; } if (isInclude) { switch (query.MineState) { case MineStatus.All: break; case MineStatus.Mining: isInclude = item.IsMining == true; break; case MineStatus.UnMining: isInclude = item.IsMining == false; break; default: break; } } if (isInclude && isFilterByMinerIp) { isInclude = query.MinerIp.Equals(item.MinerIp) || (!string.IsNullOrEmpty(item.LocalIp) && item.LocalIp.Contains(query.MinerIp)); } if (isInclude && isFilterByMinerName) { isInclude = (!string.IsNullOrEmpty(item.MinerName) && item.MinerName.IndexOf(query.MinerName, StringComparison.OrdinalIgnoreCase) != -1) || (!string.IsNullOrEmpty(item.WorkerName) && item.WorkerName.IndexOf(query.MinerName, StringComparison.OrdinalIgnoreCase) != -1); } if (isInclude && isFilterByVersion) { isInclude = !string.IsNullOrEmpty(item.Version) && item.Version.Contains(query.Version); } if (isInclude) { if (isFilterByWork) { isInclude = item.WorkId == query.WorkId.Value; } else { if (isInclude && isFilterByCoin) { isInclude = query.Coin.Equals(item.MainCoinCode) || query.Coin.Equals(item.DualCoinCode); } if (isInclude && isFilterByPool) { isInclude = query.Pool.Equals(item.MainCoinPool) || query.Pool.Equals(item.DualCoinPool); } if (isInclude && isFilterByWallet) { isInclude = query.Wallet.Equals(item.MainCoinWallet) || query.Wallet.Equals(item.DualCoinWallet); } if (isInclude && isFilterByKernel) { isInclude = !string.IsNullOrEmpty(item.Kernel) && item.Kernel.IgnoreCaseContains(query.Kernel); } } } if (isInclude && isFilterByGpuType) { isInclude = item.GpuType == query.GpuType; } if (isInclude && isFilterByGpuName) { isInclude = !string.IsNullOrEmpty(item.GpuInfo) && item.GpuInfo.IgnoreCaseContains(query.GpuName); } if (isInclude && isFilterByGpuDriver) { isInclude = !string.IsNullOrEmpty(item.GpuDriver) && item.GpuDriver.IgnoreCaseContains(query.GpuDriver); } if (isInclude) { list.Add(item); } } total = list.Count(); list.Sort(new ClientDataComparer(query.SortDirection, query.SortField)); ClientData[] items = (user == null || user.IsAdmin()) ? data : data.Where(a => a.LoginName == user.LoginName).ToArray(); coinSnapshots = VirtualRoot.CreateCoinSnapshots(_isPull, DateTime.Now, items, out onlineCount, out miningCount).ToList(); var results = list.Take(query).ToList(); DateTime time = DateTime.Now.AddSeconds(_isPull ? -20 : -180); // 一定时间未上报算力视为0算力 foreach (var clientData in results) { if (clientData.MinerActiveOn < time) { clientData.DualCoinSpeed = 0; clientData.MainCoinSpeed = 0; } } return(results); }
public List <ClientData> QueryClients( IUser user, QueryClientsRequest query, out int total, out List <CoinSnapshotData> coinSnapshots, out int onlineCount, out int miningCount) { coinSnapshots = new List <CoinSnapshotData>(); onlineCount = 0; miningCount = 0; if (!IsReadied) { total = 0; return(new List <ClientData>()); } List <ClientData> list = new List <ClientData>(); var data = _dicByObjectId.Values.ToArray(); bool isFilterByUser = user != null && !string.IsNullOrEmpty(user.LoginName) && !user.IsAdmin(); bool isFilterByGroup = query.GroupId.HasValue && query.GroupId.Value != Guid.Empty; bool isFilterByMinerIp = !string.IsNullOrEmpty(query.MinerIp); bool isFilterByMinerName = !string.IsNullOrEmpty(query.MinerName); bool isFilterByVersion = !string.IsNullOrEmpty(query.Version); bool isFilterByWork = query.WorkId.HasValue && query.WorkId.Value != Guid.Empty; bool isFilterByCoin = !isFilterByWork && !string.IsNullOrEmpty(query.Coin); bool isFilterByPool = !isFilterByWork && !string.IsNullOrEmpty(query.Pool); bool isFilterByWallet = !isFilterByWork && !string.IsNullOrEmpty(query.Wallet); bool isFilterByKernel = !isFilterByWork && !string.IsNullOrEmpty(query.Kernel); bool isFilterByGpuType = query.GpuType != GpuType.Empty; bool isFilterByGpuName = !string.IsNullOrEmpty(query.GpuName); bool isFilterByGpuDriver = !string.IsNullOrEmpty(query.GpuDriver); for (int i = 0; i < data.Length; i++) { var item = data[i]; bool isInclude = true; if (isInclude && isFilterByUser) { isInclude = user.LoginName.Equals(item.LoginName); } if (isInclude && isFilterByGroup) { isInclude = item.GroupId == query.GroupId.Value; } if (isInclude) { switch (query.MineState) { case MineStatus.All: break; case MineStatus.Mining: isInclude = item.IsMining == true; break; case MineStatus.UnMining: isInclude = item.IsMining == false; break; default: break; } } if (isInclude && isFilterByMinerIp) { isInclude = query.MinerIp.Equals(item.MinerIp) || (!string.IsNullOrEmpty(item.LocalIp) && item.LocalIp.Contains(query.MinerIp)); } if (isInclude && isFilterByMinerName) { isInclude = (!string.IsNullOrEmpty(item.MinerName) && item.MinerName.IndexOf(query.MinerName, StringComparison.OrdinalIgnoreCase) != -1) || (!string.IsNullOrEmpty(item.WorkerName) && item.WorkerName.IndexOf(query.MinerName, StringComparison.OrdinalIgnoreCase) != -1); } if (isInclude && isFilterByVersion) { isInclude = !string.IsNullOrEmpty(item.Version) && item.Version.Contains(query.Version); } if (isInclude) { if (isFilterByWork) { isInclude = item.WorkId == query.WorkId.Value; } else { if (isInclude && isFilterByCoin) { isInclude = query.Coin.Equals(item.MainCoinCode) || query.Coin.Equals(item.DualCoinCode); } if (isInclude && isFilterByPool) { isInclude = query.Pool.Equals(item.MainCoinPool) || query.Pool.Equals(item.DualCoinPool); } if (isInclude && isFilterByWallet) { isInclude = query.Wallet.Equals(item.MainCoinWallet) || query.Wallet.Equals(item.DualCoinWallet); } if (isInclude && isFilterByKernel) { isInclude = !string.IsNullOrEmpty(item.Kernel) && item.Kernel.IgnoreCaseContains(query.Kernel); } } } if (isInclude && isFilterByGpuType) { isInclude = item.GpuType == query.GpuType; } if (isInclude && isFilterByGpuName) { isInclude = !string.IsNullOrEmpty(item.GpuInfo) && item.GpuInfo.IgnoreCaseContains(query.GpuName); } if (isInclude && isFilterByGpuDriver) { isInclude = !string.IsNullOrEmpty(item.GpuDriver) && item.GpuDriver.IgnoreCaseContains(query.GpuDriver); } if (isInclude) { list.Add(item); } } total = list.Count(); switch (query.SortDirection) { case SortDirection.Ascending: list = list.OrderBy(a => a.MinerName).ToList(); break; case SortDirection.Descending: list = list.OrderByDescending(a => a.MinerName).ToList(); break; default: break; } coinSnapshots = VirtualRoot.CreateCoinSnapshots(_isPull, DateTime.Now, list, out onlineCount, out miningCount).ToList(); var results = list.Skip((query.PageIndex - 1) * query.PageSize).Take(query.PageSize).ToList(); DoCheckIsOnline(results); return(results); }
public void QueryClientsAsync(QueryClientsRequest query, Action <QueryClientsResponse, Exception> callback) { RpcRoot.OfficialServer.ClientDataService.QueryClientsAsync(query, callback); }