package f5 import ( "net/http" "q5" ) type Context struct { s *HttpServer w *http.ResponseWriter r *http.Request c *middleware l *q5.ListHead aborted bool suspended bool userData map[string]interface{} } func (this *Context) do() { this.l.ForEach( func(data interface{}) bool { m := data.(*middleware) this.c = m m.handlerFunc(this) return !this.aborted && !this.suspended }) } func (this *Context) Next() { this.suspended = true this.l.ForEachFrom(this.c.entry.Next(), func(data interface{}) bool { m := data.(*middleware) this.c = m m.handlerFunc(this) return !this.aborted }) } func (this *Context) Abort() { this.aborted = true } func (this *Context) Method() string { return this.r.Method } func (this *Context) GetRemoteAddr() string { return q5.GetRequestRemoteAddr(this.r) } func (this *Context) Request(name string) string { return q5.Request(this.r, name) } func (this *Context) GetBody() string { return q5.GetPostBody(this.r) } func (this *Context) Header(name string) string { if val, ok := this.r.Header[name]; ok { return val[0] } else { return "" } } func (this *Context) Response(data string) { q5.Response(this.w, data) } func (this *Context)ResponseErr(errCode int32, errMsg string) { q5.ResponseErr(this.w, errCode, errMsg) } func (this *Context) ResponseOk() { q5.ResponseOk(this.w) } func (this *Context) ResponseInt32Ok(key string, val int32) { q5.ResponseInt32Ok(this.w, key, val) } func (this *Context) Set(key string, val interface{}) { if this.userData == nil { this.userData = make(map[string]interface{}) } this.userData[key] = val } func (this *Context) Get(key string) interface{} { if this.userData == nil { return nil } if val, ok := this.userData[key]; ok { return val } else { return nil } }