package sysservice import ( "encoding/json" "fmt" "github.com/duanhf2012/origin/event" "github.com/duanhf2012/origin/network" "github.com/duanhf2012/origin/service" "github.com/duanhf2012/origin/util/uuid" "io" "io/ioutil" "net/http" "os" "strings" "time" ) var Default_ReadTimeout time.Duration = time.Second*10 var Default_WriteTimeout time.Duration = time.Second*10 var Default_ProcessTimeout time.Duration = time.Second*10 var Default_HttpRouter *HttpRouter= &HttpRouter{} //http redirect type HttpRedirectData struct { Url string CookieList []*http.Cookie } type HTTP_METHOD int const ( METHOD_NONE HTTP_METHOD = iota METHOD_GET METHOD_POST METHOD_INVALID ) type HttpHandle func(session *HttpSession) type routerMatchData struct { matchURL string httpHandle HttpHandle } type routerServeFileData struct { matchUrl string localPath string method HTTP_METHOD } type IHttpRouter interface { //RegRouter(method HTTP_METHOD, url string, handle HttpHandle) bool GET(url string, handle HttpHandle) bool POST(url string, handle HttpHandle) bool Router(session *HttpSession) SetServeFile(method HTTP_METHOD, urlpath string, dirname string) error SetFormFileKey(formFileKey string) GetFormFileKey()string AddHttpFiltrate(FiltrateFun HttpFiltrate) bool } type HttpRouter struct { pathRouter map[HTTP_METHOD] map[string] routerMatchData //url地址,对应本service地址 serveFileData map[string] *routerServeFileData //eventReciver event.IEventHandler httpFiltrateList [] HttpFiltrate formFileKey string } type HttpSession struct { httpRouter IHttpRouter r *http.Request w http.ResponseWriter //parse result mapParam map[string]string body []byte //processor result statusCode int msg []byte fileData *routerServeFileData redirectData *HttpRedirectData sessionDone chan *HttpSession } type HttpService struct { service.Service httpServer network.HttpServer postAliasUrl map[HTTP_METHOD] map[string]routerMatchData //url地址,对应本service地址 httpRouter IHttpRouter listenAddr string corsHeader *CORSHeader processTimeout time.Duration } func (slf *HttpService) AddFiltrate(FiltrateFun HttpFiltrate) bool { return slf.httpRouter.AddHttpFiltrate(FiltrateFun) } func NewHttpHttpRouter() IHttpRouter { httpRouter := &HttpRouter{} //httpRouter.eventReciver = eventHandler httpRouter.pathRouter =map[HTTP_METHOD] map[string] routerMatchData{} httpRouter.serveFileData = map[string] *routerServeFileData{} httpRouter.formFileKey = "file" for i:=METHOD_NONE+1;i