From 9b7bede19b4df2f62c8945ea9739332988c25f06 Mon Sep 17 00:00:00 2001 From: Jeroen De Meerleer Date: Fri, 18 Jan 2019 14:17:43 +0100 Subject: [PATCH] First reads of binary data --- src/Models/Sws.php | 26 +++++- src/Sws.php | 222 +++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 240 insertions(+), 8 deletions(-) diff --git a/src/Models/Sws.php b/src/Models/Sws.php index 3108d2e..84a0bca 100644 --- a/src/Models/Sws.php +++ b/src/Models/Sws.php @@ -32,10 +32,32 @@ class Sws } /** - * @param mixed $Tournament + * @param Tournament $Tournament */ - public function setTournament($Tournament) + public function setTournament(Tournament $Tournament): void { $this->Tournament = $Tournament; } + + /** + * Returns binary data from the sws-file + * + * @param string + * @return string + */ + public function getBinaryData(String $key) + { + return $this->BinaryData[$key]; + } + + /** + * Sets binary data + * + * @param string + * @param string + */ + public function setBinaryData(String $key, String $data): void + { + $this->BinaryData[$key] = $data; + } } diff --git a/src/Sws.php b/src/Sws.php index 6700475..281c61a 100644 --- a/src/Sws.php +++ b/src/Sws.php @@ -29,25 +29,235 @@ namespace JeroenED\Libpairtwo; use JeroenED\Libpairtwo\Models\Tournament; use JeroenED\Libpairtwo\Models\Sws as MyModel; - /** * This class reads a SWS file * * @author Jeroen De Meerleer */ -class Sws { - - +class Sws +{ + /** + * @param string $swsfile + * @return MyModel + */ public static function ReadSws(string $swsfile) { $swshandle = fopen($swsfile, 'rb'); + $swscontents = fread($swshandle, filesize($swsfile)); + fclose($swshandle); $sws = new MyModel(); - $sws->setRelease(fread($swshandle, 4)); + $offset = 0; + + + $length = 4; + $sws->setRelease(Self::ReadHexData(substr($swscontents, $offset, $length))); + $offset += $length; + $sws->setTournament(new Tournament()); + // UserCountry + $length = 4; + $sws->setBinaryData("UserCountry", Self::ReadHexData(substr($swscontents, $offset, $length))); + $offset += $length; + + // SavedOffset + $length = 4; + $sws->setBinaryData("SavedOffset", Self::ReadHexData(substr($swscontents, $offset, $length))); + $offset += $length; + + // NewPlayer + $length = 4; + $sws->setBinaryData("NewPlayer", hexdec(Self::ReadHexData(substr($swscontents, $offset, $length)))); + $offset += $length; + + // AmericanHandicap + $length = 4; + $sws->setBinaryData("AmericanHandicap", Self::ReadHexData(substr($swscontents, $offset, $length))); + $offset += $length; + + // LowOrder + $length = 4; + $sws->setBinaryData("LowOrder", Self::ReadHexData(substr($swscontents, $offset, $length))); + $offset += $length; + + // PairingMethod + $length = 4; + $sws->setBinaryData("PairingMethod", Self::ReadHexData(substr($swscontents, $offset, $length))); + $offset += $length; + + // AmericanPresence + $length = 4; + $sws->setBinaryData("AmericanPresence", Self::ReadHexData(substr($swscontents, $offset, $length))); + $offset += $length; + + // CheckSameClub + $length = 4; + $sws->setBinaryData("CheckSameClub", Self::ReadHexData(substr($swscontents, $offset, $length))); + $offset += $length; + + // NoColorCheck + $length = 4; + $sws->setBinaryData("NoColorCheck", Self::ReadHexData(substr($swscontents, $offset, $length))); + $offset += $length; + + // SeparateCategories + $length = 4; + $sws->setBinaryData("SeparateCategories", Self::ReadHexData(substr($swscontents, $offset, $length))); + $offset += $length; + + // EloUsed + $length = 4; + $sws->setBinaryData("EloUsed", Self::ReadHexData(substr($swscontents, $offset, $length))); + $offset += $length; + + // AlternateColors + $length = 4; + $sws->setBinaryData("AlternateColors", Self::ReadHexData(substr($swscontents, $offset, $length))); + $offset += $length; + + // MaxMeetings + $length = 4; + $sws->setBinaryData("MaxMeetings", Self::ReadHexData(substr($swscontents, $offset, $length))); + $offset += $length; + + // MaxDistance + $length = 4; + $sws->setBinaryData("MaxDistance", Self::ReadHexData(substr($swscontents, $offset, $length))); + $offset += $length; + + // MinimizeKeizer + $length = 4; + $sws->setBinaryData("MinimizeKeizer", Self::ReadHexData(substr($swscontents, $offset, $length))); + $offset += $length; + + // MinRoundsMeetings + $length = 4; + $sws->setBinaryData("MinRoundsMeetings", Self::ReadHexData(substr($swscontents, $offset, $length))); + $offset += $length; + + // MaxRoundsAbsent + $length = 4; + $sws->setBinaryData("MaxRoundsAbsent", Self::ReadHexData(substr($swscontents, $offset, $length))); + $offset += $length; + + // SpecialPoints + $length = 4 * 6; + $sws->setBinaryData("SpecialPoints", Self::ReadHexData(substr($swscontents, $offset, $length))); + $offset += $length; + + // NewNamePos + $length = 4; + $sws->setBinaryData("NewNamePos", hexdec(Self::ReadHexData(substr($swscontents, $offset, $length)))); + $offset += $length; + + // CurrentRound + $length = 4; + $sws->setBinaryData("CurrentRound", Self::ReadHexData(substr($swscontents, $offset, $length))); + $offset += $length; + + // CreatedRounds + $length = 4; + $sws->setBinaryData("CreatedRounds", Self::ReadHexData(substr($swscontents, $offset, $length))); + $offset += $length; + + // CreatedPlayers + $length = 4; + $sws->setBinaryData("CreatedPlayers", Self::ReadHexData(substr($swscontents, $offset, $length))); + $offset += $length; + + // MaxSelection + $length = 4; + $sws->setBinaryData("MaxSelection", Self::ReadHexData(substr($swscontents, $offset, $length))); + $offset += $length; + + // NumberOfRounds + $length = 4; + $sws->setBinaryData("NumberOfRounds", Self::ReadHexData(substr($swscontents, $offset, $length))); + $offset += $length; + + // NumberOfPairings + $length = 4; + $sws->setBinaryData("NumberOfPairings", Self::ReadHexData(substr($swscontents, $offset, $length))); + $offset += $length; + + // CreatedPairings + $length = 4; + $sws->setBinaryData("CreatedPairings", Self::ReadHexData(substr($swscontents, $offset, $length))); + $offset += $length; + + // PairingElems + $length = 4; + $sws->setBinaryData("PairingElems", Self::ReadHexData(substr($swscontents, $offset, $length))); + $offset += $length; + + // RandomSeed + $length = 4; + $sws->setBinaryData("RandomSeed", Self::ReadHexData(substr($swscontents, $offset, $length))); + $offset += $length; + + // TieOrder + $length = 4 * 5; + $sws->setBinaryData("TieOrder", Self::ReadHexData(substr($swscontents, $offset, $length))); + $offset += $length; + + // Categorie + $length = 4 * 10; + $sws->setBinaryData("Categorie", Self::ReadHexData(substr($swscontents, $offset, $length))); + $offset += $length; + + // ExtraPoints + $length = 4 * 20; + $sws->setBinaryData("ExtraPoints", Self::ReadHexData(substr($swscontents, $offset, $length))); + $offset += $length; + + // SelectP + $length = 4 * 20; + $sws->setBinaryData("SelectP", Self::ReadHexData(substr($swscontents, $offset, $length))); + $offset += $length; + + // Players + $length = 68 * $sws->getBinaryData("NewPlayer"); + $sws->setBinaryData("Players", substr($swscontents, $offset, $length)); + $offset += $length; + + // PlayerNames + $length = $sws->getBinaryData("NewNamePos"); + $sws->setBinaryData("PlayerNames", substr($swscontents, $offset, $length)); + $offset += $length; + + // TournamentName + $length = 80; + $sws->getTournament()->setName(substr($swscontents, $offset, $length)); + $offset += $length; + + // TournamentOrganiser + $length = 50; + $sws->getTournament()->setOrganiser(substr($swscontents, $offset, $length)); + $offset += $length; + + // TournamentTempo + $length = 50; + $sws->getTournament()->setTempo(substr($swscontents, $offset, $length)); + $offset += $length; + + // TournamentCountry + $length = 32; + $sws->getTournament()->setOrganiserCountry(substr($swscontents, $offset, $length)); + $offset += $length; + + // Arbiters + $length = 128; + $sws->getTournament()->setArbiter(substr($swscontents, $offset, $length)); + $offset += $length; + return $sws; - } + private static function ReadHexData(String $data) + { + $hex = implode(unpack("H*", $data)); + $hex = str_replace("00", "", $hex); + return $hex; + } }