]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Twitter streaming API reader: Cleanup input handling & split from HTTP headers to...
authorBrion Vibber <brion@pobox.com>
Tue, 5 Oct 2010 19:17:16 +0000 (12:17 -0700)
committerBrion Vibber <brion@pobox.com>
Tue, 5 Oct 2010 19:17:16 +0000 (12:17 -0700)
plugins/TwitterBridge/jsonstreamreader.php
plugins/TwitterBridge/twitterstreamreader.php

index ad8e2626ad15d48450ecbfe048968a1d7925ea06..898766357fb45cb96464b3f674157562fbcf51d0 100644 (file)
@@ -93,18 +93,24 @@ abstract class JsonStreamReader
         $this->state = 'waiting';
     }
 
+    /**
+     * Send some fun data off to the server.
+     *
+     * @param string $buffer
+     */
     function send($buffer)
     {
-        echo "Writing...\n";
-        var_dump($buffer);
         fwrite($this->socket, $buffer);
     }
 
+    /**
+     * Read next packet of data from the socket.
+     *
+     * @return string
+     */
     function read()
     {
-        echo "Reading...\n";
         $buffer = fread($this->socket, 65536);
-        var_dump($buffer);
         return $buffer;
     }
 
@@ -195,12 +201,16 @@ abstract class JsonStreamReader
     {
         $lines = explode(self::CRLF, $buffer);
         foreach ($lines as $line) {
-            if ($line == '') {
-                $this->state = 'active';
-                common_log(LOG_DEBUG, "$this->id connection is active!");
-            } else {
-                common_log(LOG_DEBUG, "$this->id read HTTP header: $line");
-                $this->responseHeaders[] = $line;
+            if ($this->state == 'headers') {
+                if ($line == '') {
+                    $this->state = 'active';
+                    common_log(LOG_DEBUG, "$this->id connection is active!");
+                } else {
+                    common_log(LOG_DEBUG, "$this->id read HTTP header: $line");
+                    $this->responseHeaders[] = $line;
+                }
+            } else if ($this->state == 'active') {
+                $this->handleLineActive($line);
             }
         }
     }
@@ -211,12 +221,21 @@ abstract class JsonStreamReader
         // Will we always deliver on packet boundaries?
         $lines = explode("\n", $buffer);
         foreach ($lines as $line) {
-            $data = json_decode($line, true);
-            if ($data) {
-                $this->handleJson($data);
-            } else {
-                common_log(LOG_ERR, "$this->id received bogus JSON data: " . $line);
-            }
+            $this->handleLineActive($line);
+        }
+    }
+
+    function handleLineActive($line)
+    {
+        if ($line == '') {
+            // Server sends empty lines as keepalive.
+            return;
+        }
+        $data = json_decode($line, true);
+        if ($data) {
+            $this->handleJson($data);
+        } else {
+            common_log(LOG_ERR, "$this->id received bogus JSON data: " . $line);
         }
     }
 
index e746228a38508a2cb23489cfa168cd5eb167fea6..d440bdd4efed3062d71f90fcd1ec1dd8d1b7180e 100644 (file)
@@ -94,11 +94,22 @@ abstract class TwitterStreamReader extends JsonStreamReader
 
     abstract function routeMessage($data);
 
-    function handleMessage($data, $forUserId=null)
+    /**
+     * Send the decoded JSON object out to any event listeners.
+     *
+     * @param array $data
+     * @param int $forUserId
+     */
+    function handleMessage(array $data, $forUserId=null)
     {
         $this->fireEvent('raw', $data, $forUserId);
-        $known = array('friends');
-        foreach ($known as $key) {
+
+        if (isset($data['id']) && isset($data['text']) && isset($data['user'])) {
+            $this->fireEvent('status', $data);
+        }
+
+        $knownMeta = array('friends', 'delete', 'scrubgeo', 'limit', 'event', 'direct_message');
+        foreach ($knownMeta as $key) {
             if (isset($data[$key])) {
                 $this->fireEvent($key, $data[$key], $forUserId);
             }