package sysservice import ( "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 Router(session *HttpSession) PutHttpSession(httpSession *HttpSession) SetServeFile(method HTTP_METHOD, urlpath string, dirname string) error SetFormFileKey(formFileKey string) GetFormFileKey()string } type HttpRouter struct { pathRouter map[HTTP_METHOD] map[string] routerMatchData //url地址,对应本service地址 serveFileData map[string] *routerServeFileData eventReciver event.IEventProcessor 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 allowOrigin bool processTimeout time.Duration } func NewHttpHttpRouter(eventReciver event.IEventProcessor) IHttpRouter { httpRouter := &HttpRouter{} httpRouter.eventReciver = eventReciver httpRouter.pathRouter =map[HTTP_METHOD] map[string] routerMatchData{} httpRouter.serveFileData = map[string] *routerServeFileData{} httpRouter.formFileKey = "file" for i:=METHOD_NONE+1;i