Documentation ¶
Index ¶
- Constants
- Variables
- func Error(w ResponseWriter, err string, code int)
- func Nonce() (nonce string, err error)
- func ParseIOTVersion(vers string) (major, minor int, ok bool)
- type Client
- func (T *Client) Do(req *Request) (resp *Response, err error)
- func (T *Client) DoCtx(ctx context.Context, req *Request) (resp *Response, err error)
- func (T *Client) Get(url string, header Header) (resp *Response, err error)
- func (T *Client) GetCtx(ctx context.Context, urlstr string, header Header) (resp *Response, err error)
- func (T *Client) Post(url string, header Header, body interface{}) (resp *Response, err error)
- func (T *Client) PostCtx(ctx context.Context, urlstr string, header Header, body interface{}) (resp *Response, err error)
- type CloseNotifier
- type ConnState
- type DotContexter
- type DynamicTemplateFunc
- type DynamicTemplater
- type Flusher
- type Globaler
- type Handler
- type HandlerFunc
- type Header
- type Hijacker
- type Launcher
- type LogLevel
- type RawControler
- type Request
- func (T *Request) Context() context.Context
- func (T *Request) GetBasicAuth() (username, password string, ok bool)
- func (T *Request) GetBody(i interface{}) error
- func (T *Request) GetNonce() string
- func (T *Request) GetTokenAuth() string
- func (T *Request) ProtoAtLeast(major, minor int) bool
- func (T *Request) RequestConfig(nonce string) (riot *RequestConfig, err error)
- func (T *Request) SetBasicAuth(username, password string)
- func (T *Request) SetBody(i interface{}) error
- func (T *Request) SetTokenAuth(token string)
- func (T *Request) WithContext(ctx context.Context) *Request
- type RequestConfig
- type Response
- type ResponseConfig
- type ResponseWriter
- type RoundTripper
- type Route
- type Server
- type ServerHandlerDynamic
- func (T *ServerHandlerDynamic) Execute(bufw io.Writer, dock interface{}) (err error)
- func (T *ServerHandlerDynamic) Parse(r io.Reader) (err error)
- func (T *ServerHandlerDynamic) ParseFile(path string) error
- func (T *ServerHandlerDynamic) ParseText(name, content string) error
- func (T *ServerHandlerDynamic) ServeIOT(rw ResponseWriter, req *Request)
- type Session
- type Sessioner
- type Sessions
- type Site
- type SiteMan
- type SitePool
- type TemplateDot
- func (T *TemplateDot) Context() context.Context
- func (T *TemplateDot) Defer(call interface{}, args ...interface{}) error
- func (T *TemplateDot) Free()
- func (T *TemplateDot) Global() Globaler
- func (T *TemplateDot) Header() Header
- func (T *TemplateDot) Hijack() (net.Conn, *bufio.ReadWriter, error)
- func (T *TemplateDot) Launch() RoundTripper
- func (T *TemplateDot) Request() *Request
- func (T *TemplateDot) ResponseWriter() ResponseWriter
- func (T *TemplateDot) RootDir(upath string) string
- func (T *TemplateDot) Session(token string) Sessioner
- func (T *TemplateDot) Swap() *vmap.Map
- func (T *TemplateDot) WithContext(ctx context.Context)
- type TemplateDoter
Constants ¶
View Source
const DefaultLineBytes = 1 << 20 // 1 MB
默认读取数据行大小
Variables ¶
View Source
var ( ErrBodyNotAllowed = errors.New("viot: The request method or status code is not allowed") ErrGetBodyed = errors.New("viot: Does not support repeated reading of body") ErrHijacked = errors.New("viot: Connection has been hijacked") ErrLaunched = errors.New("viot: The connection is waiting for the response of the active request") ErrRwaControl = errors.New("viot: Processing the original data") ErrAbortHandler = errors.New("viot: Abort processing") ErrServerClosed = errors.New("viot: Server is down") ErrDoned = errors.New("viot: Has been completed") ErrConnClose = errors.New("viot: Device connection is closed") ErrHostInvalid = errors.New("host invalid") ErrURIInvalid = errors.New("URI invalid") ErrProtoInvalid = errors.New("proto Invalid") ErrMethodInvalid = errors.New("method Invalid") )
View Source
var ( ServerContextKey = &contextKey{"iot-server"} // 服务器 LocalAddrContextKey = &contextKey{"local-addr"} // 监听地址 SiteContextKey = &contextKey{"iot-site"} // 网站上下文 )
上下文中使用的key
View Source
var DefaultSitePool = NewSitePool() // 池(默认)
Functions ¶
func Error ¶
func Error(w ResponseWriter, err string, code int)
快速设置错误
w ResponseWriter 响应 err string 错误字符串 code int 错误代码
Types ¶
type Client ¶
type Client struct { Dialer vconnpool.Dialer // 拨号 Host string // Host Addr string // 服务器地址 WriteDeadline time.Duration // 写入连接超时 ReadDeadline time.Duration // 读取连接超时 }
func (*Client) DoCtx ¶
自定义请求(上下文)
ctx context.Context 上下文 req *Request 请求 resp *Response 响应 err error 错误
func (*Client) GetCtx ¶
func (T *Client) GetCtx(ctx context.Context, urlstr string, header Header) (resp *Response, err error)
快速读取(上下文)
ctx context.Context 上下文 urlstr string 网址 header Header 标头 resp *Response 响应 err error 错误
type DotContexter ¶
type DynamicTemplateFunc ¶
type DynamicTemplateFunc func(*ServerHandlerDynamic) DynamicTemplater
type DynamicTemplater ¶
type HandlerFunc ¶
type HandlerFunc func(ResponseWriter, *Request)
处理函数
func (HandlerFunc) ServeIOT ¶
func (T HandlerFunc) ServeIOT(w ResponseWriter, r *Request)
type Hijacker ¶
type Hijacker interface {
Hijack() (net.Conn, *bufio.ReadWriter, error) // 劫持
}
劫持接口
type RawControler ¶ added in v2.3.0
源控制,用于临时处理原始数据
type Request ¶
type Request struct { Host string // 身份 Method string // 方法 RequestURI string // 请求URL URL *url.URL // 路径 Proto string // 协议,默认IOT/1.1 ProtoMajor int // 协议大版号 ProtoMinor int // 协议小版号 Header Header // 标头 TLS *tls.ConnectionState // TLS RemoteAddr string // 远程IP地址 Close bool // 客户要求一次性连接 // contains filtered or unexported fields }
func NewRequest ¶ added in v2.3.0
新的请求
method, url string 方法,地址(viot://host/path) body interface{} 数据 *Request, error 请求,错误
func NewRequestWithContext ¶ added in v2.3.0
func NewRequestWithContext(ctx context.Context, method, urlStr string, body interface{}) (*Request, error)
新的请求
ctx context.Context 上下文 method, urlStr string 方法,地址(viot://host/path) body interface{} 数据 *Request, error 请求,错误
func ReadRequest ¶
读取请求数据
b io.Reader 需解析的数据,重要提醒:不要包含多个json块,它只能解析一个json块,其它数据块会被丢弃。这会清空你的io.Reader。 req *Request 请求 err error 错误
func (*Request) RequestConfig ¶
func (T *Request) RequestConfig(nonce string) (riot *RequestConfig, err error)
请求,发往设备的请求
nonce string 编号 riot *RequestConfig 发往设备的请求 err error 错误
type RequestConfig ¶
type RequestConfig struct { Nonce string `json:"nonce"` //-,omitempty,string,number,boolean Proto string `json:"proto"` Method string `json:"method"` Path string `json:"path"` Host string `json:"host"` Header Header `json:"header"` // contains filtered or unexported fields }
iot接收或发送数据格式
func (*RequestConfig) Marshal ¶
func (T *RequestConfig) Marshal() ([]byte, error)
编码,字节末尾追加上一个 \\n 字节
[]byte 编码后的字节 error 错误
func (*RequestConfig) SetBody ¶
func (T *RequestConfig) SetBody(i interface{})
设置主体
i interface{} 主体信息
func (*RequestConfig) Unmarshal ¶
func (T *RequestConfig) Unmarshal(data []byte) error
解码
data []byte 编码后的字节 error 错误
type Response ¶
type Response struct { Status int // 状态码 Header Header // 标头 Body interface{} // 主体 Close bool // 服务器关闭连接 Request *Request // 请求 // contains filtered or unexported fields }
响应
func ReadResponse ¶
解析响应
b io.Reader 需解析的数据,重要提醒:不要包含多个json块,它只能解析一个json块,其它数据块会被丢弃。这会清空你的io.Reader。 res *Response 响应 err error 错误
func (*Response) ResponseConfig ¶
func (T *Response) ResponseConfig(nonce string) (riot *ResponseConfig, err error)
转IOT支持的格式
nonce string 编号 riot *ResponseConfig IOT响应数据格式 err error 错误
func (*Response) WriteAt ¶ added in v2.3.0
func (T *Response) WriteAt(w ResponseWriter)
写入到
w ResponseWriter T响应写w
type ResponseConfig ¶
type ResponseConfig struct { Nonce string `json:"nonce"` //-,omitempty,string,number,boolean Status int `json:"status"` Header Header `json:"header"` Body interface{} `json:"body,omitempty"` }
func (*ResponseConfig) Marshal ¶ added in v2.3.0
func (T *ResponseConfig) Marshal() ([]byte, error)
编码,字节末尾追加上一个 \\n 字节
[]byte 编码后的字节 error 错误
type ResponseWriter ¶
type ResponseWriter interface { Header() Header // 标头 Status(int) // 状态 SetBody(interface{}) error // 主体 }
响应写入接口
type RoundTripper ¶
type Route ¶
type Route struct { HandlerError HandlerFunc // contains filtered or unexported fields }
func (*Route) HandleFunc ¶
func (T *Route) HandleFunc(url string, handler func(w ResponseWriter, r *Request))
HandleFunc 绑定处理函数,匹配的网址支持正则,这说明你要严格的检查。
url string 网址,支持正则匹配 handler func(w ResponseWriter, r *Request) 处理函数
func (*Route) ServeIOT ¶
func (T *Route) ServeIOT(w ResponseWriter, r *Request)
ServeIOT 服务IOT
w ResponseWriter 响应 r *Request 请求
func (*Route) SetSiteMan ¶ added in v2.3.5
SetSiteMan 设置站点管理,将会携带在请求上下文中 siteMan *SiteMan 站点
type Server ¶
type Server struct { Addr string // 如果空,TCP监听的地址是,“:8000” Handler Handler // 如果nil,处理器调用,http.DefaultServeMux BaseContext func(net.Listener) context.Context // 监听上下文 ConnContext func(context.Context, net.Conn) (context.Context, net.Conn, error) // 连接钩子 ConnState func(net.Conn, ConnState) // 每一个连接跟踪 HandlerRequest func(b io.Reader) (req *Request, err error) // 处理请求 HandlerResponse func(b io.Reader) (res *Response, err error) // 处理响应 ErrorLog *log.Logger // 错误?默认是 os.Stderr ErrorLogLevel LogLevel // 日志错误级别 ReadTimeout time.Duration // 求读取之前,最长期限超时 WriteTimeout time.Duration // 响应写入之前,最大持续时间超时 IdleTimeout time.Duration // 空闲时间,等待用户重新请求 TLSNextProto map[string]func(*Server, *tls.Conn, Handler) // TLS劫持,["v3"]=function(自身, TLS连接, Handler) MaxLineBytes int // 限制读取行数据大小 // contains filtered or unexported fields }
服务器
func (*Server) RegisterOnShutdown ¶
func (T *Server) RegisterOnShutdown(f func())
注册更新事件
f func() 服务下线时调用此函数
type ServerHandlerDynamic ¶
type ServerHandlerDynamic struct { // 必须的 RootPath string // 根目录 PagePath string // 主模板文件路径 // 可选的 Site *Site // 网站配置 Context context.Context // 上下文 Module map[string]DynamicTemplateFunc // 支持更动态文件类型 ReadFile func(u *url.URL, filePath string) (io.Reader, time.Time, error) // 读取文件。仅在 .ServeHTTP 方法中使用 ReplaceParse func(name string, p []byte) []byte // 替换解析 // contains filtered or unexported fields }
ServerHandlerDynamic 处理动态页面文件
func (*ServerHandlerDynamic) Execute ¶
func (T *ServerHandlerDynamic) Execute(bufw io.Writer, dock interface{}) (err error)
Execute 执行模板
bufw *bytes.Buffer 模板返回数据 dock interface{} 与模板对接接口 error 错误
func (*ServerHandlerDynamic) Parse ¶
func (T *ServerHandlerDynamic) Parse(r io.Reader) (err error)
Parse 解析模板
r io.Reader 模板内容 error 错误
func (*ServerHandlerDynamic) ParseFile ¶
func (T *ServerHandlerDynamic) ParseFile(path string) error
ParseFile 解析模板
path string 模板文件路径,如果为空,默认使用RootPath,PagePath字段 error 错误
func (*ServerHandlerDynamic) ParseText ¶
func (T *ServerHandlerDynamic) ParseText(name, content string) error
ParseText 解析模板
name, content string 模板名称, 模板内容 error 错误
func (*ServerHandlerDynamic) ServeIOT ¶
func (T *ServerHandlerDynamic) ServeIOT(rw ResponseWriter, req *Request)
ServeIOT 服务IOT
rw ResponseWriter 响应 req *Request 请求
type SitePool ¶ added in v2.3.0
type SitePool struct {
*vweb.SitePool
}
SitePool 网站池
func NewSitePool ¶ added in v2.3.0
func NewSitePool() *SitePool
type TemplateDot ¶
type TemplateDot struct { R *Request // 请求 W ResponseWriter // 响应 Site *Site // 站点配置 Writed bool // 表示已经调用写入到客户端。这个是只读的 // contains filtered or unexported fields }
模板点
func (*TemplateDot) Context ¶
func (T *TemplateDot) Context() context.Context
Context 上下文
context.Context 上下文
func (*TemplateDot) Defer ¶
func (T *TemplateDot) Defer(call interface{}, args ...interface{}) error
Defer 在用户会话时间过期后,将被调用。
call interface{} 函数 args ... interface{} 参数或更多个函数是函数的参数 error 错误 例: .Defer(fmt.Println, "1", "2") .Defer(fmt.Printf, "%s", "汉字")
func (*TemplateDot) Hijack ¶
func (T *TemplateDot) Hijack() (net.Conn, *bufio.ReadWriter, error)
劫持连接
net.Conn 原连接 *bufio.ReadWriter 读取缓冲 error 错误
func (*TemplateDot) Launch ¶
func (T *TemplateDot) Launch() RoundTripper
Launch 发射数据到设备
RoundTripper 转发
func (*TemplateDot) ResponseWriter ¶
func (T *TemplateDot) ResponseWriter() ResponseWriter
ResponseWriter 数据写入响应,调用这个接口后,模板中的内容就不会显示页客户端去
ResponseWriter 响应
func (*TemplateDot) RootDir ¶
func (T *TemplateDot) RootDir(upath string) string
RootDir 家的根目录
upath string 页面路径 string 根目录
func (*TemplateDot) Session ¶
func (T *TemplateDot) Session(token string) Sessioner
Session 用户的会话缓存
token string 令牌 Sessioner 会话缓存
func (*TemplateDot) WithContext ¶
func (T *TemplateDot) WithContext(ctx context.Context)
WithContext 替换上下文
ctx context.Context 上下文
type TemplateDoter ¶
type TemplateDoter interface { RootDir(path string) string // 家的根目录 Request() *Request // 用户的请求信息 Header() Header // 标头 ResponseWriter() ResponseWriter // 数据写入响应 Launch() RoundTripper // 发射 Hijack() (net.Conn, *bufio.ReadWriter, error) // 劫持 Session(token string) Sessioner // 用户的会话缓存 Global() Globaler // 全站缓存 Swap() *vmap.Map // 信息交换 Defer(call interface{}, args ...interface{}) error // 退回调用 DotContexter // 上下文 }
TemplateDoter 可以在模本中使用的方法
Source Files ¶
Click to show internal directories.
Click to hide internal directories.