shortdeck1.3:ui and fix
This commit is contained in:
75
waitress_server.py
Normal file
75
waitress_server.py
Normal file
@@ -0,0 +1,75 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import sys
|
||||
import os
|
||||
from pathlib import Path
|
||||
project_root = Path(__file__).parent
|
||||
sys.path.insert(0, str(project_root))
|
||||
|
||||
if __name__ == "__main__":
|
||||
print("🚀 使用Waitress启动原始FastAPI扑克服务器...")
|
||||
print("📍 服务器地址: http://127.0.0.1:8005")
|
||||
print("🎮 游戏界面: http://127.0.0.1:8005/client/index.html")
|
||||
print("✅ 使用原始ArenaGame实现")
|
||||
print("🪟 Windows优化版本")
|
||||
|
||||
try:
|
||||
from shortdeck_server.main import app
|
||||
from waitress import serve
|
||||
|
||||
def wsgi_app(environ, start_response):
|
||||
import asyncio
|
||||
import json
|
||||
from urllib.parse import parse_qs
|
||||
|
||||
method = environ['REQUEST_METHOD']
|
||||
path = environ['PATH_INFO']
|
||||
query_string = environ.get('QUERY_STRING', '')
|
||||
|
||||
scope = {
|
||||
'type': 'http',
|
||||
'method': method,
|
||||
'path': path,
|
||||
'query_string': query_string.encode(),
|
||||
'headers': [(k.lower().replace('_', '-').encode(), v.encode())
|
||||
for k, v in environ.items() if k.startswith('HTTP_')],
|
||||
}
|
||||
|
||||
response_data = {'status': 500, 'headers': [], 'body': b''}
|
||||
|
||||
async def receive():
|
||||
content_length = int(environ.get('CONTENT_LENGTH', 0))
|
||||
if content_length > 0:
|
||||
body = environ['wsgi.input'].read(content_length)
|
||||
return {'type': 'http.request', 'body': body}
|
||||
return {'type': 'http.request', 'body': b''}
|
||||
|
||||
async def send(message):
|
||||
if message['type'] == 'http.response.start':
|
||||
response_data['status'] = message['status']
|
||||
response_data['headers'] = message.get('headers', [])
|
||||
elif message['type'] == 'http.response.body':
|
||||
response_data['body'] += message.get('body', b'')
|
||||
|
||||
try:
|
||||
loop = asyncio.new_event_loop()
|
||||
asyncio.set_event_loop(loop)
|
||||
loop.run_until_complete(app(scope, receive, send))
|
||||
loop.close()
|
||||
except Exception as e:
|
||||
response_data['status'] = 500
|
||||
response_data['body'] = f"Server Error: {str(e)}".encode()
|
||||
|
||||
status = f"{response_data['status']} OK"
|
||||
headers = [(h[0].decode(), h[1].decode()) for h in response_data['headers']]
|
||||
start_response(status, headers)
|
||||
return [response_data['body']]
|
||||
|
||||
serve(wsgi_app, host='127.0.0.1', port=8005, threads=4)
|
||||
|
||||
except KeyboardInterrupt:
|
||||
print("\n 服务器停止")
|
||||
except Exception as e:
|
||||
print(f" 服务器错误: {e}")
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
Reference in New Issue
Block a user