private void CheckTransport() { var transportState = _transport.State; if (transportState == TcpTransportState.Closed) { throw new RpcException("SimpleRpcClient CheckTransport failed,connection has been closed"); } if (transportState == TcpTransportState.Uninit) { try { _transport.Init(); } catch (Exception ex) { try { _transport.Close(); } catch { } LogAgent.Warn("close network in SimpleRpcClient CheckTransport,transport init error", ex); throw; } } }
private void RegisterServices(List <Tuple <Type, RpcServiceAttribute> > serviceTypeList, IRpcSerializer rpcSerializer) { foreach (var tuple in serviceTypeList) { var serviceType = tuple.Item1; var serviceAttribute = tuple.Item2; try { var service = ObjectFactory.CreateInstance(serviceType); var serviceName = serviceAttribute.ServiceName; if (string.IsNullOrEmpty(serviceName)) { serviceName = serviceType.Name; } var methodInfoArray = serviceType.GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly); foreach (var methodInfo in methodInfoArray) { var actionAttribute = (RpcServiceActionAttribute)methodInfo.GetCustomAttributes(typeof(RpcServiceActionAttribute), false).FirstOrDefault(); var actionName = actionAttribute?.ActionName; if (string.IsNullOrEmpty(actionName)) { actionName = methodInfo.Name; } RegisterService(serviceName, actionName, service, serviceType, methodInfo, rpcSerializer); } } catch (Exception ex) { LogAgent.Warn(string.Format("RegisterService failed,type:{0}", serviceType.Name), ex); } } }
private void AcceptSocketCallback(IAsyncResult ar) { if (_serverState != 2) { return; } var server = (Socket)ar.AsyncState; Socket client = null; IPEndPoint ipEndPoint = null; try { client = server.EndAccept(ar); ipEndPoint = (IPEndPoint)client.RemoteEndPoint; } catch (Exception ex) { LogAgent.Warn("RpcServer AcceptSocketCallback failed,EndAccept error", ex); } try { server.BeginAccept(AcceptSocketCallback, server); } catch (Exception ex) { Close(); try { if (client != null) { client.Close(); } } catch { } LogAgent.Warn("close network in RpcServer AcceptSocketCallback,BeginAccept error", ex); return; } if (ipEndPoint == null) { try { if (client != null) { client.Close(); } } catch { } LogAgent.Warn("close network in RpcServer AcceptSocketCallback,client RemoteEndPoint is null"); return; } var tcpTransport = new TcpTransport(this, ipEndPoint.Address, ipEndPoint.Port); try { tcpTransport.Init(client); } catch (Exception ex) { try { tcpTransport.Close(); } catch { } LogAgent.Warn("close network in RpcServer AcceptSocketCallback,tcpTransport Init error", ex); return; } _clientTransportDictionary[tcpTransport.Key] = tcpTransport; }