コード例 #1
0
ファイル: main.go プロジェクト: mysfsnow/ProjectUnlaaser
func handleChat(ws *websocket.Conn) {

	poster := func() int {
		for {
			since := board.QHead
			recv_msg, next := board.GetMessages(since)
			since = next

			for _, m := range recv_msg {
				timems := m.Time.Unix()*1000 +
					int64(m.Time.Nanosecond()/1000000)

				timeStr := fmt.Sprintf("%016x", timems)
				send_msg := timeStr + m.Text
				ws.WriteMessage(websocket.OpText, []byte(send_msg))
			}
		}

		return 0
	}

	fetcher := func() int {
		for {
			opcode, reader, err := ws.NextReader()
			if err != nil {
				break
			}

			switch opcode {
			case websocket.OpText:
				{
					msg, err := ioutil.ReadAll(reader)
					if err != nil {
						break
					}

					board.PostMessage(string(msg))
				}
			case websocket.OpBinary:
				{
					msg, err := ioutil.ReadAll(reader)
					if err != nil {
						break
					}

					msgStr := fmt.Sprintf("%v", msg)
					board.PostMessage(string(msgStr))
				}
			}
		}

		return 0
	}

	sync_end := make(chan int)

	go func() { sync_end <- poster() }()
	fetcher()

	<-sync_end
}