Skip to content

Commit

Permalink
add interface
Browse files Browse the repository at this point in the history
  • Loading branch information
dworld committed Nov 6, 2014
1 parent c6da764 commit 3ddeb9e
Show file tree
Hide file tree
Showing 9 changed files with 118 additions and 0 deletions.
Empty file removed README
Empty file.
37 changes: 37 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
## 行云 ##

### 对象 ###

- Server: pipe容器
- Pipe: 对请求做前、后置处理
- Context: 请求相关的数据

### 接口 ###

- http.Handler
- pipe.Handler (negroni.Handler)
- Config
- Logger
- Router: 用于Pipe路由Handler路由

### 目标 ###

- 提供机制、而不**只是**实现
- 方便扩展
- 默认配置功能强大、容易使用
- 使用代码生成作为元编程
- Everything is http.Handler

### Core SubContext ###

- Cookie
- Session
- XSRF
- Flash
- Render

### Default PipeHandler ###

- Logger
- Recover
- Static
1 change: 1 addition & 0 deletions config.go
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
package xingyun
1 change: 1 addition & 0 deletions context.go
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
package xingyun
1 change: 1 addition & 0 deletions doc.go
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
package xingyun
8 changes: 8 additions & 0 deletions log.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package xingyun

type logger interface {
Infof(s string, o ...interface{})
Errorf(s string, o ...interface{})
Debugf(s string, o ...interface{})
Tracef(s string, o ...interface{})
}
34 changes: 34 additions & 0 deletions pipe.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package xingyun

import (
"net/http"

"github.com/codegangsta/negroni"
)

var (
DefaultPipeHandler = []PipeHandler{}
)

type PipeHandler interface {
ServeHTTP(w http.ResponseWriter, r *http.Request, next http.HandlerFunc)
}

type Pipe struct {
negroni *negroni.Negroni
}

func (p *Pipe) ServeHTTP(w http.ResponseWriter, r *http.Request) {
p.negroni.ServeHTTP(w, r)
}

func (p *Pipe) Use(handlers ...PipeHandler) {
if len(DefaultPipeHandler) != 0 && len(p.negroni.Handlers()) == 0 {
for _, h := range DefaultPipeHandler {
p.negroni.Use(h)
}
}
for _, h := range handlers {
p.negroni.Use(h)
}
}
14 changes: 14 additions & 0 deletions router.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package xingyun

import "net/http"

type Router interface {
Route(r *http.Request) http.Handler
}

func RouterHandler(router Router) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
h := router.Route(r)
h.ServeHTTP(w, r)
}
}
22 changes: 22 additions & 0 deletions server.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package xingyun

import "net/http"

type Server struct {
Config Config

pipeRouter Router
}

func NewServer(router Router) *Server {
return &Server{pipeRouter: router}
}

func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
h := RouterHandler(s.pipeRouter)
h(w, r)
}

func (s *Server) ListenAndServe(addr string) {
http.ListenAndServe(addr, s)
}

0 comments on commit 3ddeb9e

Please sign in to comment.