Esempio n. 1
0
        static void Main(string[] args)
        {
            FRPCEasyClient client    = new FRPCEasyClient("127.0.0.1", 2012, null, 1500, 0);
            AOPContainer   Container = new AOPContainer();

            client.AddProvideServices <IMessage, Message>();

            string ll = Console.ReadLine();

            while ("q" != ll)
            {
                Container.GetServices <IMessage>(client).ShowMessage("Hello ");

                ll = Console.ReadLine();
            }
            Console.WriteLine("Over");
        }
Esempio n. 2
0
 /// <summary>
 /// 获取远程类
 /// </summary>
 /// <typeparam name="T">对象</typeparam>
 /// <param name="session">需要通讯的对象</param>
 /// <param name="RRPCSessionID">指定由谁来进行调用而不是随机</param>
 /// <returns></returns>
 public T GetServices <T>(FRPCEasyClient session, Guid?RRPCSessionID = null) where T : class
 {
     return(generator.CreateInterfaceProxyWithoutTarget <T>(new AOPRPCInterceptor((invcation) => {
         return ImplementFunc(invcation, session, RRPCSessionID);
     })));
 }
Esempio n. 3
0
 /// <summary>
 /// 获取远程类
 /// </summary>
 /// <param name="session">需要通讯的对象</param>
 /// <param name="serverType">需要实例化的类型</param>
 ///  <param name="RRPCSessionID">指定的Session完成任务而不是随机,若服务器有指定则会有限服务器指定的对象</param>
 /// <returns></returns>
 public object GetServices(FRPCEasyClient session, Type serverType, Guid?RRPCSessionID = null)
 {
     return(generator.CreateInterfaceProxyWithoutTarget(serverType, new AOPRPCInterceptor((invocation) => {
         return ImplementFunc(invocation, session, RRPCSessionID);
     })));
 }
        /// <summary>
        ///
        /// </summary>
        /// <param name="commandExecutionRPClist"></param>
        /// <param name="aOPContainer"></param>
        /// <param name="client"></param>
        /// <returns></returns>
        public int Run(List <Type> commandExecutionRPClist, AOPContainer aOPContainer, FRPCEasyClient client)
        {
            try
            {
                MethodInfo objMethod;
                var        objType = commandExecutionRPClist.FirstOrDefault(d => d.FullName.Equals(Fullname));
                if (objType == null)
                {
                    Console.WriteLine($"没有找到{Fullname}的类型");
                    return(1);
                }


                objMethod = objType.GetMethods().FirstOrDefault(d => d.Name.Equals(Name));
                if (objMethod == null)
                {
                    Console.WriteLine($"没有找到{Name}函数");
                    return(1);
                }

                var paras = objMethod.GetParameters();
                if (Para.Count() != paras.Count())
                {
                    Console.WriteLine($"参数数量不对 应为{paras.Count()}");
                    return(1);
                }
                List <object> paraList = new List <object>();

                var paraToList = Para.ToList();
                try
                {
                    for (int i = 0; i < paraToList.Count(); i++)
                    {
                        paraList.Add(JsonConvert.DeserializeObject(paraToList[i], paras[i].ParameterType));
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine("格式化参数失败" + e.Message);
                }

                var obj = aOPContainer.GetServices(client, objType, RRPCSessionID);

                var result = objMethod.Invoke(obj, paraList.ToArray());

                Console.WriteLine("调用完成:" + JsonConvert.SerializeObject(result));
                return(0);
            }
            catch (Exception e)
            {
                Console.WriteLine("IMP ERRER" + e.Message);
                return(0);
            }
        }
Esempio n. 5
0
        /// <summary>
        /// 任务对象
        /// </summary>
        /// <param name="id">任务ID</param>
        /// <param name="taskInfo">传输对象</param>
        /// <param name="state">状态</param>
        /// <param name="expirationTime">超时时间</param>
        /// <param name="socket">连接对象</param>
        public RemoteCallEntrity(Guid id, RequestExecutiveInformation taskInfo, ReceiveMessageState state, DateTime expirationTime, FRPCEasyClient socket)
        {
            this.ID             = id;
            this.TaskInfo       = taskInfo;
            this.State          = state;
            this.ExpirationTime = expirationTime;
            this.ClientSocket   = socket;

            WaitHandle = new AutoResetEvent(false);
        }
Esempio n. 6
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="commandExecutionRPC"></param>
        /// <param name="client"></param>
        /// <returns></returns>
        public int Run(List <Type> commandExecutionRPC, FRPCEasyClient client)
        {
            DataTable table = new DataTable();

            switch (Name)
            {
            case "Task":
                table.Columns.Add("Key");
                table.Columns.Add("State");
                table.Columns.Add("ExpirationTime");
                table.Columns.Add("RetryCount");
                table.Columns.Add("ReturnValue");
                var list = client.RemoteCallQueue.MethodCallQueues.Select(d => d.Value).ToList();
                if (!string.IsNullOrWhiteSpace(OrderName))
                {
                    list = OrderBy <RemoteCallEntrity>(list.AsQueryable(), OrderName, OrderDesc).ToList();
                }
                foreach (var item in list)
                {
                    table.Rows.Add(item.ID, item.State, item.ExpirationTime, item.RetryCount, item.ReturnValue);
                }
                PrintTable(table);
                break;

            case "RPCServer":
                table.Columns.Add("FullName");
                table.Columns.Add("Method");
                table.Columns.Add("Para(Count)");

                foreach (var item in commandExecutionRPC)
                {
                    foreach (var method in item.GetMethods())
                    {
                        table.Rows.Add(item.FullName, method.Name, string.Join(",", method.GetParameters().Select(d => d.ParameterType.Name)) + $"({method.GetParameters().Count()})");
                    }
                }
                PrintTable(table);
                break;

            case "Log":
                table.Columns.Add("LoggerType");
                table.Columns.Add("Time");
                table.Columns.Add("Message");
                var logList = LoggerAssembly.LoggerList.AsQueryable();
                if (!string.IsNullOrWhiteSpace(OrderName))
                {
                    logList = OrderBy <LoggerInfo>(logList, OrderName, OrderDesc);
                }
                foreach (var item in logList)
                {
                    table.Rows.Add(item.LoggerType, item.Time, item.Message);
                }
                PrintTable(table);
                break;

            default:
                Console.WriteLine("name 参数错误 因为Task 任务列表\tRPCServer 远程执行函数列表");
                return(1);
            }
            Console.WriteLine("数量:" + table.Rows.Count);
            return(0);
        }