Quellcode durchsuchen

代币系统,测试代码

jeson_fxd vor 1 Tag
Ursprung
Commit
bcf850114a

+ 17 - 0
server/src/server/OpenCards.Server.Core/RPC/Center.cs

@@ -655,5 +655,22 @@ namespace OpenCards.Server.Core.RPC
         public long c2l_nextAdjustTime;
     }
 
+    [ProtocolRoute("LogicService", "CenterService")]
+    public class GetTokenExchangeTestPriceRequest : Request
+    {
+        /// <summary>
+        /// Logic 带上serverID,Center校验req  == this.serverID
+        /// </summary>
+        public string l2c_serverID;
+    }
+    [ProtocolRoute("CenterService", "LogicService")]
+    public class GetTokenExchangeTestPriceResponse : Response
+    {
+        public const int CODE_SERVER_MISMATCH = Response.CODE_ERROR + 1;
+
+        public float c2l_unitPrice;
+
+        public long c2l_nextAdjustTime;
+    }
     #endregion
 }

+ 34 - 3
server/src/server/OpenCards.Server.Logic/Module/TokenExchange/TokenExchangeModule.cs

@@ -12,6 +12,7 @@ using OpenCards.Server.Core.RPC;
 using OpenCards.Server.Core.Utils;
 using System;
 using System.Collections.Generic;
+using System.Security.Cryptography;
 using System.Text;
 using System.Threading.Tasks;
 
@@ -108,6 +109,7 @@ namespace OpenCards.Server.Logic.Module.TokenExchange
             RegisterMessageHandler<LogicService.MsgClientTokenExchangeSellRequest>(HandleTokenExchangeSellReq);
             RegisterMessageHandler<LogicService.MsgClientTokenExchangeLogRequest>(HandleTokenExchangeLogReq);
             roleMapping = new TokenExchangeRoleDataMapping(PersistenceConstants.TYPE_TOKEN_EXCHANGE_ROLE, service.roleID, service);
+            RegistryEventHandler(EventDefines.EventHandleCmd, OnEventHandleCmd);
         }
 
         private int HandleTokenExchangeLogReq(int c2s_tradeType, ref List<TokenExchangeLogEntry> s2c_buyLogs, ref List<TokenExchangeLogEntry> s2c_sellLogs)
@@ -315,9 +317,9 @@ namespace OpenCards.Server.Logic.Module.TokenExchange
 
             rsp.s2c_code = Response.CODE_OK;
             rsp.s2c_snapshot = BuildSnapshot(
-                reportRsp.c2l_unitPrice > 0 ? reportRsp.c2l_unitPrice:unitPrice,
-                reportRsp.c2l_nextAdjustTime > 0 ? reportRsp.c2l_nextAdjustTime:globalRsp.c2l_nextAdjustTime
-                ) ;
+                reportRsp.c2l_unitPrice > 0 ? reportRsp.c2l_unitPrice : unitPrice,
+                reportRsp.c2l_nextAdjustTime > 0 ? reportRsp.c2l_nextAdjustTime : globalRsp.c2l_nextAdjustTime
+                );
             return rsp;
         }
 
@@ -507,5 +509,34 @@ namespace OpenCards.Server.Logic.Module.TokenExchange
             };
         }
 
+        private void OnEventHandleCmd(List<string> cmd, Ref<int> ret, Ref<string> retmsg)
+        {
+            if (cmd[0] == "tokenExchangePrice")
+            {
+                BatchTest(cmd);
+                return;
+            }
+        }
+
+        private async Task BatchTest(List<string> cmd)
+        {
+            if (roleMapping.Data == null)
+            {
+                return;
+            }
+
+            var globalRsp = await FetchGlobalAsync();
+            if (!Response.CheckSuccess(globalRsp))
+                return;
+
+            if (mCenterService == null)
+                mCenterService = await RpcUtils.GetCenterService(service.Provider, service.serverID);
+
+            await mCenterService.CallAsync<GetTokenExchangeTestPriceResponse>(new GetTokenExchangeTestPriceRequest()
+            {
+                l2c_serverID = service.serverID,
+            });
+
+        }
     }
 }

+ 17 - 0
server/src/server/OpenCards.Service.Center/Model/TokenExchangeHandler.cs

@@ -147,6 +147,23 @@ namespace OpenCards.Service.Center
             }
         }
 
+        [RpcHandler(typeof(GetTokenExchangeTestPriceRequest), typeof(GetTokenExchangeTestPriceResponse))]
+        public Task<GetTokenExchangeTestPriceResponse> rpc_Handle(GetTokenExchangeTestPriceRequest req)
+        {
+            var rsp = new GetTokenExchangeTestPriceResponse();
+            var global = _tokenExchangeGlobalMapping?.Data;
+            if (global == null)
+                return Task.FromResult(rsp);
+
+            float newPrice = CalcAdjustedUnitPrice(global.UnitPrice, global.PeriodBuyCount, global.PeriodSellCount);
+
+            global.UnitPrice = newPrice;
+            global.PeriodBuyCount = 0;
+            global.PeriodSellCount = 0;
+
+            return Task.FromResult(rsp);
+        }
+
         private bool ValidateServerId(string reqServerId)
         {
             return string.IsNullOrEmpty(reqServerId) || reqServerId == this.serverID;