netgen/ng/sockets.tcl
2016-11-10 11:45:06 +01:00

304 lines
9.2 KiB
Tcl

set sockets.serverport 0
set sockets.serverhost "localhost"
set sockets.serverlistbox 0
set sockets.queuelistbox 0
set sockets.currentjoblistbox 0
set sockets.answerlistbox 0
set sockets.myidlabel -1
proc updateserverlist { } {
global sockets.serverlistbox
set retval [Ng_Socket getserverlist]
${sockets.serverlistbox} delete 0 end
for {set i 0} {$i < [llength $retval]} {incr i 3} {
${sockets.serverlistbox} insert end \
[format "%-16s %6i %6i" [lindex $retval $i] [lindex $retval [expr $i+1]] [lindex $retval [expr $i+2]]]
}
}
proc clientsocketdialog { } {
set w .clientsock_dlg
if {[winfo exists .clientsock_dlg] == 1} {
wm withdraw $w
wm deiconify $w
focus $w
} {
toplevel $w
global sockets.serverhost
global sockets.serverport
ttk::frame $w.general
ttk::frame $w.host
ttk::label $w.host.lab -text "Serverhost: "
ttk::entry $w.host.name -width 30 -textvariable sockets.serverhost
pack $w.host.lab $w.host.name -side left
pack $w.host
ttk::frame $w.ports
ttk::label $w.ports.lab1 -text "Serverport: "
ttk::entry $w.ports.statport -width 6 -textvariable sockets.serverport
pack $w.ports.lab1 $w.ports.statport -side left
pack $w.ports
ttk::frame $w.listboxes
ttk::frame $w.listboxes.choosesocketframe
tixScrolledListBox $w.listboxes.choosesocketframe.choosesocket -scrollbar auto
global sockets.serverlistbox
set sockets.serverlistbox [$w.listboxes.choosesocketframe.choosesocket subwidget listbox]
${sockets.serverlistbox} configure -width 35
${sockets.serverlistbox} configure -selectmode browse
${sockets.serverlistbox} configure -exportselection false
ttk::button $w.addserver -text "Add ServerSocket" -command {
Ng_Socket addserver ${sockets.serverport} ${sockets.serverhost}
updateserverlist
}
pack $w.addserver
ttk::label $w.linefeed -text "\n"
pack $w.linefeed
ttk::frame $w.clientidframe
ttk::label $w.clientidframe.lab -text "Client ID: ";
global sockets.myidlabel
ttk::entry $w.clientidframe.val -width 5 -textvariable sockets.myidlabel
ttk::button $w.clientidframe.but -text "Set" -command {
set opsel [${sockets.serverlistbox} curselection]
if {[llength $opsel] > 0} {
set opserver [lindex $opsel 0]
Ng_Socket setid $opserver ${sockets.myidlabel}
updateserverlist
}
}
pack $w.clientidframe.lab $w.clientidframe.val $w.clientidframe.but -side left
pack $w.clientidframe
# label $w.clientidlabel -text "\nClient ID: -1"
# global sockets.myidlabel
# set sockets.myidlabel $w.clientidlabel
# pack $w.clientidlabel
ttk::label $w.listboxes.choosesocketframe.chooselab -text [format "\n\n%-16s %6s %6s " Host Socket MyID ]
pack $w.listboxes.choosesocketframe.chooselab
pack $w.listboxes.choosesocketframe.choosesocket
ttk::frame $w.listboxes.choosesocketframe.serverbuttons
ttk::button $w.listboxes.choosesocketframe.serverbuttons.save -text "Save" -command {
Ng_Socket saveserverlist
}
global sockets.serverlist
Ng_Socket loadserverlist
updateserverlist
ttk::button $w.listboxes.choosesocketframe.serverbuttons.delete -text "Delete" -command {
set opsel [${sockets.serverlistbox} curselection]
if {[llength $opsel] > 0} {
Ng_Socket deletesocket [lindex $opsel 0]
updateserverlist
}
}
pack $w.listboxes.choosesocketframe.serverbuttons.save $w.listboxes.choosesocketframe.serverbuttons.delete -side left
pack $w.listboxes.choosesocketframe.serverbuttons
ttk::frame $w.listboxes.statusframe
ttk::label $w.listboxes.statusframe.statuslabel1 -text "\n\njobqueue"
tixScrolledListBox $w.listboxes.statusframe.queuestatus -scrollbar auto
ttk::label $w.listboxes.statusframe.statuslabel2 -text "\ncurrent job"
tixScrolledListBox $w.listboxes.statusframe.currentjobstatus -scrollbar auto
ttk::label $w.listboxes.statusframe.statuslabel3 -text "\nanswers"
tixScrolledListBox $w.listboxes.statusframe.answers -scrollbar auto
global sockets.queuelistbox
global sockets.currentjoblistbox
global sockets.answerlistbox
set sockets.queuelistbox [$w.listboxes.statusframe.queuestatus subwidget listbox]
set sockets.currentjoblistbox [$w.listboxes.statusframe.currentjobstatus subwidget listbox]
set sockets.answerlistbox [$w.listboxes.statusframe.answers subwidget listbox]
${sockets.queuelistbox} configure -width 50
${sockets.queuelistbox} configure -height 5
${sockets.queuelistbox} configure -selectmode browse
${sockets.queuelistbox} configure -exportselection false
${sockets.currentjoblistbox} configure -width 50
${sockets.currentjoblistbox} configure -height 1
${sockets.currentjoblistbox} configure -selectmode browse
${sockets.currentjoblistbox} configure -exportselection false
${sockets.answerlistbox} configure -width 50
${sockets.answerlistbox} configure -height 5
${sockets.answerlistbox} configure -selectmode browse
${sockets.answerlistbox} configure -exportselection false
ttk::button $w.listboxes.statusframe.updatebutton -text "Update" -command {
set opsel [${sockets.serverlistbox} curselection]
if {[llength $opsel] > 0} {
set opserver [lindex $opsel 0]
set retval [Ng_Socket sendqueuestatus $opserver]
${sockets.queuelistbox} delete 0 end
if {[lindex $retval 0] > 0} {
${sockets.queuelistbox} insert end [format "Blocked for user %i" [lindex $retval 0]]
} {
${sockets.queuelistbox} insert end "Not blocked"
}
for {set i 2} {$i < [expr 2*[lindex $retval 1]+2]} {incr i 2} {
${sockets.queuelistbox} insert end [format "client %i, command %s" [lindex $retval $i] [lindex $retval [expr $i+1]]]
}
${sockets.answerlistbox} delete 0 end
for {set i [expr 2*[lindex $retval 1]+3]} {$i < [llength $retval]} {incr i 2} {
${sockets.answerlistbox} insert end [format "client %i, command %s" [lindex $retval $i] [lindex $retval [expr $i+1]]]
}
${sockets.currentjoblistbox} delete 0 end
set retval [Ng_Socket sendjobstatus $opserver]
if {[lindex $retval 0] != 0} {
${sockets.currentjoblistbox} insert end [format "client %i, command %s: %s" [lindex $retval 0] [lindex $retval 1] [lrange $retval 2 end]]
}
}
}
pack $w.listboxes.statusframe.statuslabel1 $w.listboxes.statusframe.queuestatus \
$w.listboxes.statusframe.statuslabel2 $w.listboxes.statusframe.currentjobstatus \
$w.listboxes.statusframe.statuslabel3 $w.listboxes.statusframe.answers \
$w.listboxes.statusframe.updatebutton
pack $w.listboxes.choosesocketframe $w.listboxes.statusframe -side left
pack $w.listboxes
ttk::label $w.lab1 -text "\n"
pack $w.lab1
ttk::frame $w.buttons1
ttk::frame $w.buttons2
ttk::button $w.buttons1.getid -text "Get ID" -command {
set opsel [${sockets.serverlistbox} curselection]
if {[llength $opsel] > 0} {
set opserver [lindex $opsel 0]
set retval [Ng_Socket getid $opserver]
updateserverlist
set sockets.myidlabel $retval
}
}
ttk::button $w.buttons1.killjob -text "Kill Cur. Job" -command {
set opsel [${sockets.serverlistbox} curselection]
if {[llength $opsel] > 0} {
set opserver [lindex $opsel 0]
Ng_Socket killcurrentjob $opserver
}
}
ttk::button $w.buttons2.sendmesh -text "Send Mesh" -command {
set opsel [${sockets.serverlistbox} curselection]
if {[llength $opsel] > 0} {
set opserver [lindex $opsel 0]
set retval [Ng_Socket sendmesh $opserver]
set sockets.meshsent 1
}
}
ttk::button $w.buttons2.sendpde -text "Send PDE" -command {
set opsel [${sockets.serverlistbox} curselection]
if {[llength $opsel] > 0} {
set opserver [lindex $opsel 0]
set retval [NGS_Socket sendpdefile $opserver]
}
}
ttk::button $w.buttons2.solvepde -text "Solve PDE" -command {
set opsel [${sockets.serverlistbox} curselection]
if {[llength $opsel] > 0} {
set opserver [lindex $opsel 0]
set retval [NGS_Socket solvepde $opserver]
}
}
ttk::button $w.buttons2.writesol -text "Write Solution" -command {
set opsel [${sockets.serverlistbox} curselection]
if {[llength $opsel] > 0} {
set opserver [lindex $opsel 0]
set retval [NGS_Socket writesolution $opserver]
}
}
ttk::button $w.buttons2.sendsol -text "Receive Solution" -command {
set opsel [${sockets.serverlistbox} curselection]
if {[llength $opsel] > 0} {
set opserver [lindex $opsel 0]
set retval [NGS_Socket sendsolution $opserver]
}
}
ttk::button $w.buttons1.blockserver -text "Block Server" -command {
set opsel [${sockets.serverlistbox} curselection]
if {[llength $opsel] > 0} {
set opserver [lindex $opsel 0]
set retval [Ng_Socket blockserver $opserver]
}
}
ttk::button $w.buttons1.unblockserver -text "UnBlock Server" -command {
set opsel [${sockets.serverlistbox} curselection]
if {[llength $opsel] > 0} {
set opserver [lindex $opsel 0]
set retval [Ng_Socket unblockserver $opserver]
}
}
pack $w.buttons1.getid $w.buttons1.blockserver $w.buttons1.unblockserver $w.buttons1.killjob -side left
pack $w.buttons2.sendmesh $w.buttons2.sendpde $w.buttons2.solvepde $w.buttons2.writesol $w.buttons2.sendsol -side left
pack $w.buttons1 $w.buttons2
wm withdraw $w
wm geom $w +200+200
wm deiconify $w
wm title $w "Client Socket"
focus .options_dlg
}
}
#.ngmenu.special add command -label "Client Socket" \
-command { clientsocketdialog }