| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- package context
- import (
- "encoding/xml"
- "net/http"
- "sync"
- )
- // Context struct
- type Context struct {
- *Config
- Writer http.ResponseWriter
- Request *http.Request
- //accessTokenLock 读写锁 同一个AppID一个
- accessTokenLock *sync.RWMutex
- //jsAPITicket 读写锁 同一个AppID一个
- jsAPITicketLock *sync.RWMutex
- HTTPClient *http.Client
- SHTTPClient *http.Client //SSL client
- }
- // Query 返回键入的url查询值(如果存在)
- func (ctx *Context) Query(key string) string {
- value, _ := ctx.GetQuery(key)
- return value
- }
- // GetQuery 类似于Query(),它返回键入的url查询值
- func (ctx *Context) GetQuery(key string) (string, bool) {
- req := ctx.Request
- if values, ok := req.URL.Query()[key]; ok && len(values) > 0 {
- return values[0], true
- }
- return "", false
- }
- // SetJsAPITicketLock 设置jsAPITicket的lock
- func (ctx *Context) SetJsAPITicketLock(lock *sync.RWMutex) {
- ctx.jsAPITicketLock = lock
- }
- // GetJsAPITicketLock 获取jsAPITicket 的lock
- func (ctx *Context) GetJsAPITicketLock() *sync.RWMutex {
- return ctx.jsAPITicketLock
- }
- var xmlContentType = []string{"application/xml; charset=utf-8"}
- var plainContentType = []string{"text/plain; charset=utf-8"}
- //Render render from bytes
- func (ctx *Context) Render(bytes []byte) {
- //debug
- // fmt.Println("response msg = ", string(bytes))
- ctx.Writer.WriteHeader(200)
- _, err := ctx.Writer.Write(bytes)
- if err != nil {
- panic(err)
- }
- }
- //String render from string
- func (ctx *Context) String(str string) {
- writeContextType(ctx.Writer, plainContentType)
- ctx.Render([]byte(str))
- }
- //XML render to xml
- func (ctx *Context) XML(obj interface{}) {
- writeContextType(ctx.Writer, xmlContentType)
- bytes, err := xml.Marshal(obj)
- if err != nil {
- panic(err)
- }
- ctx.Render(bytes)
- }
- func writeContextType(w http.ResponseWriter, value []string) {
- header := w.Header()
- if val := header["Content-Type"]; len(val) == 0 {
- header["Content-Type"] = value
- }
- }
|