9 // Maintains a mapping of transaction IDs to handlers.
10 type Dispatcher struct {
12 transactions map[TransactionId]Transaction
16 func (me *Dispatcher) Dispatch(b []byte) error {
17 buf := bytes.NewBuffer(b)
25 if t, ok := me.transactions[rh.TransactionId]; ok {
26 t.h(DispatchedResponse{
28 Body: append([]byte(nil), buf.Bytes()...),
32 return fmt.Errorf("unknown transaction id %v", rh.TransactionId)
36 func (me *Dispatcher) forgetTransaction(id TransactionId) {
39 delete(me.transactions, id)
42 func (me *Dispatcher) NewTransaction(h TransactionResponseHandler) Transaction {
46 id := RandomTransactionId()
47 if _, ok := me.transactions[id]; ok {
55 if me.transactions == nil {
56 me.transactions = make(map[TransactionId]Transaction)
58 me.transactions[id] = t
63 type DispatchedResponse struct {