Skip to content

Instantly share code, notes, and snippets.

@tenntenn
Last active December 10, 2015 02:48
Show Gist options
  • Save tenntenn/4370103 to your computer and use it in GitHub Desktop.
Save tenntenn/4370103 to your computer and use it in GitHub Desktop.
// サーバを起動します。
func (self *Server) Listen() {
log.Println("Listening server...")
// クライアントが接続されたときに呼ばれるハンドラを作ります。
onConnected := func(ws *websocket.Conn) {
client := NewClient(ws, self)
self.addClient <- client
client.Listen()
defer ws.Close()
}
http.Handle(self.path, websocket.Handler(onConnected))
log.Println("Created handler")
// 無限ループでリクエストを待つ
for {
select {
// クライアント追加リクエストを受け付けます。
case c := <-self.addClient:
log.Println("Added new client")
self.clients = append(self.clients, c)
for _, msg := range self.messages {
c.Write() <- msg
}
log.Println("Now", len(self.clients), "clients connected.")
// クライアント削除リクエストを受け付けます。
case c := <-self.removeClient:
log.Println("Remove client")
for i := range self.clients {
if self.clients[i] == c {
self.clients = append(self.clients[:i], self.clients[i+1:]...)
break
}
}
// メッセージを全てのクライアントにブロードキャストします。
case msg := <-self.sendAll:
log.Println("Send all:", msg)
self.messages = append(self.messages, msg)
for _, c := range self.clients {
c.Write() <- msg
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment