I have somewhat figured this out:
Accepting a var that equates to 'self' of the blessed class seems to allow
the calls to work.

Now - another question:

How do I access $self inside of the Tcl proc?
When I attempt to use and it is simply a string:
Test::IXIA2=HASH(0x812ec88),
but I would like to access the attributes of this object (I will add them
later) like in perl ($self->{var1}).

Can anyone help with this?


package Test::IXIA2;

use vars qw($self);

sub new {
    my($class, %args) = @_;
    my $self = bless {}, $class;
    return $self;
}

use Inline Tcl => 'DATA';


1;

__DATA__
__Tcl__

proc _setupIxiaEnvironment {self} {
    global env
    global auto_path
    set ixiaHome /home/uboscolo/cfg/install/ixia
    set ixiaVersion 4.10.250.18
    lappend auto_path [file join $ixiaHome "lib"]
    set env(IXIA_HOME) /home/uboscolo/cfg/install/ixia
    set env(IXIA_VERSION) 4.10.250.18
    set env(IXIA_TCL_DIR) [file join $ixiaHome "lib"]
    if { [catch {package require IxTclHal} res] != 0 } {
        puts stderr "Can't load package IxTclHal: $res"
        return 1
    }
    return 0

}

proc _connectToServer {self} {
    puts "CONNECTING TO TclServer"
    if { [catch {ixConnectToTclServer 10.1.213.251} res] != 0 } {
        puts "Failed to connect to Tcl Server at 10.1.213.251] $res"
        return 1
    }
}

proc _loginToIxia {self} {
    puts "CONNECTING TO CHASSIS 10.1.213.251"
    if { [catch {ixConnectToChassis 10.1.213.251} res] !=0 } {
        puts "Failed to connect to Ixia: $res"
    }
    puts $res
    #puts "CONNECTED TO CHASSIS"
    #set chassisID [ixGetChassisID 10.1.213.251]
    #puts "CHASSIS ID $chassisID"
}

proc _takeOwnership {self ls} {
    set ls1 [lindex $ls 0]
    puts "ENTIRE LIST: $ls"
    puts "LIST $ls1"
    set el1 [lindex $ls1 0]
    puts "EL1 $el1"
    if { [ixLogin testuser ] != 0 } {
        puts "Failed to login testuser to Ixia "
        return 1
    }
    puts "logged into ixia"

    if { [ixTakeOwnership $ls ] != 0 } {
        puts "Failed to take ownership of $ls"
        return 1
    }

    if { [ixClearOwnership $ls ] != 0 } {
        puts  "Failed to clear ownership of $ls "
        return 1
    } else {
        puts "CLEARED OWNERSHIP OF $ls"
    }
}



On Wed, May 28, 2008 at 11:17 AM, Darren Ball <[EMAIL PROTECTED]> wrote:

> Hi,
>
> I've been attempting to create a wrapper library for the IXIA product.
> Ixia only has TCL libraries.
>
>
> I believe this issue is not specific to Tcl.
>
> It seems to be a problem for me to call inline procs as via the object...
> I've had to include wrapper routines to every proc - which seems incorrect
> - I should be
> able to simply call them with something like $obj->procRoutine() should I
> not?
>
> Here is the library (brief):
>
> package Test::IXIA2;
>
> use vars qw($self);
> sub new {
>     my($class, %args) = @_;
>     my $self = bless {}, $class;
>     return $self;
> }
>
>
> sub setupIxiaEnvironment{
>    my($self)[EMAIL PROTECTED];
>    &_setupIxiaEnvironment();
> }
>
>
> sub connectToChassis{
>    my($self)[EMAIL PROTECTED];
>    &_connectToChassis();
> }
>
> sub _takeOwnership{
>    my($self)[EMAIL PROTECTED];
>    &_takeOwnership();
> }
>
> use Inline Tcl => <<END;
>
> proc _setupIxiaEnvironment { } {
>     global env
>     global auto_path
>
>     set ixiaHome /home/regress/cfg/install/ixia
>     set ixiaVersion 4.10.250.18
>
>     lappend auto_path [file join \$ixiaHome "lib"]
>
>     set env(IXIA_HOME) /home/regress/cfg/install/ixia
>     set env(IXIA_VERSION) 4.10.250.18
>     set env(IXIA_TCL_DIR) [file join \$ixiaHome "lib"]
>
>     puts \$::env(IXIA_HOME)
>     puts \$::env(IXIA_VERSION)
>     puts \$::env(IXIA_TCL_DIR)
>
>     if { [catch {package require IxTclHal} res] != 0 } {
>         puts stderr "Can't load package IxTclHal: \$res"
>         return 1
>     }
>     return 0
>
> }
>
> proc _connectToChassis { } {
>     if { [ixConnectToTclServer 10.1.213.251] != 0 } {
>         puts "Failed to connect to Tcl Server at 10.1.213.251]"
>         return 1
>     }
>     if { [ixConnectToChassis 10.1.213.251] != 0 } {
>         puts "Failed to connect to Ixia at 10.1.213.251"
>         return 1
>     }
>
> }
> proc _takeOwnership { } {
>     if { [ixLogin testuser ] != 0 } {
>         puts "Failed to login testuser to Ixia "
>         return 1
>     }
>     puts "logged into ixia"
>     if { [ixTakeOwnership {{1 7 2}} "force"] != 0 } {
>         puts "Failed to take ownership of {{1 7 1}}"
>         return 1
>     }
>     if { [ixClearOwnership {{1 7 2}} ] != 0 } {
>         puts  "Failed to clear ownership of {{1 7 2}} "
>         return 1
>     }
> }
>
> END
>
> 1;
>
>
> And here is how I've tried to exercise it:
>
> #!/usr/bin/perl -w
>
> my $ixiaTest = new Test::IXIA2();
>
>
> # When I try the following, which are direct calls to the procs - it does
> not work
>
> $ixiaTest->_setupIxiaEnvironment();
> $ixiaTest->_connectToChassis();
> $ixiaTest->_takeOwnership();
>
> # When I use the wrapper routines - it does work
>
> $ixiaTest->setupIxiaEnvironment();
> $ixiaTest->connectToChassis();
> $ixiaTest->takeOwnership();
>
> exit 1;
>
>
>
> How can I make the first instance work (do I have to pass a reference to
> self into the procs?
>
>
> Any help would be appreciated.
>
> Thanks.
>
>

Reply via email to