Skip to content

Instantly share code, notes, and snippets.

@tenntenn
Last active December 10, 2015 02:48
Show Gist options
  • Save tenntenn/4370335 to your computer and use it in GitHub Desktop.
Save tenntenn/4370335 to your computer and use it in GitHub Desktop.
// 書き込み処理と読み込み処理を待ちます。
func (self *Client) Listen() {
go self.listenWrite()
self.listenRead()
}
// 書き込み処理を待ちます。
func (self *Client) listenWrite() {
log.Println("Listening write to client")
// 無限ループで書き込みリクエストを待ちます。
for {
select {
// メッセージデータを受け取ります。
case msg := <-self.ch:
log.Println("Send:", msg)
// クライアント側にメッセージをJSON形式で送ります。
websocket.JSON.Send(self.ws, msg)
// 終了処理を受け取ります。
case <-self.done:
// サーバから削除します。
self.server.RemoveClient() <- self
// 読み込み処理も終了する
self.done <- true
return
}
}
}
// 読み込み処理を待ちます。
func (self *Client) listenRead() {
log.Println("Listening read from client")
// 無限ループでクライアントからデータが送られて来るのを待ちます。
for {
select {
// 終了処理を受け取ります。
case <-self.done:
// サーバから削除します。
self.server.RemoveClient() <- self
// 書き込み処理も終了する
self.done <- true
return
// クライアントからメッセージを受け取る
default:
var msg Message
// クライアントからJSON形式でメッセージを受け取ります。
err := websocket.JSON.Receive(self.ws, &msg)
if err != nil {
// エラーの場合は終了
self.done<-true
} else {
// 自分を含むすべてのクライアントに送信
self.server.SendAll() <- &msg
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment