func (mod *htmod) Run() { mod.Hub = hub.New() mod.docs = &docs{all: make(map[ws.Id]*otdoc)} go func() { for e := range mod.Hub.Route { mod.route(e.Msg, e.From) } }() mod.src.SignalReports(func(r *gosrc.Report) { m, err := hub.Marshal("report", r) if err != nil { log.Println(err) return } mod.SendMsg(m, hub.Group) }) http.Handle("/ws", mod.Hub) var err error server := &http.Server{ Addr: mod.conf.Addr, } if mod.conf.Https { if mod.conf.CAFile != "" { pemByte, err := ioutil.ReadFile(mod.conf.CAFile) if err != nil { log.Fatalf("reading ca file:\n\t%s\n", err) } block, _ := pem.Decode(pemByte) cert, err := x509.ParseCertificate(block.Bytes) if err != nil { log.Fatalf("parsing ca file:\n\t%s\n", err) } pool := x509.NewCertPool() pool.AddCert(cert) server.TLSConfig = &tls.Config{ ClientAuth: tls.RequireAndVerifyClientCert, ClientCAs: pool, CipherSuites: ciphers, } } err = server.ListenAndServeTLS(mod.conf.CertFile, mod.conf.KeyFile) } else { err = server.ListenAndServe() } if err != nil { log.Fatalf("http %s\n", err) } }
func (mod *htmod) Run() { mod.Hub = hub.New() mod.docs = &docs{all: make(map[ws.Id]*otdoc)} go func() { for e := range mod.Hub.Route { mod.route(e.Msg, e.From) } }() mod.src.SignalReports(func(r *gosrc.Report) { m, err := hub.Marshal("report", r) if err != nil { log.Println(err) return } mod.SendMsg(m, hub.Group) }) http.Handle("/ws", mod.Hub) err := http.ListenAndServe(mod.addr, nil) if err != nil { log.Fatalf("http %s\n", err) } }