The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

XAS::Lib::Mixins::JSON::Server - A mixin for a simple JSON RPC server

SYNOPSIS

 package Echo;

 use POE;
 use XAS::Class
   debug   => 0,
   version => '0.01',
   base    => 'XAS::Lib::Net::Server'
   mixin   => 'XAS::Lib::Mixins::JSON::Server XAS::Lib::Mixins::Keepalive',
   vars => {
     PARAMS => {
       -port          => { optional => 1, default => 9500 },
       -tcp_keepalive => { optional => 1, default => 0 }
     }
   }
 ;

 sub handle_connection {
     my ($self, $wheel) = @_[OBJECT, ARG0];

     if (my $socket = $self->{clients}->{$wheel}->{socket}) {

         if ($self->tcp_keepalive) {

             $self->log->info("keepalive enabled");
             $self->init_keepalive();
             $self->enable_keepalive($socket);

         }

     }

 }

 sub echo {
     my ($self, $params, $ctx) = @_[OBJECT, ARGO, ARG1];

     my $alias = $self->alias;
     my $line  = $params->{line};

     $poe_kernel->post($alias, 'process_response', $line, $ctx);

 }

 sub init {
     my $class = shift;

     my $self = $class->SUPER::init(@_);
     my @methods = ['echo'];

     $self->init_json_server(\@methods);

     return $self;

 }

 package main;

     my $echo = Echo->new();

     $echo->run();

DESCRIPTION

This modules implements a simple JSON RPC v2.0 server as a mixin. It doesn't support "Notification" calls.

METHODS

init_json_server($methods)

This initializes the module.

$methods

An arrayref of methods that this server can process.

methods

A handle to a Set::Light object that contains the methods that can be evoked.

EVENTS

process_request(OBJECT, ARG0, ARG1)

process_response(OBJECT, ARG0, ARG1)

process_errors(OBJECT, ARG0, ARG1)

AUTHOR

Kevin L. Esteb, <kevin@kesteb.us>

COPYRIGHT AND LICENSE

Copyright (C) 2014 Kevin L. Esteb

This is free software; you can redistribute it and/or modify it under the terms of the Artistic License 2.0. For details, see the full text of the license at http://www.perlfoundation.org/artistic_license_2_0.