File: aserver.tcl

package info (click to toggle)
snack 2.2.10.20090623-dfsg-8
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 3,764 kB
  • sloc: ansic: 32,662; sh: 8,558; tcl: 1,086; python: 761; makefile: 582
file content (92 lines) | stat: -rwxr-xr-x 2,049 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#!/bin/sh
# the next line restarts using wish \
exec wish8.5 "$0" "$@"

package require -exact snack 2.2
# Try to load optional file format handler
catch { package require snackogg }

snack::debug 0

set port 23654

proc Cmd { sock addr port } {
    global servsock msg

    set cmd [read $sock 4]
    switch $cmd {
	play {
	    set s [snack::sound -debug 0]
	    puts $sock $s ;# return token for this job
	    flush $sock
	    $s configure -channel $sock -guessproperties yes
	    $s play -command "close $sock; set msg idle;$s destroy"
	    set msg playing
	}
	stop {
	    set handle [gets $sock] ;# get token (sound name) and stop playback
	    catch { $handle stop }
	    catch { $handle destroy }
	    close $sock
	    set msg idle
	}
	exit {
	    close $sock
	    close $servsock
	    exit
	}
	default {
	    puts "Unknown command"
	}
    }
}

set servsock [socket -server Cmd $port]

# Make sure the server socket always is closed properly on exit

wm protocol . WM_DELETE_WINDOW {close $servsock; exit}

proc NewPort {} {
    global servsock port
    close $servsock
    set servsock [socket -server Cmd $port]
}

proc Pause {} {
  if {[snack::audio active] == 0} return
  snack::audio pause
  if {[.b.bp cget -relief] == "raised"} {
    .b.bp configure -relief sunken
    set ::msg paused
  } else {
    .b.bp configure -relief raised
    set ::msg playing
  }
}

proc Stop {} {
  snack::audio stop
  .b.bp configure -relief raised
  set ::msg idle
}

set msg idle
pack [frame .t]
pack [label .t.l1 -text Status:] -side left
pack [label .t.l2 -textvar msg -width 7] -side left

pack [frame .m]
pack [label .m.l -text Port] -side left
pack [entry .m.e -textvar port -width 6] -side left
pack [button .m.b -text Set -command NewPort] -side left

set gain [snack::audio play_gain]
pack [frame .b]
pack [button .b.bs -bitmap snackStop -command Stop] \
	-side left
pack [button .b.bp -bitmap snackPause -command Pause] -side left
pack [scale .b.s -show no -orient horiz -command {snack::audio play_gain} \
	-var gain] -side left

vwait forever