104 lines
3.3 KiB
Python
104 lines
3.3 KiB
Python
|
import sys
|
||
|
import socket
|
||
|
import struct
|
||
|
import pathlib
|
||
|
import logging
|
||
|
|
||
|
from objects import glob
|
||
|
from handlers.mainHandler import STRUCTS
|
||
|
|
||
|
sock_addr = (glob.config["socket"]["ip"] if glob.config["socket"]["ip"] != "0.0.0.0" else "127.0.0.1", glob.config["socket"]["port"])
|
||
|
|
||
|
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
|
||
|
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
||
|
sock.connect(sock_addr)
|
||
|
sock.setblocking(0)
|
||
|
|
||
|
def send_packet(type, data = b""):
|
||
|
global sock
|
||
|
packet_id = list(STRUCTS.keys()).index(type) + 1
|
||
|
data = struct.pack(b"<3sB%ds" % len(data), b"FLY", packet_id, data)
|
||
|
logging.info("<< %s" % data)
|
||
|
sock.send(data)
|
||
|
|
||
|
def sinput(p = "> "):
|
||
|
s = input(p)
|
||
|
if s in ["exit", "close", "stop"]:
|
||
|
send_packet("server_close")
|
||
|
exit()
|
||
|
return s
|
||
|
|
||
|
def srvr():
|
||
|
keys = list(STRUCTS.keys())
|
||
|
def choose_packetType():
|
||
|
print("Choose packetID to send")
|
||
|
for i in range(len(keys)):
|
||
|
print(" %d: %s" % (i + 1, keys[i]))
|
||
|
id = 0
|
||
|
while id > len(keys) or id < 1:
|
||
|
try:
|
||
|
id = int( sinput() )
|
||
|
except SystemExit or KeyboardInterrupt:
|
||
|
exit()
|
||
|
except:
|
||
|
pass
|
||
|
return id
|
||
|
|
||
|
def send_data(id):
|
||
|
def _start():
|
||
|
ret = (
|
||
|
int( input(" FlightUUID (I) [DWORD] > ") ),
|
||
|
float( input(" VehicleMaxFuel (f) [FLOAT] > ") ),
|
||
|
int( input(" VehicleModelID (H) [WORD] > ") ),
|
||
|
input(" PlayerName (%ds) [STRING] > ").encode()
|
||
|
)
|
||
|
send_packet("start",
|
||
|
struct.pack(b"<I" + STRUCTS["start"] % 24,
|
||
|
ret[0], # flightUUID
|
||
|
ret[1], # vehicleMaxFuel
|
||
|
ret[2], # vehicleModelID
|
||
|
len( ret[3] ), # playerNameLength
|
||
|
ret[3] # playerName
|
||
|
)
|
||
|
)
|
||
|
|
||
|
def _flight_data():
|
||
|
ret = (
|
||
|
int( input(" FlightUUID (I) [DWORD] > ") ),
|
||
|
int( input(" Flags 0-3 (B) [BYTE] > ") ),
|
||
|
int( input(" Satisfaction (B) [BYTE] > ") ),
|
||
|
int( input(" Speed (H) [WORD] > ") ),
|
||
|
int( input(" Altitude (h) [WORD] > ") ),
|
||
|
int( input(" Health (H) [WORD] > ") ),
|
||
|
float( input(" FuelLevel (f) [FLOAT] > ") ),
|
||
|
float( input(" X pos (f) [FLOAT] > ") ),
|
||
|
float( input(" Y pos (f) [FLOAT] > ") )
|
||
|
)
|
||
|
send_packet("flight_data", struct.pack(b"<I" + STRUCTS["flight_data"], *ret) )
|
||
|
|
||
|
def _end():
|
||
|
ret = (
|
||
|
int( input(" FlightUUID (I) [DWORD] > ") ),
|
||
|
)
|
||
|
send_packet("end", struct.pack(b"<I" + STRUCTS["end"], *ret))
|
||
|
|
||
|
def _server_open():
|
||
|
send_packet("server_open")
|
||
|
def _server_close():
|
||
|
send_packet("server_close")
|
||
|
|
||
|
switch = {
|
||
|
1: _start,
|
||
|
2: _flight_data,
|
||
|
3: _end,
|
||
|
4: _server_open,
|
||
|
5: _server_close
|
||
|
}
|
||
|
switch.get(id)()
|
||
|
|
||
|
send_packet("server_open")
|
||
|
while True:
|
||
|
id = choose_packetType()
|
||
|
send_data(id)
|
||
|
|
||
|
srvr()
|