forked from andywaite/sim-telemetry-parser
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdemo.php
86 lines (64 loc) · 3.26 KB
/
demo.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
<?php
include 'vendor/autoload.php';
$parser = \AndyWaite\SimTelemetryParser\Parser::getParser();
//Create a UDP socket
if(!($sock = socket_create(AF_INET, SOCK_DGRAM, 0)))
{
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Couldn't create socket: [$errorcode] $errormsg \n");
}
echo "Socket created \n";
// Bind the source address
if( !socket_bind($sock, "0.0.0.0" , 20777) )
{
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Could not bind socket : [$errorcode] $errormsg \n");
}
echo "Socket bind OK \n";
$data = [];
//Do some communication, this loop can handle multiple clients
while(1)
{
//Receive some data
socket_recvfrom($sock, $buffer, 40000, 0, $remote_ip, $remote_port);
try {
// If you prefer to work with arrays, this will get the data as an assoc array.
// $packet = $parser->streamToArray($buffer);
$packet = $parser->streamToModels($buffer);
$playerCar = $packet->getHeader()->getPlayerCarIndex();
if ($packet instanceof \AndyWaite\SimTelemetryParser\Game\F12020\Structs\PacketCarTelemetryData) {
$data["Gear"] = $packet->getCarTelemetry($playerCar)->getGear();
$data["Speed"] = $packet->getCarTelemetry($playerCar)->getSpeed()."kph";
$data["RPM"] = $packet->getCarTelemetry($playerCar)->getEngineRPM()."kph";
}
if ($packet instanceof \AndyWaite\SimTelemetryParser\Game\F12020\Structs\PacketCarStatusData) {
$data["Fuel mix"] = $packet->getCarStatus($playerCar)->getFuelMix();
$data["Brake bias"] = $packet->getCarStatus($playerCar)->getFrontBrakeBias();
}
if ($packet instanceof \AndyWaite\SimTelemetryParser\Game\F12020\Structs\PacketMotionData) {
$data["Lateral G"] = $packet->getCarMotion($playerCar)->getGForceLateral();
$data["Lng G"] = $packet->getCarMotion($playerCar)->getGForceLongitudinal();
$data["Vert G"] = $packet->getCarMotion($playerCar)->getGForceVertical();
}
if ($packet instanceof \AndyWaite\SimTelemetryParser\Game\F12020\Structs\PacketSessionData) {
$data["Track"] = $packet->getTrackId();
}
if ($packet instanceof \AndyWaite\SimTelemetryParser\Game\F12020\Structs\PacketLapData) {
$data["Best lap"] = $packet->getCarLapData($playerCar)->getBestLapNum();
$data["Last lap"] = $packet->getCarLapData($playerCar)->getLastLapTime();
$data["Current lap"] = $packet->getCarLapData($playerCar)->getCurrentLapTime();
$data["Sector"] = $packet->getCarLapData($playerCar)->getSector();
$data["Position"] = $packet->getCarLapData($playerCar)->getCarPosition();
}
foreach ($data as $label => $value) {
echo "\n".$label.": ".$value;
}
} catch (\Throwable $e) {
echo "\n\n-------------";
echo "\n".$e->getMessage();
file_put_contents("error_buffer", $buffer);
}
}
socket_close($sock);