10 // Maintains a mapping of transaction IDs to handlers.
11 type Dispatcher struct {
13 transactions map[TransactionId]Transaction
17 func (me *Dispatcher) Dispatch(b []byte, addr net.Addr) error {
18 buf := bytes.NewBuffer(b)
26 if t, ok := me.transactions[rh.TransactionId]; ok {
27 t.h(DispatchedResponse{
29 Body: append([]byte(nil), buf.Bytes()...),
34 return fmt.Errorf("unknown transaction id %v", rh.TransactionId)
38 func (me *Dispatcher) forgetTransaction(id TransactionId) {
41 delete(me.transactions, id)
44 func (me *Dispatcher) NewTransaction(h TransactionResponseHandler) Transaction {
48 id := RandomTransactionId()
49 if _, ok := me.transactions[id]; ok {
57 if me.transactions == nil {
58 me.transactions = make(map[TransactionId]Transaction)
60 me.transactions[id] = t
65 type DispatchedResponse struct {
67 // Response payload, after the header.
69 // Response source address