func (i *GameController) process(connection network.Connection, session string) error { message, err := connection.ReadMessage() if err != nil { return err } msession := message.GetSession() if msession != session { return fmt.Errorf("reject message. wait %s, get %s session", session, msession) } mtype := message.GetType() switch mtype { case protocol.PingMessageType: i.output <- message break case protocol.GameInputMessageType: if i.input != nil { message.SetSession(i.player) i.input <- message } break case protocol.GamePlayMessageType: i.processGamePlay(message.(*protocol.GamePlayMessage)) break default: log.Printf("skip message from session %s with type: %s\n", msession, mtype) break } return nil }