diff --git a/lib/gxg-framework.rb b/lib/gxg-framework.rb index ab8e050..74e2269 100644 --- a/lib/gxg-framework.rb +++ b/lib/gxg-framework.rb @@ -411,15 +411,25 @@ unless load_error end # def new_message(*args) - if this.actor?() - ::GxG::Events::Message.new({:sender => this().to_uri(), :subject => args[1], :body => args[0]}) - else - ::GxG::Events::Message.new({:sender => this(), :subject => args[1], :body => args[0]}) + unless @uuid + @uuid = ::GxG::uuid_generate.to_s.to_sym + ::GxG::CHANNELS.create_channel(@uuid) end + ::GxG::Events::Message.new({:sender => @uuid, :subject => args[1], :body => args[0]}) end # public # + def defederate() + if @uuid + the_channel = ::GxG::CHANNELS.fetch_channel(@uuid) + if the_channel + ::GxG::CHANNELS.destroy_channel(@uuid) + end + end + true + end + # def millisecond_latency(*args,&block) if block starting = Time.now.to_f diff --git a/lib/gxg/gxg_events.rb b/lib/gxg/gxg_events.rb index 7b8e813..fcb7dab 100644 --- a/lib/gxg/gxg_events.rb +++ b/lib/gxg/gxg_events.rb @@ -3,6 +3,15 @@ module GxG # GXG_FEDERATION = {:title => "Untitled", :uuid => nil, :available => {}, :connections => {}} GXG_FEDERATION_SAFETY = Mutex.new + def self.federation_servers() + result = {} + ::GxG::GXG_FEDERATION_SAFETY.synchronize { + ::GxG::GXG_FEDERATION[:available].each_pair do |uuid, server| + result[(uuid.to_s.to_sym)] = server + end + } + result + end # module Messages class Channel @@ -112,9 +121,24 @@ module GxG channel.write(the_message) end result = true + else + end + else + if ::GxG::valud_uuid?(destination.to_s) + # TODO: search available federated servers for channel. ??? + ::GxG::federation_servers.each_pair do |the_uuid, the_server| + if the_server.call_event(:federation, {:channel_exist => (destination)})[:result] + the_server.call_event(:federation, {:operation => {:forward_message => (the_message.serialize)}}) + result = true + break + end + end + else + # + # email address -- TODO: integrate sendmail functionality in pure ruby. ::GxG::Networking::SmtpClient.new(::URI::parse("smtp://username:password@hostname.org:587"), {:use_ssl => true, :ignore_ssl_errors => true}) + # end end - # email address -- TODO: integrate sendmail functionality in pure ruby. ::GxG::Networking::SmtpClient.new(::URI::parse("smtp://username:password@hostname.org:587"), {:use_ssl => true, :ignore_ssl_errors => true}) # end result @@ -997,7 +1021,9 @@ class Object channel = ::GxG::CHANNELS.fetch_channel(@uuid) if channel channel.write(the_message) + true + else + false end - true end end \ No newline at end of file diff --git a/lib/gxg/net_clients.rb b/lib/gxg/net_clients.rb index e9a68dd..5476b53 100644 --- a/lib/gxg/net_clients.rb +++ b/lib/gxg/net_clients.rb @@ -3938,6 +3938,14 @@ module GxG result end # + def respond_to_event?(service, operation) + @clients[(service)].respond_to_event?(operation) + end + # + def call_event(service, operation_frame) + @clients[(service)].get(operation_frame) + end + # def login(username=nil, password=nil) # @services.keys.each do |service|