tunnel/rpc_reader.go (32 lines of code) (raw):

package tunnel import ( "net" "net/rpc" LOG "github.com/vinllen/log4go" ) type RPCReader struct { server *rpc.Server address string } var rpcReplayer []Replayer func (tunnel *RPCReader) Link(replayers []Replayer) (err error) { rpcReplayer = replayers var listener net.Listener if listener, err = net.Listen("tcp", tunnel.address); err != nil { LOG.Critical("Rpc reader listen listenAddress [%s] failed", tunnel.address) return } tunnel.server = rpc.NewServer() tunnel.server.Register(new(TunnelRPC)) go tunnel.server.Accept(listener) return nil } type TunnelRPC struct { } func (rpc *TunnelRPC) Transfer(message *TMessage, response *int64) error { // hash corresponding replayer and re-shard if message.Shard >= uint32(len(rpcReplayer)) { message.Shard %= uint32(len(rpcReplayer)) } *response = rpcReplayer[message.Shard].Sync(message, nil) return nil }