func (c *Callee) InvokeAndStoreResult(cp *message.CallPayload, fn Thunk) error {
	ttl := cp.TTLAfterRead
	start := time.Now()
	v, err := fn(cp)
	if remain := ttl - time.Now().Sub(start); remain > 0 {
		return c.storeResult(cp, v, err, remain)
	}
	return ErrCallExpired
}
InvokeAndStoreResult processes the provided call payload by calling
fn and storing the result so that it can be sent back to the caller.
If the call timeout is exceeded, the result is dropped and
ErrCallExpired is returned.
package callee
import (
	"encoding/json"
	"errors"
	"time"
	"github.com/mna/juggler/broker"
	"github.com/mna/juggler/message"
)
var ErrCallExpired = errors.New("juggler/callee: call expired")
type Thunk func(*message.CallPayload) (interface{}, error)
type Callee struct {
	_ struct{}
	Broker broker.CalleeBroker
}