/// <summary> /// 여러가지 상태를 출력합니다 /// </summary> /// <param name="svr"></param> static public void DisplayStatus(ZNet.CoreServerNet svr) { ZNet.ServerState status; svr.GetCurrentState(out status); // 기본 정보 Console.WriteLine(string.Format( "[NetInfo] Connect/Join {0}/{1} Connect(Server) {2} Accpet/Max {3}/{4}", // 실제 연결된 client status.m_CurrentClient, // 서버에 입장완료상태의 client status.m_JoinedClient, // 서버간 direct p2p 연결된 server status.m_ServerP2PCount, // 이 서버에 추가 연결 가능한 숫자 status.m_nIoAccept, // 이 서버에 최대 연결 가능한 숫자 status.m_MaxAccept )); // 네트워크 IO 상태 정보 Console.WriteLine(string.Format( "[IO Info] Close {0} Event {1} Recv {2} Send {3}", // current io close status.m_nIoClose, // current io event status.m_nIoEvent, // current io recv socket status.m_nIoRecv, // current io send socket status.m_nIoSend )); }
static void DisplayStatus(ZNet.CoreServerNet svr) { ZNet.ServerState status; svr.GetCurrentState(out status); // 기본 정보 Console.WriteLine(string.Format( "[NetInfo] Connect/Join {0}({1})/{2} Connect(Server) {3}/{4} Accpet/Max {5}/{6}", // 실제 연결된 client status.m_CurrentClient, // 연결복구 처리과정인 client status.m_RecoveryCount, // 서버에 입장완료상태의 client status.m_JoinedClient, // 서버간 direct p2p 연결된 server status.m_ServerP2PCount, // 서버간 direct p2p 연결 모니터링중인 server(서버간 연결 자동복구를 위한 모니터링) status.m_ServerP2PConCount, // 이 서버에 추가 연결 가능한 숫자 status.m_nIoAccept, // 이 서버에 최대 연결 가능한 숫자 status.m_MaxAccept )); // 엔진 내부에서 작업중인 IO 관련 상태 정보 Console.WriteLine(string.Format( "[IO Info] Close {0} Event {1} Recv {2} Send {3}", // current io close status.m_nIoClose, // current io event status.m_nIoEvent, // current io recv socket status.m_nIoRecv, // current io send socket status.m_nIoSend )); // 엔진 메모리 관련 사용 정보 Console.WriteLine(string.Format( "[MemInfo] Alloc/Instant[{0}/{1}], test[{2}], EngineVersion[{3}.{4:0000}] ", // 미리 할당된 IO 메모리 status.m_nAlloc, // 즉석 할당된 IO 메모리 status.m_nAllocInstant, // test data status.m_test_data, // Core버전 svr.GetCoreVersion() / 10000, svr.GetCoreVersion() % 10000 )); // 스레드 정보 string strThr = "[ThreadInfo] ("; int MaxDisplayThreadCount = status.m_arrThread.Count(); if (MaxDisplayThreadCount > 8) // 화면이 복잡하니까 그냥 최대 8개까지만 표시 { strThr += MaxDisplayThreadCount; strThr += ") : "; MaxDisplayThreadCount = 8; } else { strThr += MaxDisplayThreadCount; strThr += ") : "; } for (int i = 0; i < MaxDisplayThreadCount; i++) { strThr += "["; strThr += status.m_arrThread[i].m_ThreadID; // 스레드ID strThr += "/"; strThr += status.m_arrThread[i].m_CountQueue; // 처리 대기중인 작업 strThr += "/"; strThr += status.m_arrThread[i].m_CountWorked; // 처리된 작업(누적) strThr += "] "; } Console.WriteLine(strThr); }