func (self *ProtobufServer) handleRequest(conn net.Conn, messageSize int64, buff *bytes.Buffer) error { reader := io.LimitReader(conn, messageSize) _, err := io.Copy(buff, reader) if err != nil { return err } request, err := protocol.DecodeRequest(buff) if err != nil { return err } log.Debug("Received %s", request) return self.requestHandler.HandleRequest(request, conn) }
func (prs *PingResponseServer) handleConnection(conn net.Conn) { message := make([]byte, 0, MAX_REQUEST_SIZE) buff := bytes.NewBuffer(message) var messageSizeU uint32 for { buff.Reset() err := binary.Read(conn, binary.LittleEndian, &messageSizeU) if err != nil { log.Error("Error reading from connection (%s): %s", conn.RemoteAddr().String(), err) return } _, err = io.CopyN(buff, conn, int64(messageSizeU)) if err != nil { break } request, err := protocol.DecodeRequest(buff) if err != nil { break } switch *request.Type { case protocol.Request_HEARTBEAT: response := &protocol.Response{RequestId: request.Id, Type: protocol.Response_HEARTBEAT.Enum()} data, err := response.Encode() if err != nil { panic(err) } binary.Write(conn, binary.LittleEndian, uint32(len(data))) _, err = conn.Write(data) default: panic("Not a heartbeat request") } } conn.Close() }