Exemplo n.º 1
0
 /**
  * @see \Simresults\Data_Reader::readSessions()
  */
 protected function readSessions()
 {
     $sessions = array();
     // Session data to re-use on next sessions. Must be collected in the
     // first raw session data (header sections)
     $initial_session = null;
     // Loop each session
     foreach ($this->array_data as $data) {
         // Has initial session state
         $session = null;
         if ($initial_session) {
             $session = clone $initial_session;
         } else {
             // Create new session instance
             $session = Session::createInstance();
             // Get date from human string when available
             if (isset($data['header']['timestring'])) {
                 // WARNING: Default timezone used. Please note that this is not correct.
                 // The date is the date of the server, but we will never know the
                 // timezone because the data does not provide a timestamp or timezone
                 // information
                 if ($date = \DateTime::createFromFormat('Y/m/d H:i:s', $data['header']['timestring'], new \DateTimeZone(self::$default_timezone))) {
                     $date->setTimezone(new \DateTimeZone(self::$default_timezone));
                     $session->setDate($date);
                 }
             }
             //--- Set game
             $game = new Game();
             $game->setName($data['header']['game'])->setVersion($data['header']['version']);
             $session->setGame($game);
             //--- Set server (we do not know...)
             $server = new Server();
             $server->setName('Unknown or offline');
             $session->setServer($server);
             //--- Set track
             $track = new Track();
             // Has race data
             if (isset($data['race'])) {
                 // Matches track data with file based name
                 // (e.g. Scene=GameData\Locations\Monza_2007\2007_Monza.TRK)
                 if (preg_match('/^.*\\\\(.*)\\\\(.*)\\..*$/i', $data['race']['scene'], $track_matches)) {
                     // Set track values and set to session
                     $track->setVenue($track_matches[1])->setCourse($track_matches[2]);
                 } else {
                     $track->setVenue($data['race']['scene']);
                 }
                 $track->setLength((double) $data['race']['track length']);
                 $session->setTrack($track);
             }
             // Remember this initial session state for all coming next
             // sessions
             $initial_session = clone $session;
         }
         // Get participants
         $this->setParticipantsAndSessionType($session, $data);
         // No participants, skip this session
         if (!$session->getParticipants()) {
             continue;
         }
         $sessions[] = $session;
     }
     return $sessions;
 }
Exemplo n.º 2
0
 /**
  * @see \Simresults\Data_Reader::getSessions()
  */
 public function getSessions()
 {
     $sessions = array();
     // Session data to re-use on next sessions. Must be collected in the
     // first raw session data (header sections)
     $initial_session = null;
     // Loop each session
     foreach ($this->array_data as $data) {
         // Has initial session state
         $session = null;
         if ($initial_session) {
             $session = clone $initial_session;
         } else {
             // Create new session instance
             $session = new Session();
             // Get date from human string when available
             if (isset($data['header']['timestring'])) {
                 // WARNING: Default timezone used. Please note that this is not correct.
                 // The date is the date of the server, but we will never know the
                 // timezone because the data does not provide a timestamp or timezone
                 // information
                 if ($date = \DateTime::createFromFormat('Y/m/d H:i:s', $data['header']['timestring'], new \DateTimeZone(self::$default_timezone))) {
                     $date->setTimezone(new \DateTimeZone(self::$default_timezone));
                     $session->setDate($date);
                 }
             }
             //--- Set game
             $game = new Game();
             $game->setName($data['header']['game'])->setVersion($data['header']['version']);
             $session->setGame($game);
             //--- Set server (we do not know...)
             $server = new Server();
             $server->setName('Unknown or offline');
             $session->setServer($server);
             //--- Set track
             $track = new Track();
             // Has race data
             if (isset($data['race'])) {
                 // Matches track data with file based name
                 // (e.g. Scene=GameData\Locations\Monza_2007\2007_Monza.TRK)
                 if (preg_match('/^.*\\\\(.*)\\\\(.*)\\..*$/i', $data['race']['scene'], $track_matches)) {
                     // Set track values and set to session
                     $track->setVenue($track_matches[1])->setCourse($track_matches[2]);
                 } else {
                     $track->setVenue($data['race']['scene']);
                 }
                 $track->setLength((double) $data['race']['track length']);
                 $session->setTrack($track);
             }
             // Remember this initial session state for all coming next
             // sessions
             $initial_session = clone $session;
         }
         // Get participants
         $this->setParticipantsAndSessionType($session, $data);
         // No participants, skip this session
         if (!$session->getParticipants()) {
             continue;
         }
         // Fix driver positions for laps
         $session_lasted_laps = $session->getLastedLaps();
         // Loop each lap number, beginning from 2 because lap 1 has grid
         // position
         for ($i = 2; $i <= $session_lasted_laps; $i++) {
             // Get laps sorted by elapsed time
             $laps_sorted = $session->getLapsByLapNumberSortedByTime($i);
             // Sort laps by elapsed time
             $laps_sorted = Helper::sortLapsByElapsedTime($laps_sorted);
             // Loop each lap and fix position data
             foreach ($laps_sorted as $lap_key => $lap) {
                 // Only fix position if lap has a time, this way users of this
                 // library can easier detect whether it's a dummy lap and
                 // decide how to show them
                 if ($lap->getTime() or $lap->getElapsedSeconds()) {
                     $lap->setPosition($lap_key + 1);
                 }
             }
         }
         $sessions[] = $session;
     }
     return $sessions;
 }