예제 #1
0
 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();
         }
     }
 }
예제 #2
0
 /// <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();
         }
     }
 }
예제 #3
0
 /// <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();
         }
     }
 }