--- trunk/lib/Frey/Server.pm 2008/06/30 07:06:11 34
+++ trunk/lib/Frey/Server.pm 2008/07/08 16:18:13 64
@@ -1,14 +1,15 @@
package Frey::Server;
-use strict;
-use warnings;
+use Moose;
use Continuity;
-use Continuity::REPL;
+#use Continuity::REPL;
+use Continuity::Widget::DomNode;
use Data::Dump qw/dump/;
-use base 'Frey';
-use Frey::HTML;
+use Frey;
+use Frey::Introspect;
+use Frey::ObjectBrowser;
my @messages; # Global (shared) list of messages
my $got_message; # Flag to indicate that there is a new message to display
@@ -16,60 +17,66 @@
use vars qw( $repl $server );
#$repl = Continuity::REPL->new;
-$server = Continuity->new(
- port => 16001,
- path_session => 1,
- cookie_session => 'sid',
- callback => \&main,
-);
-$server->debug_level( 2 );
-sub run {
+sub run {
+ $server = Continuity->new(
+ port => 16001,
+ path_session => 1,
+ cookie_session => 'sid',
+ callback => \&main,
+ debug_level => 1,
+ staticp => sub { $_[0]->url =~ m/\.(jpg|jpeg|gif|png|css|ico|js|html?)$/ },
+ );
$server->loop;
}
-my @callbacks;
-my $callback_count;
-
-sub gen_link {
- my ($text, $code) = @_;
- $callbacks[$callback_count++] = $code;
- return qq{$text};
-}
-
-sub process_links {
- my $request = shift;
- my $cb = $request->param('cb');
- if (exists $callbacks[$cb]) {
- $callbacks[$cb]->($request);
- delete $callbacks[$cb];
- }
-}
-
# This is the main entrypoint. We are looking for one of three things -- a
# pushstream, a sent message, or a request for the main HTML. We delegate each
# of these cases, none of which will return (they all loop forever).
sub main {
- my ($req) = @_;
+ my ($req) = @_;
- my $path = $req->request->url->path;
- warn "REQUEST: $path\n";
+ my $path = $req->request->url->path;
+ warn "REQUEST: $path\n";
warn $req->request->header('User_Agent');
#warn dump( $req );
- # If this is a request for the pushtream, then give them that
- if($path =~ /pushstream/) {
- pushstream($req);
- }
+ if ( $path =~ m!/~/([^/]+)(?:/([^/]*))?! ) {
+ my $f = Frey::Introspect->new( package => $1 );
+ $f->html( $req );
+ }
+
+ if ( $path =~ m!/ob/([^/]+)(?:/([^/]*))?! ) {
+ my $f = Frey::ObjectBrowser->new;
+ $f->html( $req );
+ }
+ # If this is a request for the pushtream, then give them that
+ if($path =~ /pushstream/) {
+ pushstream($req);
+ }
- # If they are sending us a message, we give them a thread for that too
- if($path =~ /sendmessage/) {
- send_message($req);
- }
+ # If they are sending us a message, we give them a thread for that too
+ if($path =~ /sendmessage/) {
+ send_message($req);
+ }
- # Otherwise, lets give them page
- send_page($req);
+ my $f = Frey->new;
+ my $classes = Continuity::Widget::DomNode->create(
+ ul => [
+ map {
+ warn dump( $_ );
+ my ( $package, $path ) = %$_;
+ ( li => [
+ a => { href => '/~/' . $package . '/' } => [ $package ],
+ ' ',
+ a => { href => '/ob/' . $package } => [ 'browse' ],
+ " $path"
+ ] )
+ } @{ $f->classes }
+ ],
+ )->to_string;
+ $req->print( $classes );
}
# Here we accept a connection to the browser, and keep it open. Meanwhile we
@@ -109,40 +116,4 @@
}
}
-# This isn't a pushstream, nor a new message. It is just the main page. We loop
-# in case they ask for it multiple times :)
-sub send_page {
- my ($req) = @_;
- my $templates = Template::Declare->templates;
- while(1) {
- warn "param = ",dump($req->param);
- my $path = $req->request->url->path;
-
- my $html;
-
- if ( $path =~ m/::/ ) {
- my ( undef, $module, $method ) = split(m!/!, $path, 3);
-
- if ( ! defined( $templates->{$module} ) ) {
- $req->conn->send_status_line( 404, "$module" );
- $html = "Package $module not found";
- } elsif ( ! $method ) {
- $html = Frey::HTML->page( 'package-methods', $req, $module );
- } elsif ( grep(/^\Q$method\E$/, @{ $templates->{$module} }) ) {
- $html = Frey::HTML->page( $method, $req );
- } else {
- $req->conn->send_status_line( 404, "$module $method" );
- $html = "Package $module doesn't have $method";
- }
- } else {
- warn "fallback to status page\n";
- $html = Frey::HTML->page( 'status' );
- }
-
- $req->print( $html );
- warn ">> ",length( $html ), " bytes\n";
- $req->next;
- }
-}
-
1;