diff --git a/cmd/testapi/main.go b/cmd/testapi/main.go index 3bb5cc7..a7f89c0 100644 --- a/cmd/testapi/main.go +++ b/cmd/testapi/main.go @@ -65,7 +65,7 @@ type S struct { func (s *S) ServeHTTP(w http.ResponseWriter, r *http.Request) { if err := s.serveHTTP(w, r); err != nil { - log.Println(r.URL.Path, "//", err.Error(), r.Header) + log.Println(r.URL.Path, "//", err.Error()) http.Error(w, err.Error(), http.StatusInternalServerError) } } @@ -124,20 +124,46 @@ func (s *S) injectContext(w http.ResponseWriter, r *http.Request) error { return nil } -func (s *S) serveWS(httpw http.ResponseWriter, httpr *http.Request) error { - ctx := httpr.Context() +func (s *S) serveWS(w http.ResponseWriter, r *http.Request) error { + ctx := r.Context() - c, err := websocket.Accept(httpw, httpr, nil) + c, err := websocket.Accept(w, r, nil) if err != nil { return err } defer c.CloseNow() - if err := c.Write(ctx, 1, []byte("hello world")); err != nil { - return err + for { + select { + case <-ctx.Done(): + return nil + case <-time.After(time.Second): + switch r.URL.Path { + case "/ws/page/a": + if err := c.Write(ctx, 1, []byte(`{"page":"a", "items": [{"name":"x"}, {"name":"y"}]}`)); err != nil { + return err + } + case "/ws/page/a/event/a": + if err := c.Write(ctx, 1, []byte(`{"page":"a", "event":"a", "items": [{"name":"x"}, {"name":"y"}]}`)); err != nil { + return err + } + case "/ws/page/b/event/a": + if err := c.Write(ctx, 1, []byte(`{"page":"b", "event":"a", "items": [{"name":"x", "title":"x1", "tags":[{"k":"k", "v":"v"}, {"k":"K", "v":"V"}, {"k":"kkk","v":"vvv"}]}, {"name":"y", "tags":[{"k":"k", "v":"v"}, {"k":"K", "v":"V"}, {"k":"kkk","v":"vvv"}]}], "help": "hello world"}`)); err != nil { + return err + } + case "/ws/page/b/event/b": + if err := c.Write(ctx, 1, []byte(`{"page":"b", "event":"b", "items": [{"name":"x", "title":"x1", "tags":[{"k":"k", "v":"v"}, {"k":"K", "v":"V"}, {"k":"kkk","v":"vvv"}]}, {"name":"y", "tags":[{"k":"k", "v":"v"}, {"k":"K", "v":"V"}, {"k":"kkk","v":"vvv"}]}], "help": "hello world"}`)); err != nil { + return err + } + default: + if err := c.Write(ctx, 1, []byte(`hello world`)); err != nil { + return err + } + } + } } - return fmt.Errorf("not impl") + return nil } func (s *S) serveV1(w http.ResponseWriter, r *http.Request) error {