private void removeRegister(clientId clientId) { if (clientId.Tick == logStream.Ticks && clientPool.Enter()) { if (clientPool.Pool[clientId.Identity.Index].Free(clientId.Identity.Identity)) { clientPool.FreeExit(clientId.Identity.Index); subArray <string> removeNames = default(subArray <string>); Monitor.Enter(serviceLock); try { foreach (services service in serviceCache.Values.getArray()) { hashString serviceName = service.Name; if (removeRegister(clientId.Identity, service, ref serviceName)) { removeNames.Add(service.Name); } } } finally { Monitor.Exit(serviceLock); } if (removeNames.length != 0) { fastCSharp.log.Default.Add("TCP服务 " + removeNames.ToArray().joinString(',') + " 被注销", null, false); } } else { clientPool.Exit(); } } }
/// <summary> /// 删除Session /// </summary> /// <param name="sessionId">Session名称</param> public void Remove(ref sessionId sessionId) { if (sessionId.Low != 0 && (uint)sessionId.Index < (uint)Pool.Pool.Length && Pool.Enter()) { if (Pool.Pool[sessionId.Index].Remove(ref sessionId)) { Pool.FreeExit(sessionId.Index); } else { Pool.Exit(); } } }
/// <summary> /// 关闭数据库文件 /// </summary> /// <param name="identity">数据库物理层唯一标识</param> /// <param name="isWait">是否等待关闭</param> internal void Close(indexIdentity identity, bool isWait) { if (physicalPool.Enter()) { physicalInfo physical = physicalPool.Pool[identity.Index]; if (physical.Identity == identity.Identity) { physicalPool.Pool[identity.Index].Clear(); fileNameIndexs.Remove(physical.FileName); physicalPool.FreeExit(identity.Index); physical.Close(isWait); } else { physicalPool.Exit(); } } }