From c4d67892751b17856b235182874c3304890dc2c3 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Fri, 29 Aug 2008 14:17:02 -0400 Subject: 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 --- lib/jabber.php | 39 +++++++++++++++++++++++---------------- lib/util.php | 8 +++++++- 2 files changed, 30 insertions(+), 17 deletions(-) (limited to 'lib') 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 = ""; if($subject) $out .= "$subject"; $out .= "$body"; if($payload) $out .= $payload; $out .= ""; - + $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 = "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\n"; $html .= "\n\n"; - + $event = "\n"; $event .= "\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; } -- cgit v1.2.3-54-g00ecf