Browse Source

Merge branch 'master' of http://git.ius.plus/Project-Wing/WingCloudServer

Jeremy 2 years ago
parent
commit
8315e4b671

+ 5 - 1
src/InteractionCenter/InteractionCenterService.cs

@@ -6,6 +6,10 @@ namespace WingCloudServer.InteractionCenter
     public class InteractionCenterService : JsonRpcService
     {
         protected IOpLogDBService OpLogDBService;
-        
+
+        protected ILiveRoomDBService _LiveRoomDBService;
+
+
     }
+    
 }

+ 48 - 12
src/InteractionCenter/MasterInteractionCenterService.cs

@@ -4,37 +4,42 @@ using WingInterfaceLibrary.OpLog;
 using System.Threading.Tasks;
 using System.Collections.Generic;
 using WingInterfaceLibrary.Interface.DBInterface;
+using Newtonsoft.Json;
+using WingInterfaceLibrary.DB.Request;
+using System.Linq;
+using WingServerCommon.Config;
 
 namespace WingCloudServer.InteractionCenter
 {
     public class MasterInteractionCenterService : InteractionCenterService, IMasterInteractionCenterService
-    {        
+    {
         public override void Load(JsonRpcClientPool jsonRpcClientPool)
         {
             base.Load(jsonRpcClientPool);
-            OpLogDBService = GetProxy<IOpLogDBService>();                        
+            OpLogDBService = GetProxy<IOpLogDBService>();
+            _LiveRoomDBService = GetProxy<ILiveRoomDBService>();
         }
 
-        
+
         /// <summary>
         /// Get op logs from master server
         /// </summary>
         /// <param name="request"></param>
         /// <returns>The op log list</returns>
         public async Task<List<OperationLogDTO>> GetOpLogsFromMasterAsync(GetOpLogsFormMasterRequest request)
-        {            
+        {
             return await OpLogDBService.GetOpLogAsync(request);
         }
-        
+
         /// <summary>
         /// Get op logs from master server
         /// </summary>
         /// <param name="request"></param>
         /// <returns>The op log list</returns>
-        public async Task<List<OperationLogDTO>> GetOpLogsByCodeFromMasterAsync(GetOpLogsByCodeFormMasterRequest request)
-        {            
-            return await OpLogDBService.GetOpLogsByCodeAsync(request);
-        }     
+        public async Task<List<OperationLogDTO>> GetOpLogsByCodesFromMasterAsync(GetOpLogsByCodesFormMasterRequest request)
+        {
+            return await OpLogDBService.GetOpLogsByCodesAsync(request);
+        }
 
         /// <summary>
         /// Synchronize op log to master server
@@ -42,13 +47,44 @@ namespace WingCloudServer.InteractionCenter
         /// <param name="request"></param>
         /// <returns></returns>
         public async Task<bool> SyncOpLogToMasterAsync(SyncOpLogToMasterRequest request)
-        {            
+        {
             return await OpLogDBService.SyncOpLogAsync(request);
-        }           
+        }
+
+        /// <summary>
+        /// 实时同步业务数据到主服务器
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        public async Task<bool> SyncReceiveSlaveServiceDataAsync(SyncReceiveServiceDataRequest request)
+        {
+            var localServerUrl = ConfigurationManager.Host;
+            var baseLiveConsultation = JsonConvert.DeserializeObject<BaseLiveConsultationJson>(request.ServiceDataJson);
+            // 调用manager
+
+            // 判断是否存在其他服务器的用户
+            var getLiveRoomByCodeDBRequest = new GetLiveRoomByCodeDBRequest();
+            getLiveRoomByCodeDBRequest.LiveRoomCode = baseLiveConsultation.RoomCode;
+            var roomDTO = await _LiveRoomDBService.GetLiveRoomByCodeAsync(getLiveRoomByCodeDBRequest);
+            var users = roomDTO.UserInfos;
+            //操作人所在服务器
+            var operatorUser = users.FirstOrDefault(x => x.Code == baseLiveConsultation.OperatorCode);
+            //连接其他副服务器的用户
+            var usersConnectOtherSlave = users.Where(x => x.LoginServerHost != operatorUser.LoginServerHost && x.LoginServerHost != localServerUrl);
+            if (usersConnectOtherSlave != null && usersConnectOtherSlave.Count() > 0)
+            {
+                // 获取oplogs
+                var getOpLogsByCodesFormMasterRequest = new GetOpLogsByCodesFormMasterRequest();
+                getOpLogsByCodesFormMasterRequest.Codes = new List<string> { baseLiveConsultation.ConsultationRecordCode, baseLiveConsultation.RoomCode };
+                var oplogs = await OpLogDBService.GetOpLogsByCodesAsync(getOpLogsByCodesFormMasterRequest);
+                //_masterInteractionCenterService.SyncReceiveSlaveServiceDataAsync();
+            }
+            return true;
+        }
     }
 
     public class SlaveInteractionCenterService : InteractionCenterService, ISlaveInteractionCenterService
     {
-                  
+
     }
 }

+ 2 - 2
src/Plugin/TokenVerifyPluginService.cs

@@ -74,7 +74,7 @@ namespace WingCloudServer.Plugin
             "IWingRtcService/GetRoomIdAsync",
             "IWingRtcService/GenerateRoomUrlAsync",
             "IWingRtcService/GetRtcSettingAsync",
-            "IWingRtcService/GetUserSignAsync"
+            "IWingRtcService/GetUserSignAsync",
         };
 
         public PluginProcessResult PreProcess(IJsonRpcHttpContext context, byte[] requestData)
@@ -82,7 +82,7 @@ namespace WingCloudServer.Plugin
             var dataLength = (int)context.GetRequestContentLength();
             var requests = JsonRpcCodec.DecodeRequestsAsync(requestData, new System.Threading.CancellationToken(), dataLength).Result;
             var apiName = $"{context.GetRequestPath().Trim('/')}/{requests[0].Method.Trim('/')}";
-            if (context.GetRequestPath() != "/IAuthenticationService" && context.GetRequestPath() != "/IMasterInteractionCenterService" && !NotValidationRequiredList.Contains(apiName))
+            if (context.GetRequestPath() != "/IAuthenticationService" && context.GetRequestPath() != "/IMasterInteractionCenterService" && !NotValidationRequiredList.Contains(apiName) && !context.GetRequestPath().Contains("ICSScriptTest"))
             {
                 var tokenRequest = new ValidateTokenRequest();
                 try

+ 1 - 0
src/WingCloudServer.csproj

@@ -6,6 +6,7 @@
   </PropertyGroup>
 
   <ItemGroup>    
+    <PackageReference Include="CS-Script.Core" Version="2.0.0" />    
     <PackageReference Include="Microsoft.Extensions.FileProviders.Physical" Version="5.0.0" />
     <PackageReference Include="WingInterfaceLibrary" Version="1.1.1.1" />
     <PackageReference Include="WingServerCommon" Version="1.1.1.1" />

+ 100 - 39
src/WingServer.cs

@@ -21,6 +21,8 @@ using WingInterfaceLibrary.Request.Authentication;
 using JsonRpcLite.Services;
 using WingInterfaceLibrary.Enum;
 using WingCloudServer.Plugin;
+using System.Reflection;
+using CSScriptLib;
 
 namespace WingCloudServer
 {
@@ -114,6 +116,7 @@ namespace WingCloudServer
                 }
             }
 
+            //TestCSScript(rpcClientPool);
 
             //Rpc http service load and register to rpc http server
             if (ConfigurationManager.IsDistributed)
@@ -197,6 +200,64 @@ namespace WingCloudServer
 
         }
 
+        public void TestCSScript(JsonRpcClientPool rpcClientPool)
+        {
+            //接口
+                    var eval = CSScript.Evaluator.ReferenceDomainAssemblies(DomainAssemblies.AllStaticNonGAC);
+                    var host = ConfigurationManager.Host.Replace("http:", "").Replace(".", "").Replace("/", "");
+                    var str = @"
+                    using System;
+                    using System.Threading.Tasks;
+                    using System;
+                    using WingServerCommon.Service;
+                    using WingInterfaceLibrary.OpLog;
+                    using System.Threading.Tasks;
+                    using System.Collections.Generic;
+                    using JsonRpcLite.Rpc;
+                    using WingInterfaceLibrary.Interface.DBInterface;
+                    using WingInterfaceLibrary.DB.Request;
+                                     
+                    public interface ICSScriptTest"+host+@"
+                    {
+                        Task<bool> CSScriptTestAsync();
+                    }
+                    public class CSScriptTestService : JsonRpcService,ICSScriptTest"+host+@"
+                    {
+                        protected IOpLogDBService OpLogDBService;
+                        protected IDeviceInfoDBService deviceInfoDBService;
+                        public override void Load(JsonRpcClientPool jsonRpcClientPool)
+                        {
+                            base.Load(jsonRpcClientPool);
+                            OpLogDBService = GetProxy<IOpLogDBService>();
+                            deviceInfoDBService = GetProxy<IDeviceInfoDBService>();
+                        }
+                            public async Task<bool> CSScriptTestAsync()
+                        {
+                            var res = deviceInfoDBService.FindDictionaryItemsAsync(new FindDictionaryItemsDBRequest()).Result;
+                            Console.WriteLine(""flytest""+res.Count);
+                            return true;
+                        }
+                    }
+                    public class Test
+                    {
+                        public void Test1(JsonRpcClientPool rpcClientPool,JsonRpcServer _rpcHttpServer){
+                            var csScriptTestService = new CSScriptTestService();
+                            _rpcHttpServer.RegisterService(typeof(ICSScriptTest"+host+@"), csScriptTestService);
+                            csScriptTestService.Load(rpcClientPool);
+                        }
+                    }
+                    ";
+
+                    Assembly compilecode = eval.CompileCode(str);
+
+
+
+                    var ps = compilecode.GetType("css_root+Test");
+                    var obj = compilecode.CreateInstance("css_root+Test");
+                    var mes = ps.GetMethod("Test1");
+                    mes.Invoke(obj, new object[] { rpcClientPool, _rpcHttpServer });
+        }
+
         void LoadDataAfterRegister()
         {
             foreach (var service in _rpcServices)
@@ -281,49 +342,49 @@ namespace WingCloudServer
             return resList;
         }
 
-    /// <summary>
-    /// 初始化AIDiagnosis
-    /// </summary>
-    private void InitAIDiagnosis()
-    {
-        try
-        {
-            var dllsRootPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "AIDiagnosis");
-            var destFolder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Dependencies");
-            CopyFilesAndDirs(dllsRootPath, destFolder);
-        }
-        catch (Exception ex)
+        /// <summary>
+        /// 初始化AIDiagnosis
+        /// </summary>
+        private void InitAIDiagnosis()
         {
-            Logger.WriteLineError($"InitAIDiagnosis error:{ex}");
+            try
+            {
+                var dllsRootPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "AIDiagnosis");
+                var destFolder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Dependencies");
+                CopyFilesAndDirs(dllsRootPath, destFolder);
+            }
+            catch (Exception ex)
+            {
+                Logger.WriteLineError($"InitAIDiagnosis error:{ex}");
+            }
         }
-    }
 
-    private void CopyFilesAndDirs(string sourceDir, string destDir)
-    {
-        if (!Directory.Exists(sourceDir))
-        {
-            return;
-        }
-        if (!Directory.Exists(destDir))
-        {
-            Directory.CreateDirectory(destDir);
-        }
-        string newPath;
-        FileInfo fileInfo;
-        string[] files = Directory.GetFiles(sourceDir);
-        foreach (string path in files)
+        private void CopyFilesAndDirs(string sourceDir, string destDir)
         {
-            fileInfo = new FileInfo(path);
-            newPath = destDir + "\\" + fileInfo.Name;
-            File.Copy(path, newPath, true);
-        }
-        string[] dirs = Directory.GetDirectories(sourceDir);
-        foreach (string path in dirs)
-        {
-            DirectoryInfo directory = new DirectoryInfo(path);
-            string newDir = destDir + "\\" + directory.Name;
-            CopyFilesAndDirs(path + "\\", newDir + "\\");
+            if (!Directory.Exists(sourceDir))
+            {
+                return;
+            }
+            if (!Directory.Exists(destDir))
+            {
+                Directory.CreateDirectory(destDir);
+            }
+            string newPath;
+            FileInfo fileInfo;
+            string[] files = Directory.GetFiles(sourceDir);
+            foreach (string path in files)
+            {
+                fileInfo = new FileInfo(path);
+                newPath = destDir + "\\" + fileInfo.Name;
+                File.Copy(path, newPath, true);
+            }
+            string[] dirs = Directory.GetDirectories(sourceDir);
+            foreach (string path in dirs)
+            {
+                DirectoryInfo directory = new DirectoryInfo(path);
+                string newDir = destDir + "\\" + directory.Name;
+                CopyFilesAndDirs(path + "\\", newDir + "\\");
+            }
         }
     }
-}
 }