diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index a4c49d9..a1a9417 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -16,121 +16,13 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
@@ -153,7 +45,6 @@
-
@@ -161,8 +52,11 @@
-
+
+
+
+
@@ -177,8 +71,8 @@
-
-
+
+
@@ -197,6 +91,7 @@
+
@@ -209,9 +104,58 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
@@ -224,8 +168,12 @@
+
+
+
+
@@ -242,7 +190,16 @@
-
+
+
+
+
+
+
+
+
+
+
@@ -334,6 +291,14 @@
false
+
+
+
+
+
+
+
+
@@ -383,6 +348,7 @@
+
1500458878821
@@ -447,11 +413,32 @@
1502360110313
-
+
+ 1502936078634
+
+
+
+ 1502936078634
+
+
+ 1502936115199
+
+
+
+ 1502936115199
+
+
+ 1502937437340
+
+
+
+ 1502937437340
+
+
-
+
@@ -463,18 +450,18 @@
-
+
-
+
+
-
-
+
@@ -496,7 +483,8 @@
-
+
+
@@ -505,58 +493,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -569,7 +505,7 @@
-
+
@@ -585,9 +521,7 @@
-
-
-
+
@@ -628,7 +562,7 @@
-
+
@@ -644,9 +578,7 @@
-
-
-
+
@@ -677,7 +609,7 @@
-
+
@@ -696,9 +628,7 @@
-
-
-
+
@@ -732,7 +662,7 @@
-
+
@@ -755,9 +685,7 @@
-
-
-
+
@@ -788,7 +716,7 @@
-
+
@@ -804,17 +732,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
-
+
+
+
@@ -822,33 +779,29 @@
-
-
-
+
-
+
-
-
-
+
-
-
+
+
-
+
@@ -856,14 +809,6 @@
-
-
-
-
-
-
-
-
@@ -874,14 +819,6 @@
-
-
-
-
-
-
-
-
@@ -893,27 +830,59 @@
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
diff --git a/app.go b/app.go
deleted file mode 100644
index 4dcf173..0000000
--- a/app.go
+++ /dev/null
@@ -1,261 +0,0 @@
-package hotime
-
-import (
- "bytes"
- "database/sql"
- "encoding/json"
- "io/ioutil"
- "net/http"
- "os"
- "path/filepath"
- "strconv"
- "strings"
-)
-
-type App struct {
- Router
- Error
- Port string //端口号
- connectListener func(context Context) bool //所有的访问监听,true按原计划继续使用,false表示有监听器处理
- connectDbFunc func(err ...*Error) *sql.DB
- configPath string
- Config Map
- Db HoTimeDB
- CacheIns
- sessionLong CacheIns
- sessionShort CacheIns
-}
-
-//启动实例
-func (this *App) Run(router Router) {
- this.Router = router
- //this.Port = port
- this.Port = this.Config.GetString("port")
-
- if this.connectDbFunc != nil {
- this.Db.SetConnect(this.connectDbFunc)
- }
-
- if this.CacheIns == nil {
- this.CacheIns = CacheIns(&CacheMemory{Map: Map{}, Time: this.Config.GetInt64("cacheShortTime")})
- }
-
- //http.HandleFunc("/", this.handler)
- run(this)
-
-}
-
-//启动实例
-func (this *App) SetConnectDB(connect func(err ...*Error) *sql.DB) {
- this.connectDbFunc = connect
-}
-
-//设置配置文件路径全路径或者相对路径
-func (this *App) SetSession(short CacheIns, Long CacheIns) {
- this.sessionLong = Long
- this.sessionShort = short
-
-}
-
-//默认配置缓存和session实现
-func (this *App) SetDefault(connect func(err ...*Error) *sql.DB) {
- this.SetConfig()
- this.connectDbFunc = connect
- //防止手动设置缓存误伤
- if this.CacheIns == nil {
- this.SetCache(CacheIns(&CacheMemory{}))
- }
- //防止手动设置session误伤
- if this.sessionShort == nil && this.sessionLong == nil {
- if this.connectDbFunc == nil {
- this.SetSession(CacheIns(&CacheMemory{}), nil)
- } else {
- this.SetSession(CacheIns(&CacheMemory{}), CacheIns(&CacheDb{Db: &this.Db, Time: this.Config.GetInt64("cacheLongTime")}))
- }
-
- }
-
-}
-
-//设置配置文件路径全路径或者相对路径
-func (this *App) SetCache(cache CacheIns) {
-
- this.CacheIns = cache
-
-}
-
-//设置配置文件路径全路径或者相对路径
-func (this *App) SetConfig(configPath ...string) {
- if len(configPath) != 0 {
- this.configPath = configPath[0]
- }
-
- if this.configPath == "" {
- this.configPath = "config/config.json"
- }
- //加载配置文件
- btes, err := ioutil.ReadFile(this.configPath)
- this.Config = DeepCopyMap(Config).(Map)
- if err == nil {
-
- cmap := Map{}
- //文件是否损坏
- cmap.JsonToMap(string(btes), &this.Error)
-
- for k, v := range cmap {
- this.Config.Put(k, v)
- }
- }
- //else {
- // //文件不存在则写入文件,存在不做处理
- // var out bytes.Buffer
- // err = json.Indent(&out, []byte(this.Config.ToJsonString()), "", "\t")
- // os.MkdirAll(filepath.Dir(this.configPath), os.ModeDir)
- // os.Create(this.configPath)
- // err = ioutil.WriteFile(this.configPath, out.Bytes(), os.ModeAppend)
- // if err != nil {
- // this.Error.SetError(err)
- // }
- //}
- //文件如果损坏则不写入配置防止配置文件数据丢失
- if this.Error.GetError() == nil {
- var out bytes.Buffer
-
- err = json.Indent(&out, []byte(this.Config.ToJsonString()), "", "\t")
-
- err = ioutil.WriteFile(this.configPath, out.Bytes(), os.ModeAppend)
-
- if err != nil {
- os.MkdirAll(filepath.Dir(this.configPath), os.ModeDir)
- os.Create(this.configPath)
- err = ioutil.WriteFile(this.configPath, out.Bytes(), os.ModeAppend)
-
- if err != nil {
- this.Error.SetError(err)
- }
- }
-
- } else {
- this.Error.SetError(nil)
- }
-
-}
-
-//连接判断,返回true继续传输至控制层,false则停止传输
-func (this *App) SetConnectListener(lis func(context Context) bool) {
- this.connectListener = lis
-}
-
-//网络错误
-func (this *App) session(w http.ResponseWriter, req *http.Request) {
-
-}
-
-//访问
-func (this *App) handler(w http.ResponseWriter, req *http.Request) {
-
- q := strings.Index(req.RequestURI, "?")
- if q == -1 {
- q = len(req.RequestURI)
- }
- o := Substr(req.RequestURI, 0, q)
-
- r := strings.SplitN(o, "/", -1)
-
- var s = make([]string, 0)
-
- for i := 0; i < len(r); i++ {
- if !strings.EqualFold("", r[i]) {
- s = append(s, r[i])
- }
- }
-
- //接口服务
- if len(s) == 3 {
- //如果满足规则则路由到对应控制器去
- if this.Router[s[0]] != nil && this.Router[s[0]][s[1]] != nil && this.Router[s[0]][s[1]][s[2]] != nil {
-
- //获取cookie
- // 如果cookie存在直接将sessionId赋值为cookie.Value
- // 如果cookie不存在就查找传入的参数中是否有token
- // 如果token不存在就生成随机的sessionId
- // 如果token存在就判断token是否在Session中有保存
- // 如果有取出token并复制给cookie
- // 没有保存就生成随机的session
- cookie, err := req.Cookie((Config["sessionName"]).(string))
- sessionId := Md5(strconv.Itoa(Rand(10)))
- token := req.FormValue("token")
- //isFirst:=false
- if err != nil || (len(token) == 32 && cookie.Value != token) {
- if len(token) == 32 {
- sessionId = token
- }
- //else{
- // isFirst=true;
- //}
- http.SetCookie(w, &http.Cookie{Name: Config["sessionName"].(string), Value: sessionId, Path: "/"})
- } else {
- sessionId = cookie.Value
- }
-
- //访问实例
- context := Context{SessionIns: SessionIns{SessionId: sessionId,
- LongCache: this.sessionLong,
- ShortCache: this.sessionShort,
- },
- CacheIns: this.CacheIns,
- Resp: w, Req: req, App: this, RouterString: s, Config: this.Config, Db: &this.Db}
-
- //访问拦截
- if this.connectListener != nil {
- if !this.connectListener(context) {
- context.View()
- return
- }
- }
- //控制层
- this.Router[s[0]][s[1]][s[2]](&context)
- context.View()
- return
- }
-
- }
-
- //url赋值
- path := Config.GetString("tpt") + o
-
- //判断是否为默认
- if path[len(path)-1] == '/' {
- defFile := Config["defFile"].([]string)
- for i := 0; i < len(defFile); i++ {
- temp := path + defFile[i]
- _, err := os.Stat(temp)
-
- if err == nil {
- path = temp
- break
- }
- }
- if path[len(path)-1] == '/' {
- w.WriteHeader(404)
- return
- }
- }
-
- if strings.Contains(path, "/.") {
- w.WriteHeader(404)
- return
- }
-
- header := w.Header()
-
- //类型判断并设置Content-Type
- if strings.Contains(path, ".css") {
- header.Set("Content-Type", "text/css")
- //header.Get(Config["sessionName"].(string))
- }
- header.Set("Cache-Control", "public")
- //w.Write(data)
- http.ServeFile(w, req, path)
-
-}