/**
  * Watch for incoming data.
  *
  * @param Connection $connection
  */
 private function handleSocketEvents(Connection $connection)
 {
     $buffer = '';
     $connection->getSocket()->on('data', function ($data) use(&$buffer, $connection) {
         $buffer .= $data;
         while (($newlinePosition = strpos($buffer, "\n")) !== false) {
             $jsonMessage = substr($buffer, 0, $newlinePosition);
             $buffer = substr($buffer, $newlinePosition + 1);
             try {
                 $connection->setLastMessageReceivedAt(new \DateTime());
                 $message = $this->deserializer->deserialize(\Blackjack\json_parse($jsonMessage));
                 $connection->notify($message);
             } catch (\Exception $e) {
                 // Invalid message
                 $connection->getSocket()->write(json_encode(['alias' => 'invalid_message']));
                 $connection->getSocket()->close();
                 return;
             }
         }
         // Limit buffer to 1 MB
         $bufferSizeLimit = 1024 * 1024;
         if (strlen($buffer) > $bufferSizeLimit) {
             $buffer = substr($buffer, strlen($buffer) - $bufferSizeLimit);
         }
     });
     $connection->getSocket()->on('close', function () use($connection) {
         $this->handlePlayerDisconnection($connection);
     });
 }