package server

import (
	"io"

	"git.loafle.net/commons_go/rpc/protocol"
)

type RPCServerHandler interface {
	GetContentType(r io.Reader) string
	RegisterCodec(codec protocol.ServerCodec, contentType string)

	OnPreRead(r io.Reader)
	OnPostRead(r io.Reader)

	OnPreWriteResult(w io.Writer, result interface{})
	OnPostWriteResult(w io.Writer, result interface{})

	OnPreWriteError(w io.Writer, err error)
	OnPostWriteError(w io.Writer, err error)

	GetCodec(contentType string) (protocol.ServerCodec, error)
	invoke(codec protocol.RegistryCodec) (result interface{}, err error)
}