#!/usr/bin/python
|
# -*- coding: GBK -*-
|
|
"""
|
EventServer - ʼþ·þÎñÆ÷
|
ÓÃÓÚ½ÓÊÕÓÎÏ·¿Í»§¶Ëʼþ²¢¼Ç¼µ½±¾µØÎļþ
|
"""
|
|
import os
|
import sys
|
import datetime
|
import time
|
import threading
|
import ctypes
|
from config import ConfigReader
|
from server import EventServer
|
from packet_logger import packet_logger
|
from clients_manager import ClientsMgr
|
|
|
def disable_close_button():
|
"""½ûÓÿØÖÆÌ¨´°¿ÚµÄ¹Ø±Õ°´Å¥"""
|
try:
|
# »ñÈ¡µ±Ç°¿ØÖÆÌ¨´°¿Ú¾ä±ú
|
kernel32 = ctypes.windll.kernel32
|
hwnd = kernel32.GetConsoleWindow()
|
|
if hwnd:
|
# »ñÈ¡µ±Ç°´°¿ÚÑùʽ
|
user32 = ctypes.windll.user32
|
style = user32.GetWindowLongW(hwnd, -16) # GWL_STYLE = -16
|
|
# ÒÆ³ý¹Ø±Õ°´Å¥ (WS_SYSMENU)
|
user32.SetWindowLongW(hwnd, -16, style & ~0x80000)
|
except:
|
pass
|
|
|
def main():
|
"""Ö÷º¯Êý"""
|
os.system("title EventServer-%s" % datetime.datetime.today())
|
|
# ½ûÓùرհ´Å¥
|
disable_close_button()
|
|
# ³õʼ»¯·â°üÈÕ־ϵͳ
|
if packet_logger.enable:
|
print('[Main] Packet logger initialized: %s' % packet_logger.log_dir)
|
else:
|
print('[Main] Packet logger disabled')
|
|
# ³õʼ»¯µ¥Àý£¨È·±£Ḭ̈߳²È«ºÍʵÀýÒ»Ö£©
|
ConfigReader.instance()
|
ClientsMgr.instance()
|
|
print('=' * 60)
|
print(' EventServer - ÓÎϷʼþ·þÎñÆ÷')
|
print(' Version: 1.0.0')
|
print(' Python: 2.7')
|
print('=' * 60)
|
print('')
|
|
# ´´½¨²¢³õʼ»¯·þÎñÆ÷
|
server = EventServer()
|
|
# Æô¶¯·þÎñÆ÷
|
if not server.start():
|
print('[Main] Failed to start server!')
|
raw_input('Press Enter to exit...')
|
return
|
|
print('[Main] Server is running...')
|
print('[Main] Press Ctrl+C to stop')
|
print('')
|
|
# Æô¶¯×´Ì¬ÏÔʾÏß³Ì
|
stop_event = threading.Event()
|
status_thread = threading.Thread(target=show_status, args=(server, stop_event))
|
status_thread.daemon = True
|
status_thread.start()
|
|
try:
|
# Ö÷Ñ»·,µÈ´ýÖжÏÐźÅ
|
while True:
|
time.sleep(1)
|
except KeyboardInterrupt:
|
print('')
|
print('[Main] Received interrupt signal, stopping...')
|
except Exception as e:
|
print('[Main] Error: %s' % str(e))
|
|
# ÉèÖÃֹͣʼþ
|
stop_event.set()
|
|
# Í£Ö¹·þÎñÆ÷
|
server.stop()
|
|
print('[Main] Goodbye!')
|
|
|
def show_status(server, stop_event):
|
"""ÏÔʾ·þÎñÆ÷״̬"""
|
last_success = 0
|
last_fail = 0
|
|
while not stop_event.is_set():
|
time.sleep(5)
|
|
# ÇåÆÁ
|
os.system('cls' if os.name == 'nt' else 'clear')
|
|
# ÖØÐÂÏÔʾ±êÌâ
|
print('=' * 60)
|
print(' EventServer - ÓÎϷʼþ·þÎñÆ÷')
|
print(' Version: 1.0.0')
|
print(' Python: ' + sys.version)
|
print('=' * 60)
|
|
print('[Main] Server is running...')
|
print('[Main] Press Ctrl+C to stop')
|
print('')
|
|
# »ñȡͳ¼ÆÊý¾Ý
|
conn_count = server.get_connection_count()
|
queue_size = server.get_queue_size()
|
success_count = server.get_success_count()
|
fail_count = server.get_fail_count()
|
|
# ¼ÆËãÔöÁ¿
|
success_delta = success_count - last_success
|
fail_delta = fail_count - last_fail
|
|
print('[Status] Connections: %d | Queue: %d | Success: +%d (Total: %d) | Fail: +%d (Total: %d)' % (
|
conn_count,
|
queue_size,
|
success_delta,
|
success_count,
|
fail_delta,
|
fail_count
|
))
|
|
last_success = success_count
|
last_fail = fail_count
|
|
|
if __name__ == '__main__':
|
main()
|