<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -1,27 +1,37 @@
 package App::Rasputine;
 
-use warnings;
-use strict;
-use base qw( Mojo::Base );
+use Moose;
 use AnyEvent;
-use App::Rasputine::XMPP;
-use App::Rasputine::Session;
-use Params::Validate qw( :all );
+use App::Rasputine::XMPP::Component;
 
-our $VERSION = '0.01';
+our $VERSION = '0.9';
 
-##########################
-# Configuration attributes
+has xmpp_component =&gt; (
+  isa =&gt; 'App::Rasputine::XMPP::Component',
+  is  =&gt; 'rw',
+);
 
-__PACKAGE__-&gt;attr('xmpp',     chained =&gt; 1, default =&gt; {});
-__PACKAGE__-&gt;attr('services', chained =&gt; 1, default =&gt; {});
+&lt;&lt;&lt;&lt;&lt;&lt;&lt; Updated upstream:App-Rasputine/lib/App/Rasputine.pm
+__PACKAGE__-&gt;attr('xmpp',     chained =&gt; 1);
+__PACKAGE__-&gt;attr('services', chained =&gt; 1);
+=======
+has config =&gt; (
+  isa =&gt; 'HashRef',
+  is  =&gt; 'rw',
+  default =&gt;  sub { {} }, 
+);
+&gt;&gt;&gt;&gt;&gt;&gt;&gt; Stashed changes:App-Rasputine/lib/App/Rasputine.pm
 
-__PACKAGE__-&gt;attr('xmpp_gw');
+has keep_alive =&gt; (
+  isa =&gt; 'Object',
+  is  =&gt; 'rw',
+);
 
 
-################
-# Service access
+###############
+# Start the App
 
+&lt;&lt;&lt;&lt;&lt;&lt;&lt; Updated upstream:App-Rasputine/lib/App/Rasputine.pm
 sub service {
   my ($self, $service) = @_;
   my $srvs = $self-&gt;services;
@@ -41,7 +51,7 @@ sub is_valid_service {
 #################
 # Session manager
 
-__PACKAGE__-&gt;attr('sessions', default =&gt; {});
+__PACKAGE__-&gt;attr('sessions');
 
 sub session_for {
   my $self = shift;
@@ -60,149 +70,28 @@ sub session_for {
   $user_session = $self-&gt;start_session(%args)
     unless $user_session;
   
+  ## Don't forget to save the new session!!
+  $self-&gt;sessions($sessions);
   return $user_session;
 }
 
 sub start_session {
+=======
+sub start {
+&gt;&gt;&gt;&gt;&gt;&gt;&gt; Stashed changes:App-Rasputine/lib/App/Rasputine.pm
   my $self = shift;
-  my $sessions = $self-&gt;sessions;
-  my %args = validate(@_, {
-    service =&gt; { type =&gt; SCALAR }, 
-    user    =&gt; { type =&gt; SCALAR }, 
-    via     =&gt; { type =&gt; SCALAR }, 
-  });
-
-  my $valid_services = $self-&gt;services;
-  return 'service_not_found' unless exists $valid_services-&gt;{$args{service}};
-  my $srv = $valid_services-&gt;{$args{service}};
-  
-  my $sess = $sessions-&gt;{$args{user}}{$args{service}} = App::Rasputine::Session-&gt;new({
-    %args,
-    ras =&gt; $self,
-    filters =&gt; ($srv-&gt;{filters} || []),
-  });
-  $sess-&gt;start if $sess;
-  
-  return $sess;
-}
-
-
-#########################
-# Deal with user presence
-
-sub user_offline {
-  my $self = shift;
-  my %args = validate(@_, {
-    service =&gt; { type =&gt; SCALAR }, 
-    user    =&gt; { type =&gt; SCALAR }, 
-    via     =&gt; { type =&gt; SCALAR }, 
-  });
-  
-  my $user_session = $self-&gt;session_for(%args);
-  return $user_session unless ref($user_session);
-  
-  return $user_session-&gt;disconnect();
-}
-
-sub service_state {
-  my $self = shift;
-  my %args = validate(@_, {
-    service =&gt; { type =&gt; SCALAR }, 
-    user    =&gt; { type =&gt; SCALAR }, 
-    via     =&gt; { type =&gt; SCALAR }, 
-    state   =&gt; { type =&gt; SCALAR }, 
-  });
-
-  $self-&gt;xmpp_gw-&gt;service_state(%args);
-  
-  return;
-}
-
-
-###################
-# Welcome new users
-
-sub welcome_user {
-  my $self = shift;
-  my %args = validate(@_, {
-    service =&gt; { type =&gt; SCALAR }, 
-    user    =&gt; { type =&gt; SCALAR }, 
-    via     =&gt; { type =&gt; SCALAR }, 
-  });
-
-  my $user_session = $self-&gt;session_for(%args);
-  return $user_session unless ref($user_session);
   
-  return $user_session-&gt;welcome_user();
-}
-
-
-##########
-# Messages
-
-sub message_to_world {
-  my $self = shift;
-  my %args = validate(@_, {
-    service =&gt; { type =&gt; SCALAR }, 
-    user    =&gt; { type =&gt; SCALAR }, 
-    mesg    =&gt; { type =&gt; SCALAR }, 
-    via     =&gt; { type =&gt; SCALAR }, 
-    gateway =&gt; { type =&gt; SCALAR }, 
+  # Start the XMPP component
+  my $xmpp = App::Rasputine::XMPP::Component-&gt;new({
+    app =&gt; $self,
   });
+  $xmpp-&gt;connect;
+  $self-&gt;xmpp_component($xmpp);
   
-  my $user_session = $self-&gt;session_for({
-    service =&gt; $args{service},
-    user    =&gt; $args{user},
-    via     =&gt; $args{via},
-  });
-  return $user_session unless ref($user_session);
-
-  return $user_session-&gt;message_out({
-    mesg    =&gt; $args{mesg},
-    via     =&gt; $args{via},
-    gateway =&gt; $args{gateway},
-  });
-}
-
-sub message_to_user {
-  my $self = shift;
-  my %args = validate(@_, {
-    service =&gt; { type =&gt; SCALAR },
-    user    =&gt; { type =&gt; SCALAR }, 
-    mesg    =&gt; { type =&gt; SCALAR },
-    via     =&gt; { type =&gt; SCALAR }, 
-    gateway =&gt; { type =&gt; SCALAR }, 
-  });
-  
-  return $self-&gt;xmpp_gw-&gt;message_out(%args);
-}
-
-
-################
-# Start it up...
-
-__PACKAGE__-&gt;attr('alive', chained =&gt; 1);
-
-sub run {
-  my $self = shift;
-  
-  $self-&gt;start_xmpp_connection;
-  
-  my $alive = AnyEvent-&gt;condvar;
-  $self-&gt;alive($alive);
-  
-  $alive-&gt;recv;
-  
-  return;
-}
-
-sub start_xmpp_connection {
-  my $self = shift;
-  
-  my $xmpp_gw = App::Rasputine::XMPP-&gt;new({ ras =&gt; $self });
-  $xmpp_gw-&gt;start;
-
-  $self-&gt;xmpp_gw($xmpp_gw);
+  # Keep the server alive
+  my $keep_alive = AnyEvent-&gt;condvar;
+  $self-&gt;keep_alive($keep_alive);
+  $keep_alive-&gt;recv;
   
   return;
 }</diff>
      <filename>App-Rasputine/lib/App/Rasputine.pm</filename>
    </modified>
    <modified>
      <diff>@@ -18,7 +18,7 @@ __PACKAGE__-&gt;attr('via');
 __PACKAGE__-&gt;attr('world');
 __PACKAGE__-&gt;attr('ras');
 
-__PACKAGE__-&gt;attr('filters', default =&gt; []);
+__PACKAGE__-&gt;attr('filters');
 
 __PACKAGE__-&gt;attr('state', default =&gt; 'start');
 </diff>
      <filename>App-Rasputine/lib/App/Rasputine/Session.pm</filename>
    </modified>
    <modified>
      <diff>@@ -14,8 +14,8 @@ our $VERSION = '0.1';
 
 __PACKAGE__-&gt;attr('ras', chained =&gt; 1);
 __PACKAGE__-&gt;attr('conn', chained =&gt; 1);
-__PACKAGE__-&gt;attr('resources', default =&gt; {});
-__PACKAGE__-&gt;attr('namespace_map', default =&gt; {});
+__PACKAGE__-&gt;attr('resources');
+__PACKAGE__-&gt;attr('namespace_map');
 
 #####################
 # Presence processing</diff>
      <filename>App-Rasputine/lib/App/Rasputine/XMPP.pm</filename>
    </modified>
    <modified>
      <diff>@@ -36,8 +36,8 @@ my $config = (%{$cfgs-&gt;[0]})[1];
 ############################
 # Start the Rasputine server
 
-my $ras = App::Rasputine-&gt;new($config);
-$ras-&gt;run;
+my $ras = App::Rasputine-&gt;new({ config =&gt; $config });
+$ras-&gt;start;
 
 exit(0);
 </diff>
      <filename>App-Rasputine/script/rasputine</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>d6e1723ac21f3bf892459b4107cb42a3b32e69dc</id>
    </parent>
  </parents>
  <author>
    <name>Sean McCreary</name>
    <email>mccreary@mcwest.org</email>
  </author>
  <url>http://github.com/melo/rasputine/commit/7531ca5488e9de3b459cee2bb642e102087bb773</url>
  <id>7531ca5488e9de3b459cee2bb642e102087bb773</id>
  <committed-date>2009-02-27T12:54:38-08:00</committed-date>
  <authored-date>2009-02-27T12:54:38-08:00</authored-date>
  <message>Fixed defaults to work with Mojo 0.9002

Signed-off-by: Sean McCreary &lt;mccreary@mcwest.org&gt;
Acked-by: Pedro Melo &lt;melo@simplicidade.org&gt;</message>
  <tree>047347d6fb46cf719728b97bf1ed09dcea743401</tree>
  <committer>
    <name>Pedro Melo</name>
    <email>melo@simplicidade.org</email>
  </committer>
</commit>
