public void Close() //断开该Agent的连接 { if (Interlocked.Increment(ref closeReq) != 1) { return; } if (isClose) { return; } isClose = true; LogHelper.Log("Agent", "CloseAgent"); if (mSocket != null && mSocket.Connected) { Debug.LogError("CloseSocket"); try { mSocket.Shutdown(SocketShutdown.Both); mSocket.Close(); } catch (Exception exception) { Debug.LogError(Util.FlattenException(exception)); //Util.PrintStackTrace(); } } mSocket = null; if (actor != null) { actor.SendMsg(string.Format("close")); } //watchDog.Close(id); ClosePlayerActor(id); if (mSocket != null) { var ip = mSocket.RemoteEndPoint as IPEndPoint; LogHelper.LogClientLogout(string.Format("ip={0}", ip.Address)); } if (server != null) { server.RemoveAgent(this); } if (udpAgent != null) { udpAgent.Close(); } }