Last active
December 10, 2015 02:48
-
-
Save tenntenn/4370335 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 書き込み処理と読み込み処理を待ちます。 | |
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