1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
#!/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()