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"); }
/// <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); }))); }
/// <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); } }
/// <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); }
/// <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); }