1 // (c) Bernhard Tittelbach, 2013
6 zmq "github.com/vaughan0/go-zmq"
11 type hippocampus map[string]interface{}
13 func BrainCenter( zmq_ctx *zmq.Context, listen_addr string, event_chan <- chan interface{} ) {
14 zbrain_chans, err := ZmqsBindNewReplySocket(zmq_ctx, listen_addr)
15 if err != nil { panic(err) }
16 defer zbrain_chans.Close()
17 h := make(hippocampus,5)
20 case event, ec_still_open := <- event_chan:
21 if ! ec_still_open { return }
22 h[r3events.NameOfStruct(event)] = event
23 log.Printf("Brain: stored %s, %s", r3events.NameOfStruct(event), event)
25 case brain_request := <- zbrain_chans.In():
26 if len(brain_request) == 0 { continue }
27 requested_eventname := string(brain_request[0])
28 log.Printf("Brain: received request: %s", requested_eventname)
29 retr_event, is_in_map := h[requested_eventname]
31 data, err := r3events.MarshalEvent2ByteByte(retr_event)
33 zbrain_chans.Out() <- data
36 if Syslog_ != nil {Syslog_.Print("BrainCenter", err)}
39 zbrain_chans.Out() <- [][]byte{[]byte("UNKNOWN")}