'''
Host a multiplayer sever via WebSocket protocol
https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_servers
'''
import base64
import hashlib
import socket
from struct import pack, unpack
import threading
import json
class WebSocketConn:
def __init__(self, conn):
self.conn = conn
request = self.conn.recv(1024).strip().decode('utf-8', 'ignore').split('\r\n')
# parse headers into dict
self.headers = dict([line.split(': ', 1) for line in request[1:]])
# perform WebSocket handshake
self._handshake()
def _handshake(self):
key = self.headers.get('Sec-WebSocket-Key') + '258EAFA5-E914-47DA-95CA-C5AB0DC85B11'
resp_key = base64.standard_b64encode(hashlib.sha1(key.encode()).digest()).decode()
res_header = {
'Upgrade': 'websocket',
'Connection': 'Upgrade',
'Sec-WebSocket-Accept': resp_key,
}
response = 'HTTP/1.1 101 Switching Protocols\r\n'
for i in res_header:
response += '%s: %s\r\n' % (i, res_header[i])
response += '\r\n'
self.conn.se