software steht so weit.
jetzt build + docker build und testen
This commit is contained in:
1 parent
42f0c0accb
commit
ca6cdcca63
90 files changed
+10298
-480
No files matched your search
+16
-6
@@ -1,6 +1,7 @@
|
||||
package stream
|
||||
|
||||
import (
|
||||
"crypto/ed25519"
|
||||
"errors"
|
||||
"fmt"
|
||||
"net/http"
|
||||
@@ -41,6 +42,9 @@ type Hub struct {
|
||||
// nur ein weiteres OnConnect, kein OnDisconnect.
|
||||
OnConnect func(nodeID string)
|
||||
OnDisconnect func(nodeID string)
|
||||
// SigningKey: Ist er gesetzt, signiert der Hub jedes Event, nachdem er ID,
|
||||
// Zeitstempel und Knoten-ID ergänzt hat.
|
||||
SigningKey ed25519.PrivateKey
|
||||
|
||||
mu sync.Mutex
|
||||
conns map[string]*conn
|
||||
@@ -86,6 +90,15 @@ func (h *Hub) Serve(w http.ResponseWriter, r *http.Request, nodeID string) error
|
||||
return ErrHubClosed
|
||||
}
|
||||
|
||||
// Erst registrieren, dann die Header senden: Sobald der Client die
|
||||
// Antwort sieht, muss der Knoten als verbunden gelten (der Agent schickt
|
||||
// direkt danach seinen Zustand).
|
||||
c := &conn{frames: make(chan []byte, h.bufferSize()), done: make(chan struct{})}
|
||||
if err := h.register(nodeID, c); err != nil {
|
||||
return err
|
||||
}
|
||||
defer h.unregister(nodeID, c)
|
||||
|
||||
rc := http.NewResponseController(w)
|
||||
w.Header().Set("Content-Type", "text/event-stream")
|
||||
w.Header().Set("Cache-Control", "no-cache")
|
||||
@@ -98,12 +111,6 @@ func (h *Hub) Serve(w http.ResponseWriter, r *http.Request, nodeID string) error
|
||||
return err
|
||||
}
|
||||
|
||||
c := &conn{frames: make(chan []byte, h.bufferSize()), done: make(chan struct{})}
|
||||
if err := h.register(nodeID, c); err != nil {
|
||||
return err
|
||||
}
|
||||
defer h.unregister(nodeID, c)
|
||||
|
||||
ticker := time.NewTicker(h.keepAlive())
|
||||
defer ticker.Stop()
|
||||
write := func(p []byte) error {
|
||||
@@ -185,6 +192,9 @@ func (h *Hub) Send(nodeID string, ev Event) error {
|
||||
ev.Timestamp = time.Now().Unix()
|
||||
}
|
||||
ev.NodeID = nodeID
|
||||
if h.SigningKey != nil {
|
||||
ev = SignEvent(ev, h.SigningKey)
|
||||
}
|
||||
frame, err := encode(ev)
|
||||
if err != nil {
|
||||
return err
|
||||
|
||||
Reference in new issue
Block a user