/** * Send all queued sync-objects */ public static function sendQueue() { // Get all LG_SYNC items, bail if none if (!($queue = LigminchaGlobalSync::select())) { return false; } // Make data streams for each target from the sync objects $streams = array(); $server = LigminchaGlobalServer::getCurrent()->id; $session = LigminchaGlobalSession::getCurrent() ? LigminchaGlobalSession::getCurrent()->id : 0; foreach ($queue as $sync) { $target = LigminchaGlobalServer::newFromId($sync->ref1)->id; if (array_key_exists($target, $streams)) { $streams[$target][] = $sync; } else { $streams[$target] = array(0, $server, $session, $sync); } } //print '<pre>'; print_r($streams); print '</pre>'; // Encode and send each stream foreach ($streams as $target => $stream) { // Get the target domain from it's tag $url = LigminchaGlobalServer::newFromId($target)->tag; // Zip up the data in JSON format // TODO: encrypt using shared secret or public key $data = self::encodeData($stream); // If we're standalone or the master, ensure no data is routed to the master, mark it as successful so the sync objects are cleared if (LigminchaGlobalServer::getCurrent()->isMaster && $url == LigminchaGlobalServer::masterDomain()) { $result = LG_SUCCESS; } else { $result = self::post($url, array(self::$cmd => $data)); } // If result is success, remove all sync objects destined for this target server if ($result == LG_SUCCESS) { LigminchaGlobalDistributed::del(array('type' => LG_SYNC, 'ref1' => $target), false, true); } else { die(lgDebug("Failed to post outgoing sync data to {$url} result({$result})")); } } return true; }