Exemplo n.º 1
0
 public ReportResponse ReportSpeed([FromBody] SpeedData speedData)
 {
     try {
         if (speedData == null)
         {
             return(ResponseBase.InvalidInput <ReportResponse>());
         }
         ClientData clientData = HostRoot.Instance.ClientSet.GetByClientId(speedData.ClientId);
         if (clientData == null)
         {
             clientData = ClientData.Create(speedData, ClientIp);
             HostRoot.Instance.ClientSet.Add(clientData);
         }
         else
         {
             clientData.Update(speedData, ClientIp);
         }
         if (Version.TryParse(speedData.Version, out Version version))
         {
             string jsonVersionKey = EntryAssemblyInfo.GetServerJsonVersion(version);
             var    response       = ReportResponse.Ok(HostRoot.GetServerState(jsonVersionKey));
             if (speedData.LocalServerMessageTimestamp.AddSeconds(1) < HostRoot.Instance.ServerMessageTimestamp)
             {
                 var list = HostRoot.Instance.ServerMessageSet.GetServerMessages(speedData.LocalServerMessageTimestamp);
                 if (list.Count < 10)
                 {
                     response.NewServerMessages.AddRange(list);
                 }
             }
             return(response);
         }
     }
     catch (Exception e) {
         Logger.ErrorDebugLine(e);
     }
     return(ResponseBase.InvalidInput <ReportResponse>());
 }
Exemplo n.º 2
0
        public ReportResponse ReportSpeed([FromBody] SpeedData speedData)
        {
            ReportResponse response;

            try {
                if (speedData == null)
                {
                    response             = ResponseBase.InvalidInput <ReportResponse>();
                    response.ServerState = ServerState.Empty;
                    return(response);
                }
                ClientData clientData = HostRoot.Instance.ClientSet.GetByClientId(speedData.ClientId);
                if (clientData == null)
                {
                    clientData = ClientData.Create(speedData, ClientIp);
                    HostRoot.Instance.ClientSet.Add(clientData);
                }
                else
                {
                    clientData.Update(speedData, ClientIp);
                }
                if (Version.TryParse(speedData.Version, out Version version))
                {
                    string jsonVersionKey = MainAssemblyInfo.GetServerJsonVersion(version);
                    response             = ResponseBase.Ok <ReportResponse>();
                    response.ServerState = HostRoot.GetServerState(jsonVersionKey);
                    return(response);
                }
            }
            catch (Exception e) {
                Logger.ErrorDebugLine(e);
            }
            response             = ResponseBase.InvalidInput <ReportResponse>();
            response.ServerState = ServerState.Empty;
            return(response);
        }
Exemplo n.º 3
0
        public string GetJsonFileVersion(AppSettingRequest request)
        {
            ServerState serverState = HostRoot.GetServerState(request.Key);

            return($"{serverState.JsonFileVersion}|{serverState.MinerClientVersion}|{serverState.Time.ToString()}|{serverState.MessageTimestamp.ToString()}|{serverState.OutputKeywordTimestamp.ToString()}");
        }
Exemplo n.º 4
0
        /// <summary>
        ///
        /// </summary>
        private void Snapshot(DateTime now)
        {
            InitOnece();
            try {
                int onlineCount = 0;
                int miningCount = 0;
                Dictionary <string, CoinSnapshotData> dicByCoinCode = new Dictionary <string, CoinSnapshotData>();
                foreach (var clientData in _root.ClientSet.AsEnumerable())
                {
                    if (HostRoot.Instance.HostConfig.IsPull)
                    {
                        if (clientData.ModifiedOn.AddSeconds(15) < now)
                        {
                            continue;
                        }
                    }
                    else
                    {
                        if (clientData.ModifiedOn.AddSeconds(130) < now)
                        {
                            continue;
                        }
                    }

                    onlineCount++;

                    if (string.IsNullOrEmpty(clientData.MainCoinCode))
                    {
                        continue;
                    }

                    if (!dicByCoinCode.TryGetValue(clientData.MainCoinCode, out CoinSnapshotData mainCoinSnapshotData))
                    {
                        mainCoinSnapshotData = new CoinSnapshotData()
                        {
                            Timestamp = now,
                            CoinCode  = clientData.MainCoinCode
                        };
                        dicByCoinCode.Add(clientData.MainCoinCode, mainCoinSnapshotData);
                    }

                    if (clientData.IsMining)
                    {
                        miningCount++;
                        mainCoinSnapshotData.MainCoinMiningCount += 1;
                        mainCoinSnapshotData.Speed            += clientData.MainCoinSpeed;
                        mainCoinSnapshotData.ShareDelta       += clientData.GetMainCoinShareDelta(HostRoot.Instance.HostConfig.IsPull);
                        mainCoinSnapshotData.RejectShareDelta += clientData.GetMainCoinRejectShareDelta(HostRoot.Instance.HostConfig.IsPull);
                    }

                    mainCoinSnapshotData.MainCoinOnlineCount += 1;

                    if (!string.IsNullOrEmpty(clientData.DualCoinCode) && clientData.IsDualCoinEnabled)
                    {
                        if (!dicByCoinCode.TryGetValue(clientData.DualCoinCode, out CoinSnapshotData dualCoinSnapshotData))
                        {
                            dualCoinSnapshotData = new CoinSnapshotData()
                            {
                                Timestamp = now,
                                CoinCode  = clientData.DualCoinCode
                            };
                            dicByCoinCode.Add(clientData.DualCoinCode, dualCoinSnapshotData);
                        }

                        if (clientData.IsMining)
                        {
                            dualCoinSnapshotData.DualCoinMiningCount += 1;
                            dualCoinSnapshotData.Speed            += clientData.DualCoinSpeed;
                            dualCoinSnapshotData.ShareDelta       += clientData.GetDualCoinShareDelta(HostRoot.Instance.HostConfig.IsPull);
                            dualCoinSnapshotData.RejectShareDelta += clientData.GetDualCoinRejectShareDelta(HostRoot.Instance.HostConfig.IsPull);
                        }

                        dualCoinSnapshotData.DualCoinOnlineCount += 1;
                    }
                }

                HostRoot.ClientCount.Update(onlineCount, miningCount);
                if (dicByCoinCode.Count > 0)
                {
                    _dataList.AddRange(dicByCoinCode.Values);
                    using (LiteDatabase db = HostRoot.CreateReportDb()) {
                        var col = db.GetCollection <CoinSnapshotData>();
                        col.Insert(dicByCoinCode.Values);
                    }
                    Write.DevDebug("拍摄快照" + dicByCoinCode.Count + "张,快照时间戳:" + now.ToString("yyyy-MM-dd HH:mm:ss fff"));
                }
            }
            catch (Exception e) {
                Logger.ErrorDebugLine(e);
            }
        }
Exemplo n.º 5
0
 public void CloseServices()
 {
     HostRoot.Exit();
 }