DJabberd::Cluster
void ->send_message($barejid, $cluster_message)
- most important
(has a default implementation that connects directly to everybody found in star topology)
(abstract) @locations = ->find_barejid_locations($barejid)
void ->send_message($barejid, $cluster_message)
(has a default implementation that connects directly, star topology)
DJabberd::Cluster::Naive
find_barejid_locations doing polling the star
or just send the message to all peers!
DJabberd::Cluster::LiveJournal
- override find_barejid_locations w/ database lookup (in subprocess/gearman)
- keep default start topology delivery
DJabberd::Cluster::Spread
- probably only does send_message, with $barejid being the message group
DJabberd::ClusterMessage (IQ-style tagged message/response)
-- must serialize itself to/from storable and Cluster's transport can choose to encode atop that.
DJabberd::ClusterMessage::RosterPush response = OK
DJabberd::ClusterMessage::BareJIDLookup response = @locations
DJabberd::ClusterMessage::StanzaDelivery response = OK
CREATE TABLE jidmap (
barejid VARCHAR,
resource VARCHAR,
PRIMARY KEY (barejid, resource),
server VARCHAR
);
# when logging off,
delete from jidmap where bare=..., res=..., and server=....; (delete all 3 fields)
# when logging on,
REPLACE INTO jidmap (..., ..., ...) (insert all three, blowing away)