diff options
author | Evan Prodromou <evan@prodromou.name> | 2008-08-29 14:17:02 -0400 |
---|---|---|
committer | Evan Prodromou <evan@prodromou.name> | 2008-08-29 14:17:02 -0400 |
commit | c4d67892751b17856b235182874c3304890dc2c3 (patch) | |
tree | b31fa8766cfaa2e906cf19862af5bfa50390e6cd /lib | |
parent | f652418863182182bb17e0f378194a8648392410 (diff) |
split public stream to its own queue handler
Add another queue handler for the public stream. Should further
parallelize the work of sending out messages.
darcs-hash:20080829181702-84dde-594505aa73d2380b13bd98917b70b02bac597d12.gz
Diffstat (limited to 'lib')
-rw-r--r-- | lib/jabber.php | 39 | ||||
-rw-r--r-- | lib/util.php | 8 |
2 files changed, 30 insertions, 17 deletions
diff --git a/lib/jabber.php b/lib/jabber.php index 215cd5537..171dff4df 100644 --- a/lib/jabber.php +++ b/lib/jabber.php @@ -24,32 +24,32 @@ require_once('XMPPHP/XMPP.php'); # XXX: something of a hack to work around problems with the XMPPHP lib class Laconica_XMPP extends XMPPHP_XMPP { - + function messageplus($to, $body, $type = 'chat', $subject = null, $payload = null) { $to = htmlspecialchars($to); $body = htmlspecialchars($body); $subject = htmlspecialchars($subject); - + $jid = jabber_daemon_address(); - + $out = "<message from='$jid' to='$to' type='$type'>"; if($subject) $out .= "<subject>$subject</subject>"; $out .= "<body>$body</body>"; if($payload) $out .= $payload; $out .= "</message>"; - + $cnt = strlen($out); common_log(LOG_DEBUG, "Sending $cnt chars to $to"); $this->send($out); common_log(LOG_DEBUG, 'Done.'); } - + public function presence($status = null, $show = 'available', $to = null, $type='available', $priority=NULL) { if($type == 'available') $type = ''; $to = htmlspecialchars($to); $status = htmlspecialchars($status); if($show == 'unavailable') $type = 'unavailable'; - + $out = "<presence"; if($to) $out .= " to='$to'"; if($type) $out .= " type='$type'"; @@ -62,7 +62,7 @@ class Laconica_XMPP extends XMPPHP_XMPP { if(!is_null($priority)) $out .= "<priority>$priority</priority>"; $out .= "</presence>"; } - + $this->send($out); } } @@ -105,7 +105,7 @@ function jabber_connect($resource=NULL, $status=NULL, $priority=NULL) { ); $conn->autoSubscribe(); $conn->useEncryption(common_config('xmpp', 'encryption')); - + if (!$conn) { return false; } @@ -141,7 +141,7 @@ function jabber_send_notice($to, $notice) { # Extra stuff defined by Twitter, needed by twitter clients function jabber_format_entry($profile, $notice) { - + $noticeurl = common_local_url('shownotice', array('notice' => $notice->id)); $msg = jabber_format_notice($profile, $notice); @@ -167,7 +167,7 @@ function jabber_format_entry($profile, $notice) { $html .= ($notice->rendered) ? $notice->rendered : common_render_content($notice->content, $notice); $html .= "\n</body>\n"; $html .= "\n</html>\n"; - + $event = "<event xmlns='http://jabber.org/protocol/pubsub#event'>\n"; $event .= "<items xmlns='http://jabber.org/protocol/pubsub' "; $event .= "node='" . common_local_url('public') . "'>\n"; @@ -229,6 +229,7 @@ function jabber_special_presence($type, $to=NULL, $show=NULL, $status=NULL) { } function jabber_broadcast_notice($notice) { + if (!common_config('xmpp', 'enabled')) { return true; } @@ -268,7 +269,7 @@ function jabber_broadcast_notice($notice) { # XXX: use a join here rather than looping through results $sub = new Subscription(); $sub->subscribed = $notice->profile_id; - + if ($sub->find()) { while ($sub->fetch()) { $user = User::staticGet($sub->subscriber); @@ -289,14 +290,20 @@ function jabber_broadcast_notice($notice) { } } } + + return true; +} + +function jabber_public_notice($notice) { # Now, users who want everything - + $public = common_config('xmpp', 'public'); - + # FIXME PRIV don't send out private messages here - # XXX: should we send out non-local messages if public,localonly = false? I think not - + # XXX: should we send out non-local messages if public,localonly + # = false? I think not + if ($public && $notice->is_local) { foreach ($public as $address) { common_log(LOG_INFO, @@ -305,7 +312,7 @@ function jabber_broadcast_notice($notice) { jabber_send_notice($address, $notice); } } - + return true; } diff --git a/lib/util.php b/lib/util.php index 496c6f3d2..c6cdfbcb9 100644 --- a/lib/util.php +++ b/lib/util.php @@ -1070,7 +1070,7 @@ function common_broadcast_notice($notice, $remote=false) { # Stick the notice on the queue function common_enqueue_notice($notice) { - foreach (array('jabber', 'omb', 'sms') as $transport) { + foreach (array('jabber', 'omb', 'sms', 'public') as $transport) { $qi = new Queue_item(); $qi->notice_id = $notice->id; $qi->transport = $transport; @@ -1126,6 +1126,12 @@ function common_real_broadcast($notice, $remote=false) { common_log(LOG_ERR, 'Error in sms broadcast for notice ' . $notice->id); } } + if ($success) { + $success = jabber_public_notice($notice); + if (!$success) { + common_log(LOG_ERR, 'Error in public broadcast for notice ' . $notice->id); + } + } // XXX: broadcast notices to other IM return $success; } |