root/lang/perl/misc/typester-shibuyapm-8-psp/ppserver.pl

Revision 342, 1.9 kB (checked in by typester, 4 years ago)

パワポバージョン

Line 
1#!/usr/bin/env perl
2
3use strict;
4use warnings;
5
6{
7    package Server;
8    use POE qw/Component::Server::HTTP/;
9    use base qw/Class::Accessor::Fast/;
10
11    use Win32::OLE;
12
13    sub new {
14        my $self = shift->SUPER::new( @_ > 1 ? {@_} : $_[0] );
15    }
16
17    sub run {
18        my $self = shift;
19
20        POE::Session->create(
21            object_states => [
22                $self => [qw/_start/],
23            ],
24        );
25        POE::Kernel->run;
26    }
27
28    sub _start {
29        my ($self, $kernel) = @_[OBJECT, KERNEL];
30
31        $kernel->alias_set('main');
32        POE::Component::Server::HTTP->new(
33            Port           => $self->{port},
34            ContentHandler => {
35                '/key/' => \&handle_key,
36                '/'     => \&handle_root,
37            },
38        );
39    }
40
41    sub handle_root {
42        my ($req, $res) = @_;
43        $res->code(200);
44
45        open my $fh, '<', 'psp.swf';
46        my $swf = do { local $/; <$fh> };
47        close $fh;
48
49        $res->content_type('application/x-shockwave-flash');
50        $res->content($swf);
51        return 200;
52    }
53
54    sub handle_key {
55        my ($req, $res) = @_;
56        $res->code(200);
57
58        my $app = Win32::OLE->GetActiveObject('PowerPoint.Application');
59        unless (defined $app) {
60            $app = Win32::OLE->new('PowerPoint.Application')
61                or die Win32::OLE->LastError;
62        }
63
64        my ($key) = $req->uri =~ m!key/(\d+)!;
65        my $view = $app->ActivePresentation->SlideShowSettings->Run->View or die Win32::OLE->LastError;
66
67        if ($key eq '37') {
68            $view->Previous;
69        }
70        elsif ($key eq '38') {
71        }
72        elsif ($key eq '39') {
73            $view->Next;
74        }
75        elsif ($key eq '40') {
76        }
77
78        $res->code(200);
79        $res->content( $view->CurrentShowPosition );
80    }
81}
82
83my $server = new Server->new( port => 80 );
84$server->run;
85
86
87
Note: See TracBrowser for help on using the browser.