private static void MyGetMaths <T>() { //传递参数 var t = typeof(T); //var t = Type.GetType(className); object obj = Activator.CreateInstance(t); try { #region 方法二 MethodInfo[] info = t.GetMethods(); for (int i = 0; i < info.Length; i++) { MsgFun mf = new MsgFun(); MethodInfo md = info[i]; //方法名 string mothodName = md.Name; Console.WriteLine($"类名:{ t.Name}, {"方法名:" + md.Name}"); //参数集合 ParameterInfo[] paramInfos = md.GetParameters(); for (int j = 0; j < paramInfos.Length; j++) { ParameterInfo parameterInfo = paramInfos[j]; MsgFun mfs = new MsgFun(); mfs.packageName = t.Namespace; mfs.FullName = t.FullName; mfs.className = t.Name; mfs.Name = md.Name; mfs.rep = md.ReturnType; mfs.req = parameterInfo.ParameterType; var objj = Activator.CreateInstance(mfs.req); Console.WriteLine($"类名:{ t.Name}, {"方法名:" + md.Name},{"入参"+j+":"+ parameterInfo.ParameterType}"); } Console.WriteLine($"类名:{ t.Name}, {"方法名:" + md.Name},{"返回值" + ":" + md. ReturnType}"); //md. //for (int j = 0; j < info.Length; j++) //{ // ParameterInfo parameterInfo = paramInfos[j]; //} //方法名相同且参数个数一样 } #endregion } catch (Exception ex) { throw ex; } Console.ReadKey(); }
public override void GetMathsInfo(Type t) { this.clear(); try { IConnection conection = factory.CreateConnection(); #region 方法二 MethodInfo[] info = t.GetMethods(); ///获取接口和类信息 this.interfaceFullName = t.FullName; for (int i = 0; i < info.Length; i++) { MsgFun mf = new MsgFun(); MethodInfo md = info[i]; //方法名 string mothodName = md.Name; Console.WriteLine($"类名:{ t.Name}, {"方法名:" + md.Name}"); //参数集合 ParameterInfo[] paramInfos = md.GetParameters(); if (md.Name.Equals("ToString") || md.Name.Equals("Equals") || md.Name.Equals("GetHashCode") || md.Name.Equals("GetType")) { continue; } RabbitMQMsgFun mfs = new RabbitMQMsgFun(); mfs.Name = md.Name; mfs.rep = md.ReturnType; mfs.FullName = version + "." + interfaceFullName + "." + mfs.Name; mfs.methodInfo = md; mfs.ReqFullName = version + "." + FullName + "." + mfs.Name; this.put(md.Name, mfs); for (int j = 0; j < paramInfos.Length; j++) { ParameterInfo parameterInfo = paramInfos[j]; mfs.req = parameterInfo.ParameterType; Console.WriteLine($"类名:{ t.Name}, {"方法名:" + md.Name},{"入参" + j + ":" + parameterInfo.ParameterType}"); } IConnection connection = factory.CreateConnection(); IModel channel = connection.CreateModel(); mfs.channel = channel; String correlationId = mfs.ReqFullName; // 创建一个临时队列, 返回队列的名字 String replyQueue = channel.QueueDeclare().QueueName; IBasicProperties properties = channel.CreateBasicProperties(); properties.ReplyTo = replyQueue; properties.CorrelationId = correlationId; mfs.properties = properties; //创建消费者用于消息回调 var callbackConsumer = new EventingBasicConsumer(channel); //绑定临时队列的消费 channel.BasicConsume(queue: replyQueue, autoAck: true, consumer: callbackConsumer); callbackConsumer.Received += (model, ea) => { if (ea.BasicProperties.CorrelationId == correlationId) { //解码反回消息 SuperMsgMulti superMsg = this.serializer.DeSerializeString <SuperMsgMulti>(ea.Body.ToString()); var responseMsg = $"Get Response: {Encoding.UTF8.GetString(ea.Body.ToArray())}"; Console.WriteLine($"[x]: {responseMsg}"); } }; } #endregion } catch (Exception ex) { throw ex; } }
public override void GetMathsInfo(Type t) { this.clear(); try { IConnection conection = factory.CreateConnection(); #region 方法二 MethodInfo[] info = t.GetMethods(); List <Type> interfaces = t.GetInterfaces().Where(type => (!typeof(MsgController).IsAssignableFrom(type))).ToList(); if (interfaces.Count > 1 || interfaces.Count == 0) { throw new Exception("MsgController的实现类必须继承Sharing中共享的接口," + "且不能继承MsgController外的其他接口,且不能多层继承"); } for (int k = 0; k < interfaces.Count; k++) { ///获取接口和类信息 this.ControllerObj = Activator.CreateInstance(t); this.packageName = t.Namespace; this.FullName = t.FullName; this.interfaceFullName = interfaces[k].FullName; IEnumerable <CustomAttributeData> eFRpcServiceAttribute = t.CustomAttributes.Where(type => type.AttributeType == typeof(EFRpcServiceAttribute)).ToList(); foreach (var a in eFRpcServiceAttribute) { foreach (var kv in a.NamedArguments) { if (kv.MemberName.Equals("version")) { this.version = kv.TypedValue.Value.ToString(); } } } for (int i = 0; i < info.Length; i++) { MsgFun mf = new MsgFun(); MethodInfo md = info[i]; //方法名 string mothodName = md.Name; Console.WriteLine($"类名:{ t.Name}, {"方法名:" + md.Name}"); //参数集合 ParameterInfo[] paramInfos = md.GetParameters(); if (md.Name.Equals("ToString") || md.Name.Equals("Equals") || md.Name.Equals("GetHashCode") || md.Name.Equals("GetType")) { continue; } MsgFun mfs = new MsgFun(); mfs.Name = md.Name; mfs.rep = md.ReturnType; mfs.methodInfo = md; this.put(md.Name, mfs); for (int j = 0; j < paramInfos.Length; j++) { ParameterInfo parameterInfo = paramInfos[j]; mfs.req = parameterInfo.ParameterType; Console.WriteLine($"类名:{ t.Name}, {"方法名:" + md.Name},{"入参" + j + ":" + parameterInfo.ParameterType}"); } IModel channel = conection.CreateModel(); channel.QueueDeclare(queue: this.version + this.interfaceFullName + "." + md.Name, durable: false, exclusive: false, autoDelete: false, arguments: null); var consumer = new EventingBasicConsumer(channel); Console.WriteLine("[*] Waiting for message."); consumer.Received += (model, ea) => { var properties = ea.BasicProperties; var replyProerties = channel.CreateBasicProperties(); replyProerties.CorrelationId = properties.CorrelationId; SuperMsg superMsg = this.serializer.DeSerializeString <SuperMsg>(ea.Body.ToString()); object[] objs = new object[] { superMsg.msg };// new object[] { JsonSerializer.CreateDefault().Deserialize( ea.Body.ToArray().ToString(), parameterInfo.ParameterType) };//new object[] { ProtobufSerializer.DeSerializeBytes(parameterInfo.ParameterType, ea.Body.ToArray()) } object rep = mfs.methodInfo.Invoke(this.ControllerObj, objs); if (md.ReturnType != typeof(void)) { channel.BasicPublish(exchange: "", routingKey: properties.ReplyTo, basicProperties: replyProerties, body: this.serializer.SerializeBytes(superMsg.setMsg(rep)));//ProtobufSerializer.SerializeBytes(mfs.rep,rep) } channel.BasicAck(ea.DeliveryTag, false); // Console.WriteLine($"Return result: {"消息:" + message}"); }; channel.BasicConsume(queue: this.version + this.interfaceFullName + "." + md.Name, autoAck: false, consumer: consumer); Console.WriteLine($"类名:{ t.Name}, {"方法名:" + md.Name},{"返回值" + ":" + md.ReturnType}"); } } #endregion } catch (Exception ex) { throw ex; } }
public override void GetMathsInfo <T>() { this.clear(); //传递参数 var t = typeof(T); //var t = Type.GetType(className); List <Type> interfaces = t.GetInterfaces().Where(type => (!typeof(MsgController).IsAssignableFrom(type))).ToList(); if (interfaces.Count > 1 || interfaces.Count == 0) { throw new Exception("MsgController的实现类必须继承Sharing中共享的接口," + "且不能继承MsgController外的其他接口,且不能多层继承"); } for (int k = 0; k < interfaces.Count; k++) { this.ControllerObj = Activator.CreateInstance(t); this.packageName = t.Namespace; this.FullName = t.FullName; this.className = t.Name; this.interfaceFullName = interfaces[k].FullName; try { #region 方法二 MethodInfo[] info = t.GetMethods(); for (int i = 0; i < info.Length; i++) { MsgFun mf = new MsgFun(); MethodInfo md = info[i]; if (md.Name.Equals("ToString") || md.Name.Equals("Equals") || md.Name.Equals("GetHashCode") || md.Name.Equals("GetType")) { continue; } //方法名 string mothodName = md.Name; Console.WriteLine($"类名:{ t.Name}, {"方法名:" + md.Name}"); //参数集合 ParameterInfo[] paramInfos = md.GetParameters(); MsgFun mfs = new MsgFun(); mfs.Name = md.Name; mfs.rep = md.ReturnType; //var objj = Activator.CreateInstance(mfs.req); mfs.methodInfo = md; this.put(md.Name, mfs); for (int j = 0; j < paramInfos.Length; j++) { ParameterInfo parameterInfo = paramInfos[j]; mfs.req = parameterInfo.ParameterType; Console.WriteLine($"类名:{ t.Name}, {"方法名:" + md.Name},{"入参" + j + ":" + parameterInfo.ParameterType}"); } FleckLog.Level = LogLevel.Debug; var allSockets = new List <IWebSocketConnection>(); var server = new WebSocketServer($"{sockettype }://{ipaddres}:{ ipport}//{this.interfaceFullName + "." + md.Name}"); Action <IWebSocketConnection> config = new Action <IWebSocketConnection>(socket => { socket.OnOpen = () => { allSockets.Add(socket); }; socket.OnClose = () => { Console.WriteLine(); allSockets.Remove(socket); }; socket.OnMessage = message => { SuperMsg superMsg = this.serializer.DeSerializeString <SuperMsg>(message); object[] objs = new object[] { superMsg.msg };// new object[] { JsonSerializer.CreateDefault().Deserialize( ea.Body.ToArray().ToString(), parameterInfo.ParameterType) };//new object[] { ProtobufSerializer.DeSerializeBytes(parameterInfo.ParameterType, ea.Body.ToArray()) } object rep = mfs.methodInfo.Invoke(this.ControllerObj, objs); if (md.ReturnType != typeof(void)) { //message 然后开启查询 allSockets.ToList().ForEach(s => s.Send(this.serializer.SerializeString(new SuperMsg(rep)))); } }; }); WeeklyAction weeklyAction = new WeeklyAction(SendMsg); weeklyAction.Invoke(server, config); Console.WriteLine($"类名:{ t.Name}, {"方法名:" + md.Name},{"返回值" + ":" + md.ReturnType}"); } #endregion } catch (Exception ex) { throw ex; } } }