diff options
Diffstat (limited to 'livereload/connection.go')
-rw-r--r-- | livereload/connection.go | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/livereload/connection.go b/livereload/connection.go new file mode 100644 index 000000000..70a7e6d5d --- /dev/null +++ b/livereload/connection.go @@ -0,0 +1,56 @@ +// Copyright © 2014 Steve Francia <[email protected]>. +// +// Licensed under the Simple Public License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://opensource.org/licenses/Simple-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package livereload + +import ( + "bytes" + + "github.com/gorilla/websocket" +) + +type connection struct { + // The websocket connection. + ws *websocket.Conn + + // Buffered channel of outbound messages. + send chan []byte +} + +func (c *connection) reader() { + for { + _, message, err := c.ws.ReadMessage() + if err != nil { + break + } + switch true { + case bytes.Contains(message, []byte(`"command":"hello"`)): + wsHub.broadcast <- []byte(`{ + "command": "hello", + "protocols": [ "http://livereload.com/protocols/official-7" ], + "serverName": "Hugo" + }`) + } + } + c.ws.Close() +} + +func (c *connection) writer() { + for message := range c.send { + err := c.ws.WriteMessage(websocket.TextMessage, message) + if err != nil { + break + } + } + c.ws.Close() +} |