Allocating memory dynamically when writing XS routines: http://www.perlmonks.org/index.pl?node_id=240033
Example 2: Typical skeleton code
use Win32;
use Win32::Daemon;
$SERVICE_SLEEP_TIME = 20; # 20 milliseconds
$PrevState = SERVICE_START_PENDING;
while( SERVICE_STOPPED != ( $State = Win32::Daemon::State() ) )
{
if( SERVICE_START_PENDING == $State )
{
# Initialization code
Win32::Daemon::State( SERVICE_RUNNING );
$PrevState = SERVICE_RUNNING;
}
elseif( SERVICE_STOP_PENDING == $State )
{
Win32::Daemon::State( SERVICE_STOPPED );
}
elsif( SERVICE_PAUSE_PENDING == $State )
{
# "Pausing...";
Win32::Daemon::State( SERVICE_PAUSED );
$PrevState = SERVICE_PAUSED;
next;
}
elsif( SERVICE_CONTINUE_PENDING == $State )
{
# "Resuming...";
Win32::Daemon::State( SERVICE_RUNNING );
$PrevState = SERVICE_RUNNING;
next;
}
elsif( SERVICE_STOP_PENDING == $State )
{
# "Stopping...";
Win32::Daemon::State( SERVICE_STOPPED );
$PrevState = SERVICE_STOPPED;
next;
}
elsif( SERVICE_RUNNING == $State )
{
# The service is running as normal...
# ...add the main code here...
}
else
{
# Got an unhandled control message. Set the state to
# whatever the previous state was.
Win32::Daemon::State( $PrevState );
}
# Check for any outstanding commands. Pass in a non zero value
# and it resets the Last Message to SERVICE_CONTROL_NONE.
if( SERVICE_CONTROL_NONE != ( my $Message = Win32::Daemon::Que
+ryLastMessage( 1 ) ) )
{
if( SERVICE_CONTROL_INTERROGATE == $Message )
{
# Got here if the Service Control Manager is requesting
# the current state of the service. This can happen for
# a variety of reasons. Report the last state we set.
Win32::Daemon::State( $PrevState );
}
elsif( SERVICE_CONTROL_SHUTDOWN == $Message )
{
# Yikes! The system is shutting down. We had better clean up
# and stop.
# Tell the SCM that we are preparing to shutdown and that we
+ expect
# it to take 25 seconds (so don't terminate us for at least
+25 seconds)...
Win32::Daemon::State( SERVICE_STOP_PENDING, 25000 );
}
}
# Snooze for awhile so we don't suck up cpu time...
Win32::Sleep( $SERVICE_SLEEP_TIME );
}
# We are done so close down...
Win32::Daemon::StopService();
use SOAP::Transport::HTTP;
my $daemon = SOAP::Transport::HTTP::Daemon
-> new (LocalAddr => 'localhost', LocalPort => 82, Listen => 5
+, Reuse => 1)
-> dispatch_to('C:\\WINDOWS')
;
print "Contact to SOAP server at ", join(':', $daemon->sockhost, $da
+emon->sockport), "\n";
$daemon->handle;
ppm3
CPAN>rep add bribes http://www.bribes.org/perl/ppm # activestate was out of date compared to this one
CPAN>rep up bribes # move it to first place on list of repositories
CPAN>upgrade -install PAR
http://www.perlmonks.org/index.pl?node=Autogenerate%20Test%20Scripts
|