Example #1
0
            public void Close()
            {
                var tmp = Socket;

                lock (this)
                {
                    // 简单保护一下,Close 正常程序退出的时候才调用这个,应该不用保护。
                    if (null == Socket)
                    {
                        return;
                    }

                    Socket = null; // 正常关闭,先设置这个,以后 OnSocketClose 的时候判断做不同的处理。
                }
                if (Logined.Task.IsCompletedSuccessfully)
                {
                    var normalClose = new GlobalCacheManager.NormalClose();
                    var future      = new TaskCompletionSource <int>();
                    normalClose.Send(tmp,
                                     (_) =>
                    {
                        if (normalClose.IsTimeout)
                        {
                            future.SetResult(-100);     // 关闭错误就不抛异常了。
                        }
                        else
                        {
                            future.SetResult(normalClose.ResultCode);
                            if (normalClose.ResultCode != 0)
                            {
                                logger.Error("GlobalAgent:NormalClose ResultCode={0}", normalClose.ResultCode);
                            }
                        }
                        return(0);
                    });
                    future.Task.Wait();
                }
                Logined.TrySetException(new Exception("GlobalAgent.Close")); // 这个,,,,
                tmp.Dispose();
            }
Example #2
0
 public void OnSocketClose(GlobalClient client, Exception ex)
 {
     lock (this)
     {
         if (null == Socket)
         {
             // active close
             return;
         }
         Socket = null;
     }
     if (Logined.Task.IsCompletedSuccessfully)
     {
         foreach (var database in client.Zeze.Databases.Values)
         {
             foreach (var table in database.Tables)
             {
                 table.ReduceInvalidAllLocalOnly(GlobalCacheManagerHashIndex);
             }
         }
         client.Zeze.CheckpointRun();
     }
     Logined.TrySetException(ex); // 连接关闭,这个继续保持。仅在Connect里面需要时创建。
 }