Spaces:
Runtime error
Runtime error
import asyncio | |
import websockets | |
import json | |
import requests | |
import logging | |
import gradio as gr | |
from datetime import datetime | |
# Set up logging configuration | |
logging.basicConfig(level=logging.INFO) | |
# Dictionary to store table information | |
table = {} | |
def send_form(form_data): | |
# URL for Google Form | |
url = "https://docs.google.com/forms/u/0/d/e/1FAIpQLSeDkeewjc5CEZ9ORYJix20rjGWr48WFSBryEqp7D2q5Hsd4PA/formResponse" | |
try: | |
# Send POST request with form data | |
response = requests.post(url, data=form_data) | |
response.raise_for_status() # Raise exception for HTTP errors | |
logging.info("Submitted successfully to Google Form.") | |
except requests.exceptions.RequestException as e: | |
logging.error("Failed to submit to Google Form: " + str(e)) | |
def parse_card_values(dtCard): | |
# Parse card values based on modulus 20 | |
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): | |
# Extract data from case 25 | |
group_id = data['groupID'] | |
player_score = data['playerScore'] | |
banker_score = data['bankerScore'] | |
dt_card = data['dtCard'] | |
card_values = parse_card_values(dt_card)["CardValues"] | |
# Determine result (Player, Banker, Tie) | |
if player_score == banker_score: | |
result = "T" | |
elif player_score > banker_score: | |
result = "P" | |
else: | |
result = "B" | |
# Retrieve additional info from table | |
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 = "" | |
# Current timestamp | |
today = datetime.now().strftime("%Y-%m-%d %H:%M:%S") | |
# Construct form data | |
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): | |
# Send a heartbeat message to the WebSocket server | |
heartbeat_message = {"protocol": 999, "data": {}} | |
await websocket.send(json.dumps(heartbeat_message)) | |
# Wait for a period of time before sending the next heartbeat | |
await asyncio.sleep(10) # Send heartbeat every 10 seconds | |
async def send_login(websocket): | |
# Create a JSON message containing login information | |
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) | |
# Send the login message to the WebSocket server | |
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: | |
# Send login message to the WebSocket server | |
await send_login(websocket) | |
logging.info('Login message sent') | |
await send_heartbeat(websocket) | |
# Receive and process responses from the server | |
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(debug=True) | |