func (rh *rpcHandler) Step(in StepData, out *StepData) error {
	rh.lock.RLock()
	event, ok := rh.events[in.EventId]
	rh.lock.RUnlock()
	if !ok {
		return fmt.Errorf("no running event %d", in.EventId)
	}
	event.ipc <- in.Data
	outStr := <-event.ipc
	*out = StepData{EventId: in.EventId, Data: outStr}
	return nil
}
Step carries a callback's answer back from Kong to the plugin,
the return value is either a new callback request or a finish signal.

RPC exported method
package server
import (
	"fmt"
	"github.com/Kong/go-pdk"
)
type StartEventData struct {
	InstanceId int     
	EventName  string  
}
type eventData struct {
	id       int               
	instance *instanceData     
	ipc      chan interface{}  
	pdk      *pdk.PDK          
}
func (rh *rpcHandler) addEvent(event *eventData) {
	rh.lock.Lock()
	defer rh.lock.Unlock()
	event.id = rh.nextEventId
	rh.nextEventId++
	rh.events[event.id] = event
}
type StepData struct {
	EventId int          
	Data    interface{}  
}