Table of Contents

NeoDPClient
NeoSharedObject
RcmpClient
neodp_remote_attach_object
neodp_remote_detach_object
neodp_remote_hello


[next] [TOC]

Command

NeoDPClient - an [incr tcl] class

Synopsis

NeoDPClient object

inherits

object hello
object attach_object objType objName
object detach_object objType objName
object connect host port

Description

#@package: NeoDPClient NeoDPClient
#
# NeoSoft Internet-distributed-database client
#
# $Id: rcmp.html,v 1.1.1.1 1999/03/31 20:34:37 damon Exp $
#
#




    method hello {} {
	dp_RPC $serverFP neodp_remote_hello
    }

    method attach_object {objType objName} {
	dp_RPC $serverFP neodp_remote_attach_object $objType $objName
    }

    method detach_object {objType objName} {
	dp_RPC $serverFP neodp_remote_detach_object $objType $objName
    }

    method connect {host port} {
	set serverFP [dp_MakeRPCClient $host $port]

	hello
    }

    protected serverFP

[next] [prev] [TOC]

Command

NeoSharedObject - an [incr tcl] class

Synopsis

NeoSharedObject object -defaultValues something -currentValues something

inherits

object configure args
object slot-value key
object destroy
object create-slot slotName defaultValue
object setf slot value
object getf slot
object lappendf slot value

Description

#@package: NeoSharedObject NeoSharedObject
#
# NeoSharedObject - incr tcl class library to create objects
# capable of being distributed as distribued objects under
# Tcl-DP
#
# $Id: rcmp.html,v 1.1.1.1 1999/03/31 20:34:37 damon Exp $
#




    # The constructor takes as optional arguments an arbitrary number
    # of "-key value" pairs.  These are created as slots which
    # will be distributed and maintained as a shared object across
    # all of the programs on the net that have attached the
    # object.
    #
    # This format is specified by tcl-dp.
    #
    constructor {args} {
	while {[llength $args] > 1} {
	    set args [lassign $args key value]
	    set key [string trimleft $key -]
	    create-slot $key $value
	}
	return ""
    }

    destructor {
    }

    # configure is required by tcl-dp.
    # configure with no args lists all slots as "-key initial current"
    # triples.  With one argument, it returns the value associated with
    # the specified slot.  With more than two arguments, they are
    # key-value pairs to be set into the specified slots.
    #
    method configure {args} {
	if {$args == ""} {
	    if ![info exists defaultValues] {return ""}
	    foreach slotName [array names defaultValues] {
		lappend result [list -$slotName $defaultValues($slotName)  $currentValues($slotName)]
	    }
	    return $result
	}
	if {[llength $args] == 1} {
	    set key [string trimleft $args -]
	    if ![info exists defaultValues($key)] {
		return ""
	    }
	    return "$args $defaultValues($key) $currentValues($key)"
	}
	while {[llength $args] > 1} {
	    set args [lassign $args key value]
	    set key [string trimleft $key -]
	    set currentValues($key) $value
	}
	return ""
    }

    # slot-value is required by tcl-dp.
    # slot-value returns the value at the specified slot.  Note that
    # the leading dash is not specified as part of the key.
    method slot-value {key} {
	return $currentValues($key)
    }

    # destroy is required by tcl-dp and destroys the object.
    method destroy {} {
	$this delete
    }

    # create-slot creates slots in the object.  All slots that are
    # to be shared must be created before the object is served out,
    # or they will not be seen... or worse.
    method create-slot {slotName defaultValue} {
	set currentValues($slotName) $defaultValue
	set defaultValues($slotName) $defaultValue
    }

    method setf {slot value} {
	dp_setf $this $slot $value
    }

    method getf {slot} {
	return [dp_getf $this $slot]
    }

    method lappendf {slot value} {
	set list [dp_getf $this $slot]
	lappend list $value
	dp_setf $this $slot $value
    }

    public defaultValues
    public currentValues

[next] [prev] [TOC]

Command

RcmpClient - an [incr tcl] class

Synopsis

RcmpClient object -host something -rcmpPort 222

inherits

object configure config
object disconnect
object connect connectHost "" hostIP ""
object disk
object login user password
object send message responseVar "" multilineVar ""

Description

#@package: rcmp-client-object RcmpClient
#
# Remote Computer Management Protocol (RCMP)
#
# Basic object-tcl client class for building RCMP clients.
#
# karl lehenbauer 10/94
#
# $Id: rcmp.html,v 1.1.1.1 1999/03/31 20:34:37 damon Exp $
#




    constructor {config} {
    }

    destructor {
    }

    method configure {config} {
    }

    method disconnect {} {
	if {$fromFP != ""} {
	    catch {close $fromFP}
	    set fromFP ""
	}
	if {$toFP != ""} {
	    catch {close $toFP}
	    set toFP ""
	}
	set connected 0
    }

    method connect {{connectHost ""} {hostIP ""}} {
	disconnect

        if {$connectHost != ""} {set host $connectHost}

	if {$hostIP == ""} {
	    set hostIP $host
	}

	lassign [server_open $hostIP $rcmpPort] fromFP toFP

	if {[send "" onlineMessage] != 2} {
	    disconnect
	    error "connect failed: $onlineMessage"
	}
	set connected 1
    }

    method disk {} {
	if {[send disk response data] != 2} {
	    disconnect
	    error "disk request failed"
	}
	echo $data
	echo $response
    }

    method login {user password} {
	if {[send "USER $user"]  != 3} {
	    disconnect
	    error "error sending user"
	}

	if {[send "PASS $password"] != 2} {
	    disconnect
	    error "error sending password"
	}
    }

    method send {message {responseVar ""} {multilineVar ""}} {
	if {$multilineVar != ""} {
	    upvar $multilineVar multilineResponse
	}

	if {$responseVar != ""} {
	    upvar $responseVar response
	}

	set multilineResponse ""
	set inMultiline 0

	if {$message != ""} {
	    puts $toFP $message
	    flush $toFP
	}

        while 1 {
	    if {[gets $fromFP line] < 0} {
		disconnect
		error "EOF from RCMP server"
	    }
	    set firstChar [cindex $line 0]
	    if {!$inMultiline && $firstChar != 1} {
		set response $line
		return $firstChar
	    }
	    if !$inMultiline {
		if {$firstChar != 1} {
		    disconnect
		    error "protocol failure reading server"
		}
		if {[cindex $line 3] == "-"} {
		    set inMultiline 1
		} else {
		    set multilineResponse $line
		}
	    } else {
		# really should make sure we have three entire digits
		if {[ctype digit [crange $line 0 2]] && [cindex $line 3] == " "} {
		    set inMultiline 0
		    if {$firstChar != 1} {
			set response $line
			return $firstChar
		    }
		} else {
		    lappend multilineResponse $line
		}
	    }
	}
    }

    protected fromFP ""
    protected toFP ""

    protected connected 0
    protected state "new"

    public host
    public rcmpPort 222

[next] [prev] [TOC]

Command

neodp_remote_attach_object

Synopsis

neodp_remote_attach_object objType objName

Description



    global rpcFile

    dp_DistributeObject $objName $rpcFile $objType

[next] [prev] [TOC]

Command

neodp_remote_detach_object

Synopsis

neodp_remote_detach_object objType objName

Description



    global rpcFile

    dp_UndistributeObject $objName $rpcFile $objType

[prev] [TOC]

Command

neodp_remote_hello

Synopsis

neodp_remote_hello

Description

#@package: neodp-server neodp_remote_hello neodp_remote_attach_object neodp_remote_detach_object
#
# NeoSoft Internet-distributed database server.
#
# $Id: rcmp.html,v 1.1.1.1 1999/03/31 20:34:37 damon Exp $
#



    global rpcFile

    echo "hello from $rpcFile"