class rpc-server
Overview
This class provides a rpc server. It is initialized with a port number <port> and a login provider <_login-provider>. The login provider is a function of 3 arguments: (lambda (user pass chalenge) ...)
. The login provider must determine if the given user <user> can login with the given password <pass>, given the given <chalenge>. It must return #f, if the user cannot login and a symbol indicating the autorisation context otherwise.
Example
(require (planet "roos.scm" ("oesterholt" "roos.plt" 1 0))) (require "mzrpc.scm") ;; define an function that can becalled over rpc (rpc-define (plus (a number?) (b number?)) (+ a b)) ;; define an overridden class for rpc-server. (def-class (this (my-rpc-server . args)) (supers (apply rpc-server args)) (private (define _clients (make-hash-table)) (define (notifier c i) (sleep 1) (-> c notify-client i) (notifier c (+ i 1))) ) (public (define (client-handler-started client) (display "client-handler-started called\n") (hash-table-put! _clients client (thread (lambda () (notifier client 0))))) (define (client-handler-ended client) (display "client-handler-ended called\n") (let ((t (hash-table-get _clients client))) (kill-thread t))) ) (constructor) ) ;; Define and call the server. (define S (my-rpc-server 4002 (lambda (user pass chalenge) 'admin))) (-> S run)
Public members
(add levels . rpc-functions)
Adds the given rpc-functions, which have been defined using rpc-define
to this server.
(run)
Run this server. It will start handling clients.
(client-handler-started client)
This function can be overridden. It is called when a client connects with the client object that handles the client.
(client-handler-ended client)
This function can be overridden. It is called when a client disconnects with the client object that handles the client.