func NewService(dsc *servicedescriptor.ServiceDescriptor, servicetype string, cfg *config.Config, codecs []byte) (s *Service) { s = new(Service) if cfg.UUID == "" { id, _ := uid.NewV4() cfg.UUID = id.String() } s.uuid = cfg.UUID s.logger = log.New(cfg.Logger(), fmt.Sprintf("service %s ", s.uuid), log.Lshortfile) s.serviceDescriptor = dsc s.logger.Println("ServiceDesctiptor TagsSet is", dsc.AsTagSet()) s.servicetype = servicetype s.codecs = codecs s.newpeers = eventual2go.NewStreamController() s.gonepeers = eventual2go.NewStreamController() s.incoming = map[string]*connection.Incoming{} s.in = eventual2go.NewStreamController() s.connectedServices = map[string]*ServiceConnection{} s.connected = eventual2go.NewCompleter() s.disconnected = eventual2go.NewCompleter() s.remove = eventual2go.NewCompleter() s.r = eventual2go.NewReactor() s.r.React("service_arrived", s.serviceArrived) s.r.React("service_gone", s.serviceGone) s.r.React("announce_finish", s.announced) s.r.React("service_shake_hand", s.serviceHandshake) s.r.AddStream("service_shake_hand", s.in.Where(messages.Is(messages.HELLO))) s.r.React("service_shake_hand_reply", s.serviceHandShakeReply) s.r.AddStream("service_shake_hand_reply", s.in.Where(messages.Is(messages.HELLO_OK))) s.createIncoming(cfg) s.createAnnouncer(cfg) return }
func (s *Service) IncomingMessages(t messages.MessageType) *eventual2go.Stream { return s.in.Where(messages.Is(t)) }