transport.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package transport
  2. import (
  3. "io"
  4. "net/http"
  5. "github.com/googollee/go-engine.io/message"
  6. "github.com/googollee/go-engine.io/parser"
  7. )
  8. type Callback interface {
  9. OnPacket(r *parser.PacketDecoder)
  10. OnClose(server Server)
  11. }
  12. type Creater struct {
  13. Name string
  14. Upgrading bool
  15. Server func(w http.ResponseWriter, r *http.Request, callback Callback) (Server, error)
  16. Client func(r *http.Request) (Client, error)
  17. }
  18. // Server is a transport layer in server to connect client.
  19. type Server interface {
  20. // ServeHTTP handles the http request. It will call conn.onPacket when receive packet.
  21. ServeHTTP(http.ResponseWriter, *http.Request)
  22. // Close closes the transport.
  23. Close() error
  24. // NextWriter returns packet writer. This function call should be synced.
  25. NextWriter(messageType message.MessageType, packetType parser.PacketType) (io.WriteCloser, error)
  26. }
  27. // Client is a transport layer in client to connect server.
  28. type Client interface {
  29. // Response returns the response of last http request.
  30. Response() *http.Response
  31. // NextReader returns packet decoder. This function call should be synced.
  32. NextReader() (*parser.PacketDecoder, error)
  33. // NextWriter returns packet writer. This function call should be synced.
  34. NextWriter(messageType message.MessageType, packetType parser.PacketType) (io.WriteCloser, error)
  35. // Close closes the transport.
  36. Close() error
  37. }