|
import asyncio |
|
import websockets |
|
import json |
|
import requests |
|
import logging |
|
import gradio as gr |
|
from datetime import datetime |
|
|
|
|
|
|
|
|
|
|
|
table = {} |
|
|
|
def send_form(form_data): |
|
|
|
url = "https://docs.google.com/forms/u/0/d/e/1FAIpQLSeDkeewjc5CEZ9ORYJix20rjGWr48WFSBryEqp7D2q5Hsd4PA/formResponse" |
|
try: |
|
|
|
response = requests.post(url, data=form_data) |
|
response.raise_for_status() |
|
|
|
except requests.exceptions.RequestException as e: |
|
logging.error("Failed to submit to Google Form: " + str(e)) |
|
|
|
def parse_card_values(dtCard): |
|
|
|
card_values = [] |
|
for card in dtCard: |
|
value = dtCard[card] % 20 |
|
if value in [1, 14]: |
|
card_values.append(1) |
|
elif value in [11, 12, 13]: |
|
card_values.append(10) |
|
elif value in range(2, 11): |
|
card_values.append(value) |
|
else: |
|
card_values.append("") |
|
return {"CardValues": card_values} |
|
|
|
def handle_case_25(data): |
|
|
|
group_id = data['groupID'] |
|
player_score = data['playerScore'] |
|
banker_score = data['bankerScore'] |
|
dt_card = data['dtCard'] |
|
card_values = parse_card_values(dt_card)["CardValues"] |
|
|
|
|
|
if player_score == banker_score: |
|
result = "T" |
|
elif player_score > banker_score: |
|
result = "P" |
|
else: |
|
result = "B" |
|
|
|
|
|
if group_id in table: |
|
info = table[group_id] |
|
game_no = info['gameNo'] |
|
game_no_round = info['gameNoRound'] |
|
dealer_name = info['dealerName'] |
|
group_type = info['groupType'] |
|
else: |
|
game_no = game_no_round = dealer_name = group_type = "" |
|
|
|
|
|
today = datetime.now().strftime("%Y-%m-%d %H:%M:%S") |
|
|
|
|
|
record_form = { |
|
"entry.1910151925": group_id, |
|
"entry.345081202": card_values[0], |
|
"entry.790265993": card_values[2], |
|
"entry.266290562": card_values[4], |
|
"entry.1840046760": card_values[1], |
|
"entry.2050858893": card_values[3], |
|
"entry.1372409472": card_values[5], |
|
"entry.211810544": player_score, |
|
"entry.2078666320": banker_score, |
|
"entry.1824106848": result, |
|
"entry.1579231357": group_type, |
|
"entry.911826972": game_no, |
|
"entry.305589575": game_no_round, |
|
"entry.992348569": dealer_name |
|
} |
|
return record_form |
|
|
|
async def send_heartbeat(websocket): |
|
|
|
heartbeat_message = {"protocol": 999, "data": {}} |
|
await websocket.send(json.dumps(heartbeat_message)) |
|
|
|
await asyncio.sleep(10) |
|
|
|
async def send_login(websocket): |
|
|
|
login_data = { |
|
"protocol": 1, |
|
"data": { |
|
"sid": "ANONYMOUS-1000759", |
|
"dtBetLimitSelectID": { |
|
"101": 99101, "102": 99102, "103": 99103, "104": 99104, |
|
"105": 99105, "106": 99106, "107": 99107, "108": 99108, |
|
"110": 99110, "111": 99111, "112": 99112, "113": 99113, |
|
"125": 99125, "126": 99126, "128": 99128, "129": 99129 |
|
}, |
|
"bGroupList": False, |
|
"videoName": "HttpFlv", |
|
"videoDelay": 3000, |
|
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36" |
|
} |
|
} |
|
login_message = json.dumps(login_data) |
|
|
|
await websocket.send(login_message) |
|
|
|
async def init_sma_ws(): |
|
uri = "wss://a45gs-t.wmetg.com/15101" |
|
try: |
|
async with websockets.connect(uri) as websocket: |
|
|
|
await send_login(websocket) |
|
logging.info('Login message sent') |
|
await send_heartbeat(websocket) |
|
|
|
|
|
while True: |
|
try: |
|
response = await websocket.recv() |
|
json_obj = json.loads(response) |
|
protocol = json_obj["protocol"] |
|
if protocol == 21: |
|
info = json_obj["data"] |
|
group_id = info['groupID'] |
|
game_no = info['gameNo'] |
|
game_no_round = info['gameNoRound'] |
|
dealer_name = info['dealerName'] |
|
group_type = info['groupType'] |
|
|
|
table[group_id] = { |
|
'groupType': group_type, |
|
'gameNo': game_no, |
|
'gameNoRound': game_no_round, |
|
'dealerName': dealer_name |
|
} |
|
|
|
if protocol == 25: |
|
data = handle_case_25(json_obj["data"]) |
|
send_form(data) |
|
except websockets.exceptions.ConnectionClosedError as e: |
|
logging.error(f"Connection closed: {e}") |
|
break |
|
except asyncio.CancelledError: |
|
logging.info("WebSocket connection cancelled.") |
|
except Exception as e: |
|
logging.error(f"Error: {e}") |
|
|
|
def websocket_interface(): |
|
asyncio.run(init_sma_ws()) |
|
|
|
iface = gr.Interface( |
|
fn=websocket_interface, |
|
inputs=None, |
|
outputs=gr.Textbox(label="Output"), |
|
title="WebSocket Interface" |
|
) |
|
|
|
iface.launch() |
|
|