package network
import (
"encoding/json"
"net/http"
"time"
owlconfig "github.com/xssed/owlcache/config"
owllog "github.com/xssed/owlcache/log"
owltools "github.com/xssed/owlcache/tools"
)
type OwlResponse struct {
Cmd CommandType
Status ResStatus
Results string
Key string
Data []byte
ResponseHost string
KeyCreateTime time.Time
}
func JsonStrToOwlResponse(json_string string) OwlResponse {
var tmp OwlResponse
err := json.Unmarshal([]byte(json_string), &tmp)
if err != nil {
owllog.OwlLogRun.Info(owltools.JoinString("JsonStrToOwlResponse error:", err.Error()))
}
return tmp
}
func (owlhandler *OwlHandler) ToHttp(w http.ResponseWriter) (http.ResponseWriter, []byte) {
owlhandler.owlresponse.ResponseHost = owltools.JoinString(owlconfig.OwlConfigModel.ResponseHost, ":", owlconfig.OwlConfigModel.Httpport)
w.Header().Set("ResponseHost", owlhandler.owlresponse.ResponseHost)
w.Header().Set("Key", owlhandler.owlresponse.Key)
w.Header().Set("KeyCreateTime", owlhandler.owlresponse.KeyCreateTime.String())
if owlhandler.owlrequest.Cmd == GET || owlhandler.owlrequest.Cmd == PING {
return w, owlhandler.owlresponse.Data
}
w.Header().Set("Content-Type", "application/json; charset=utf-8;")
data, _ := json.Marshal(owlhandler.owlresponse)
return w, data
}
func (owlhandler *OwlHandler) ToGroupHttp(w http.ResponseWriter, r *http.Request) (http.ResponseWriter, []byte) {
if string(owlhandler.owlrequest.Value) != "info" {
return w, owlhandler.owlresponse.Data
}
w.Header().Set("Content-Type", "application/json; charset=utf-8;")
return w, owlhandler.owlresponse.Data
}
func (owlhandler *OwlHandler) ToTcp() []byte {
if owlhandler.owlrequest.Cmd == GET {
if string(owlhandler.owlrequest.Value) != "info" {
return owlhandler.owlresponse.Data
}
}
if owlhandler.owlrequest.Cmd == PING {
return owlhandler.owlresponse.Data
}
owlhandler.owlresponse.ResponseHost = owlconfig.OwlConfigModel.ResponseHost + ":" + owlconfig.OwlConfigModel.Tcpport
data, _ := json.Marshal(owlhandler.owlresponse)
return data
}
func (owlhandler *OwlHandler) ToWebsocket() []byte {
if owlhandler.owlrequest.Cmd == GET {
if string(owlhandler.owlrequest.Value) != "info" {
return owlhandler.owlresponse.Data
}
if len(owlhandler.owlrequest.Pass) > 0 {
owlhandler.owlresponse.Key = owlhandler.owlrequest.Pass
}
}
owlhandler.owlresponse.ResponseHost = owlconfig.OwlConfigModel.ResponseHost + ":" + owlconfig.OwlConfigModel.Tcpport
data, _ := json.Marshal(owlhandler.owlresponse)
return data
}