annotate service/laundry/laundry.go @ 905:b58c203e18fe

port to goweb Ignore-this: ea5e9ea0a0c09d1f4a7980d6c79126d1 darcs-hash:20130831191235-312f9-32a3bbee5ec64018d4a19e151bb9c857c6f208ee
author drewp <drewp@bigasterisk.com>
date Sat, 31 Aug 2013 12:12:35 -0700
parents 5758151d4e33
children 5f432946ac9a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
899
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
1 package main
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
2
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
3 import (
905
b58c203e18fe port to goweb
drewp <drewp@bigasterisk.com>
parents: 904
diff changeset
4
899
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
5 "log"
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
6 "net/http"
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
7 "strconv"
901
c06fdb61157f more laundry web support
drewp <drewp@bigasterisk.com>
parents: 899
diff changeset
8 "time"
904
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
9 "net"
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
10 "os"
899
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
11 "encoding/json"
904
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
12 "os/signal"
899
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
13 "github.com/mrmorphic/hwio"
904
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
14 "github.com/stretchr/goweb"
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
15 "github.com/stretchr/goweb/context"
899
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
16 )
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
17
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
18 /*
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
19 hwio.DebugPinMap() wrote this:
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
20
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
21 Pin 1: 3.3V, cap:
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
22 Pin 2: 5V, cap:
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
23 Pin 3: SDA,GPIO0 cap:output,input,input_pullup,input_pulldown
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
24 Pin 5: SCL,GPIO1 cap:output,input,input_pullup,input_pulldown
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
25 Pin 6: GROUND, cap:
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
26 Pin 7: GPIO4 cap:output,input,input_pullup,input_pulldown
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
27 Pin 8: TXD,GPIO14 cap:output,input,input_pullup,input_pulldown
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
28 Pin 10: RXD,GPIO15 cap:output,input,input_pullup,input_pulldown
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
29 Pin 11: GPIO17 cap:output,input,input_pullup,input_pulldown
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
30 Pin 12: GPIO18 cap:output,input,input_pullup,input_pulldown
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
31 Pin 13: GPIO21 cap:output,input,input_pullup,input_pulldown
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
32 Pin 15: GPIO22 cap:output,input,input_pullup,input_pulldown
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
33 Pin 16: GPIO23 cap:output,input,input_pullup,input_pulldown
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
34 Pin 18: GPIO24 cap:output,input,input_pullup,input_pulldown
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
35 Pin 19: MOSI,GPIO10 cap:output,input,input_pullup,input_pulldown
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
36 Pin 21: MISO,GPIO9 cap:output,input,input_pullup,input_pulldown
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
37 Pin 22: GPIO25 cap:output,input,input_pullup,input_pulldown
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
38 Pin 23: SCLK,GPIO11 cap:output,input,input_pullup,input_pulldown
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
39 Pin 24: CE0N,GPIO8 cap:output,input,input_pullup,input_pulldown
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
40 Pin 26: CE1N,GPIO7 cap:output,input,input_pullup,input_pulldown
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
41 */
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
42
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
43 type Pins struct {
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
44 InMotion, InSwitch3, InSwitch1, InSwitch2, OutLed, OutSpeaker, InDoorClosed, OutStrike hwio.Pin
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
45 LastOutLed, LastOutStrike int
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
46 }
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
47
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
48 // hwio.GetPin with a panic instead of an error return
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
49 func GetPin(id string) hwio.Pin {
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
50 p, e := hwio.GetPin(id)
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
51 if e != nil {
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
52 panic(e)
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
53 }
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
54 return p
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
55 }
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
56
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
57 func DigitalRead(p hwio.Pin) int {
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
58 v, err := hwio.DigitalRead(p)
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
59 if err != nil {
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
60 panic(err)
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
61 }
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
62 return v
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
63 }
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
64
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
65 func SetupIo() Pins {
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
66 pins := Pins{
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
67 InMotion: GetPin("GPIO0"),
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
68 InSwitch3: GetPin("GPIO1"),
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
69 InSwitch1: GetPin("GPIO4"),
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
70 InSwitch2: GetPin("GPIO17"),
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
71 OutLed: GetPin("GPIO21"),
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
72 OutSpeaker: GetPin("GPIO22"),
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
73 InDoorClosed: GetPin("GPIO10"),
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
74 OutStrike: GetPin("GPIO9"),
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
75 }
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
76
903
drewp <drewp@bigasterisk.com>
parents: 901
diff changeset
77 if err := hwio.PinMode(pins.InMotion, hwio.INPUT_PULLUP); err != nil { panic(err) }
drewp <drewp@bigasterisk.com>
parents: 901
diff changeset
78 if err := hwio.PinMode(pins.InSwitch1, hwio.INPUT_PULLUP); err != nil { panic(err) }
drewp <drewp@bigasterisk.com>
parents: 901
diff changeset
79 if err := hwio.PinMode(pins.InSwitch2, hwio.INPUT_PULLUP); err != nil { panic(err) }
drewp <drewp@bigasterisk.com>
parents: 901
diff changeset
80 if err := hwio.PinMode(pins.InSwitch3, hwio.INPUT_PULLUP); err != nil { panic(err) }
drewp <drewp@bigasterisk.com>
parents: 901
diff changeset
81 if err := hwio.PinMode(pins.InDoorClosed, hwio.INPUT_PULLUP); err != nil { panic(err) }
drewp <drewp@bigasterisk.com>
parents: 901
diff changeset
82 if err := hwio.PinMode(pins.OutLed, hwio.OUTPUT); err != nil { panic(err) }
drewp <drewp@bigasterisk.com>
parents: 901
diff changeset
83 if err := hwio.PinMode(pins.OutSpeaker, hwio.OUTPUT); err != nil { panic(err) }
drewp <drewp@bigasterisk.com>
parents: 901
diff changeset
84 if err := hwio.PinMode(pins.OutStrike, hwio.OUTPUT); err != nil { panic(err) }
899
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
85 return pins
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
86 }
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
87
901
c06fdb61157f more laundry web support
drewp <drewp@bigasterisk.com>
parents: 899
diff changeset
88
899
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
89 func main() {
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
90 pins := SetupIo()
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
91
904
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
92 goweb.MapStatic("/static", "static")
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
93
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
94 // this one needs to fail if the hardware is broken in
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
95 // any way that we can determine, though I'm not sure
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
96 // what that will mean on rpi
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
97 goweb.MapStaticFile("/", "index.html")
899
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
98
904
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
99 goweb.Map("GET", "/status", func(c context.Context) error {
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
100 jsonEncode := json.NewEncoder(c.HttpResponseWriter())
899
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
101 jsonEncode.Encode(map[string]int{
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
102 "motion": DigitalRead(pins.InMotion),
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
103 "switch1": DigitalRead(pins.InSwitch1),
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
104 "switch2": DigitalRead(pins.InSwitch2),
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
105 "switch3": DigitalRead(pins.InSwitch3),
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
106 "doorClosed": DigitalRead(pins.InDoorClosed),
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
107 "led": pins.LastOutLed,
901
c06fdb61157f more laundry web support
drewp <drewp@bigasterisk.com>
parents: 899
diff changeset
108 "strike": pins.LastOutStrike,
899
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
109 })
904
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
110 return nil
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
111 })
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
112
905
b58c203e18fe port to goweb
drewp <drewp@bigasterisk.com>
parents: 904
diff changeset
113 goweb.Map("PUT", "/led", func(c context.Context) error {
b58c203e18fe port to goweb
drewp <drewp@bigasterisk.com>
parents: 904
diff changeset
114 body, err := c.RequestBody()
899
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
115 if err != nil {
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
116 panic(err)
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
117 }
905
b58c203e18fe port to goweb
drewp <drewp@bigasterisk.com>
parents: 904
diff changeset
118
901
c06fdb61157f more laundry web support
drewp <drewp@bigasterisk.com>
parents: 899
diff changeset
119 var level int
c06fdb61157f more laundry web support
drewp <drewp@bigasterisk.com>
parents: 899
diff changeset
120 if string(body) == "on" {
c06fdb61157f more laundry web support
drewp <drewp@bigasterisk.com>
parents: 899
diff changeset
121 level = 1
c06fdb61157f more laundry web support
drewp <drewp@bigasterisk.com>
parents: 899
diff changeset
122 } else if string(body) == "off" {
c06fdb61157f more laundry web support
drewp <drewp@bigasterisk.com>
parents: 899
diff changeset
123 level = 0
c06fdb61157f more laundry web support
drewp <drewp@bigasterisk.com>
parents: 899
diff changeset
124 } else {
905
b58c203e18fe port to goweb
drewp <drewp@bigasterisk.com>
parents: 904
diff changeset
125 http.Error(c.HttpResponseWriter(), "body must be 'on' or 'off'", http.StatusBadRequest)
b58c203e18fe port to goweb
drewp <drewp@bigasterisk.com>
parents: 904
diff changeset
126 return nil
899
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
127 }
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
128
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
129 hwio.DigitalWrite(pins.OutLed, level)
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
130 pins.LastOutLed = level
905
b58c203e18fe port to goweb
drewp <drewp@bigasterisk.com>
parents: 904
diff changeset
131 http.Error(c.HttpResponseWriter(), "", http.StatusAccepted)
b58c203e18fe port to goweb
drewp <drewp@bigasterisk.com>
parents: 904
diff changeset
132 return nil
b58c203e18fe port to goweb
drewp <drewp@bigasterisk.com>
parents: 904
diff changeset
133 })
899
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
134
901
c06fdb61157f more laundry web support
drewp <drewp@bigasterisk.com>
parents: 899
diff changeset
135 setStrike := func (level int) {
c06fdb61157f more laundry web support
drewp <drewp@bigasterisk.com>
parents: 899
diff changeset
136 hwio.DigitalWrite(pins.OutStrike, level)
c06fdb61157f more laundry web support
drewp <drewp@bigasterisk.com>
parents: 899
diff changeset
137 pins.LastOutStrike = level
c06fdb61157f more laundry web support
drewp <drewp@bigasterisk.com>
parents: 899
diff changeset
138 }
c06fdb61157f more laundry web support
drewp <drewp@bigasterisk.com>
parents: 899
diff changeset
139
905
b58c203e18fe port to goweb
drewp <drewp@bigasterisk.com>
parents: 904
diff changeset
140 goweb.Map("PUT", "/strike", func(c context.Context) error {
b58c203e18fe port to goweb
drewp <drewp@bigasterisk.com>
parents: 904
diff changeset
141 body, err := c.RequestBody()
901
c06fdb61157f more laundry web support
drewp <drewp@bigasterisk.com>
parents: 899
diff changeset
142 if err != nil {
c06fdb61157f more laundry web support
drewp <drewp@bigasterisk.com>
parents: 899
diff changeset
143 panic(err)
c06fdb61157f more laundry web support
drewp <drewp@bigasterisk.com>
parents: 899
diff changeset
144 }
905
b58c203e18fe port to goweb
drewp <drewp@bigasterisk.com>
parents: 904
diff changeset
145
b58c203e18fe port to goweb
drewp <drewp@bigasterisk.com>
parents: 904
diff changeset
146 level, err2 := strconv.Atoi(string(body[:]))
b58c203e18fe port to goweb
drewp <drewp@bigasterisk.com>
parents: 904
diff changeset
147 if err2 != nil {
b58c203e18fe port to goweb
drewp <drewp@bigasterisk.com>
parents: 904
diff changeset
148 http.Error(c.HttpResponseWriter(), "body must be '0' or '1'", http.StatusBadRequest)
b58c203e18fe port to goweb
drewp <drewp@bigasterisk.com>
parents: 904
diff changeset
149 return nil
b58c203e18fe port to goweb
drewp <drewp@bigasterisk.com>
parents: 904
diff changeset
150 }
b58c203e18fe port to goweb
drewp <drewp@bigasterisk.com>
parents: 904
diff changeset
151
901
c06fdb61157f more laundry web support
drewp <drewp@bigasterisk.com>
parents: 899
diff changeset
152 setStrike(level)
905
b58c203e18fe port to goweb
drewp <drewp@bigasterisk.com>
parents: 904
diff changeset
153 http.Error(c.HttpResponseWriter(), "", http.StatusAccepted)
b58c203e18fe port to goweb
drewp <drewp@bigasterisk.com>
parents: 904
diff changeset
154 return nil
b58c203e18fe port to goweb
drewp <drewp@bigasterisk.com>
parents: 904
diff changeset
155 })
901
c06fdb61157f more laundry web support
drewp <drewp@bigasterisk.com>
parents: 899
diff changeset
156
905
b58c203e18fe port to goweb
drewp <drewp@bigasterisk.com>
parents: 904
diff changeset
157 goweb.Map("PUT", "/strike/temporaryUnlock", func(c context.Context) error {
b58c203e18fe port to goweb
drewp <drewp@bigasterisk.com>
parents: 904
diff changeset
158 seconds, err2 := strconv.ParseFloat(c.FormValue("seconds"), 32)
901
c06fdb61157f more laundry web support
drewp <drewp@bigasterisk.com>
parents: 899
diff changeset
159 if err2 != nil {
905
b58c203e18fe port to goweb
drewp <drewp@bigasterisk.com>
parents: 904
diff changeset
160 http.Error(c.HttpResponseWriter(), "seconds must be a float", http.StatusBadRequest)
b58c203e18fe port to goweb
drewp <drewp@bigasterisk.com>
parents: 904
diff changeset
161 return nil
901
c06fdb61157f more laundry web support
drewp <drewp@bigasterisk.com>
parents: 899
diff changeset
162 }
c06fdb61157f more laundry web support
drewp <drewp@bigasterisk.com>
parents: 899
diff changeset
163
c06fdb61157f more laundry web support
drewp <drewp@bigasterisk.com>
parents: 899
diff changeset
164 // This is not correctly reentrant. There should be a
c06fdb61157f more laundry web support
drewp <drewp@bigasterisk.com>
parents: 899
diff changeset
165 // stack of temporary effects that unpop correctly,
c06fdb61157f more laundry web support
drewp <drewp@bigasterisk.com>
parents: 899
diff changeset
166 // and status should show you any running effects.
c06fdb61157f more laundry web support
drewp <drewp@bigasterisk.com>
parents: 899
diff changeset
167 setStrike(1)
c06fdb61157f more laundry web support
drewp <drewp@bigasterisk.com>
parents: 899
diff changeset
168 go func() {
c06fdb61157f more laundry web support
drewp <drewp@bigasterisk.com>
parents: 899
diff changeset
169 time.Sleep(time.Duration(seconds * float64(time.Second)))
c06fdb61157f more laundry web support
drewp <drewp@bigasterisk.com>
parents: 899
diff changeset
170 setStrike(0)
c06fdb61157f more laundry web support
drewp <drewp@bigasterisk.com>
parents: 899
diff changeset
171 }()
905
b58c203e18fe port to goweb
drewp <drewp@bigasterisk.com>
parents: 904
diff changeset
172 http.Error(c.HttpResponseWriter(), "", http.StatusAccepted)
b58c203e18fe port to goweb
drewp <drewp@bigasterisk.com>
parents: 904
diff changeset
173 return nil
b58c203e18fe port to goweb
drewp <drewp@bigasterisk.com>
parents: 904
diff changeset
174 })
901
c06fdb61157f more laundry web support
drewp <drewp@bigasterisk.com>
parents: 899
diff changeset
175
905
b58c203e18fe port to goweb
drewp <drewp@bigasterisk.com>
parents: 904
diff changeset
176 goweb.Map("PUT", "/speaker/beep", func(c context.Context) error {
901
c06fdb61157f more laundry web support
drewp <drewp@bigasterisk.com>
parents: 899
diff changeset
177 // queue a beep
905
b58c203e18fe port to goweb
drewp <drewp@bigasterisk.com>
parents: 904
diff changeset
178 http.Error(c.HttpResponseWriter(), "", http.StatusAccepted)
b58c203e18fe port to goweb
drewp <drewp@bigasterisk.com>
parents: 904
diff changeset
179 return nil
b58c203e18fe port to goweb
drewp <drewp@bigasterisk.com>
parents: 904
diff changeset
180 })
b58c203e18fe port to goweb
drewp <drewp@bigasterisk.com>
parents: 904
diff changeset
181
904
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
182
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
183 address := ":8081"
901
c06fdb61157f more laundry web support
drewp <drewp@bigasterisk.com>
parents: 899
diff changeset
184
904
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
185 s := &http.Server{
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
186 Addr: address,
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
187 Handler: goweb.DefaultHttpHandler(),
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
188 ReadTimeout: 10 * time.Second,
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
189 WriteTimeout: 10 * time.Second,
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
190 MaxHeaderBytes: 1 << 20,
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
191 }
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
192
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
193 log.Printf("Listening on port %s", address)
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
194 listener, listenErr := net.Listen("tcp", address)
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
195
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
196 log.Printf("%s", goweb.DefaultHttpHandler())
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
197
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
198 if listenErr != nil {
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
199 log.Fatalf("Could not listen: %s", listenErr)
899
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
200 }
904
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
201
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
202 c := make(chan os.Signal, 1)
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
203 signal.Notify(c, os.Interrupt)
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
204 go func() {
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
205 for _ = range c {
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
206
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
207 // sig is a ^C, handle it
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
208
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
209 // stop the HTTP server
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
210 log.Print("Stopping the server...")
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
211 listener.Close()
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
212
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
213 /*
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
214 Tidy up and tear down
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
215 */
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
216 log.Print("Tearing down...")
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
217
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
218 // TODO: tidy code up here
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
219
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
220 log.Fatal("Finished - bye bye. ;-)")
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
221
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
222 }
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
223 }()
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
224 log.Fatalf("Error in Serve: %s", s.Serve(listener))
5758151d4e33 start switch to goweb, for improved incoming payload handling
drewp <drewp@bigasterisk.com>
parents: 903
diff changeset
225
899
2d718e542198 laundry add .go files
drewp <drewp@bigasterisk.com>
parents:
diff changeset
226 }