View in color | License | Download script | History |
30-Apr 16:26 UTC
[0.056] 13.558k
[0.056] 13.558k
rugby-console.rREBOL [
Title: "The rugby mobile code console"
Date: 22-Aug-2001/14:14:44+2:00
Version: 1.0.0
File: %rugby-console.r
Author: "maarten koopmans"
Purpose: "A P2P console for Rebol/Rugby"
Comment: {
An example of a very simple console emulator that integrates with a rugby server.
Original console emulator by Jeff Kreis on the mailing list.
No fancy stuff such as auto-complete, arrows, or tabs (all throw errors).
The console is started with the rugby server that exposes one function
'do-block. This allows remote execution on a running console!
You can add functions and remove functions with expose-function and hide-function.
Exposed? gives a list of all currently exposed functions.
restrict-to restricts acces to a given block of IP numbers
no-restrict drops all restrictions.
refresh-stubs regenerates the stubs that other clients can import. Don't forget to call
this after expose-function o hide-function
Type ? for any of these commands to get a more detailed overview.
}
Email: %m--koopmans2--chello--nl
TODO: { - Add a real console emulator! Anyone???
- Integrate with p2p presence provider on reboltech a la RIM, to provide a world wide console}
library: [
level: 'advanced
platform: 'all
type: 'Tool
domain: [ldc other-net tcp]
tested-under: none
support: none
license: none
see-also: none
]
]
do read http://www.reboltech.com/library/scripts/rugby4.r
ctx-console: context
[
cursor: func [parm [string!]][join "^(1B)[" parm]
buf: copy ""
con: open/binary/direct [
scheme: 'console
awake: func [port /local c r][
prin c: to-char first port
either find "^M^J" c [
either error? set/any 'r try [ do buf ]
[
print mold disarm r
]
[
if value? 'r
[ print [newline "==" copy/part mold get/any 'r 20 " ... "]]
]
prin ">> "
clear buf
][
;-- basic editing
either c = #"^h" [
prin [ cursor "P" ]
remove back tail buf
][append buf c]
]
;if find c "^[[B" [prin "curs detected"]
]
]
]
print ">> Press a key 4 the console. No history, tabs, or arrows implemented. "
print ">> Welcome to the P2P Rebol console, by %m--koopmans2--chello--nl"
prin ">> "
append system/ports/wait-list ctx-console/con
expose-function: func [{Expose a function as a service} w [word!]]
[
append rugby-server/exec-env w
]
hide-function: func [ {Remove a service} w [word!]]
[
until
[
either found? find rugby-server/exec-env w
[
remove find rugby-server/exec-env w
false
]
[
true
]
]
]
exposed?: func [{Returns a list of exposed functions.}] [ return copy rugby-server/exec-env ]
set/any 'restrict-to get in rugby-server 'restrict-to
no-restrict: func [{Allow anyone to connect}] [ rugby-server/restrict: no ]
;Set the security settings!!!
secure [net allow file [allow read ask write ask execute]]
do-block: func [ b [block!] ] [ do b ]
refresh-stubs: func
[
{Refreshes our stubs, used by other clients get-rugby-service}
/with port-spec [url!] {The port we listening on, if different than tcp://:8001 (the default)}
/secure
/local dest
]
[
either with
[
dest: make port! port-spec
]
[
dest: make port! tcp://:8001
]
either secure
[
; Build the stubs and store them in our object variable.
rugby-server/stubs: rugby-server/build-stubs/with exposed? dest
]
[
; Build the stubs and store them in our object variable.
rugby-server/stubs: rugby-server/build-stubs/insecure/with exposed? dest
]
]
serve [do-block] Notes
|