func (r *Replica) clientListener(conn net.Conn) { reader := bufio.NewReader(conn) writer := bufio.NewWriter(conn) lock := new(sync.Mutex) var msgType byte //:= make([]byte, 1) var err error for !r.Shutdown && err == nil { if msgType, err = reader.ReadByte(); err != nil { break } switch uint8(msgType) { case genericsmrproto.PROPOSE: prop := new(genericsmrproto.Propose) if err = prop.Unmarshal(reader); err != nil { break } r.ProposeChan <- &Propose{prop, -1, -1, writer, lock} break case genericsmrproto.READ: read := new(genericsmrproto.Read) if err = read.Unmarshal(reader); err != nil { break } //r.ReadChan <- read break case genericsmrproto.PROPOSE_AND_READ: pr := new(genericsmrproto.ProposeAndRead) if err = pr.Unmarshal(reader); err != nil { break } //r.ProposeAndReadChan <- pr break } } if err != nil && err != io.EOF { log.Println("Error when reading from client connection:", err) } }