/// <summary> /// 重建短路径 /// </summary> /// <param name="client"></param> /// <param name="returnType"></param> /// <returns></returns> internal bool ReCreate(SlaveServer.TcpInternalClient client, ref ReturnType returnType) { switch (returnType) { case ReturnType.NotFoundShortPathNode: Identity.Type = ReturnType.NotFoundShortPathNode; return(false); case ReturnType.NotFoundShortPath: Monitor.Enter(createLock); if (Identity.Type != ReturnType.NotFoundShortPathNode) { Identity.Type = ReturnType.NotFoundShortPath; if (reCreate(client)) { return(true); } } else { Monitor.Exit(createLock); } break; } returnType = Identity.Type; return(false); }
/// <summary> /// 释放资源 /// </summary> public void Dispose() { if (client != null) { client.Dispose(); client = null; } }
/// <summary> /// 缓存主服务 /// </summary> /// <param name="config">缓存主服务配置</param> public SlaveServer(SlaveServerConfig config) : base() { Config = config ?? defaultConfig; if (Config.IsMasterCacheServer) { masterClient = new MasterServer.TcpInternalClient(Config.CacheServerAttribute); } else { slaveClient = new SlaveServer.TcpInternalClient(Config.CacheServerAttribute); } }
internal ReturnType Check(SlaveServer.TcpInternalClient client) { switch (Identity.Type) { case ReturnType.NotFoundShortPathNode: return(ReturnType.NotFoundShortPathNode); case ReturnType.NotFoundShortPath: return(check(client)); } if (socketIdentity != Client.SocketIdentity) { return(check(client)); } return(Identity.Type); }
/// <summary> /// 检测短路径的有效性 /// </summary> /// <param name="client"></param> /// <returns></returns> private ReturnType check(SlaveServer.TcpInternalClient client) { Monitor.Enter(createLock); switch (Identity.Type) { case ReturnType.NotFoundShortPathNode: Monitor.Exit(createLock); return(ReturnType.NotFoundShortPathNode); case ReturnType.NotFoundShortPath: reCreate(client); return(Identity.Type); } if (socketIdentity == Client.SocketIdentity) { Monitor.Exit(createLock); } else { reCreate(client); } return(Identity.Type); }
/// <summary> /// 重建短路径 /// </summary> /// <param name="client"></param> /// <returns></returns> private bool reCreate(SlaveServer.TcpInternalClient client) { try { do { socketIdentity = Client.SocketIdentity; AutoCSer.Net.TcpServer.ReturnValue <ReturnParameter> value = client.Query(new OperationParameter.QueryNode { Node = Parameter }); if (socketIdentity == Client.SocketIdentity) { return(isCreate(ref value)); } }while (true); } catch (Exception error) { client._TcpClient_.AddLog(error); } finally { Monitor.Exit(createLock); } return(false); }
/// <summary> /// 缓存服务客户端 /// </summary> /// <param name="serverAttribute">缓存服务端配置</param> public SlaveClient(AutoCSer.Net.TcpInternalServer.ServerAttribute serverAttribute) { client = new SlaveServer.TcpInternalClient(serverAttribute); }
/// <summary> /// 缓存服务客户端 /// </summary> /// <param name="client">缓存服务客户端</param> public SlaveClient(SlaveServer.TcpInternalClient client = null) { this.client = client ?? new SlaveServer.TcpInternalClient(); }