Skip to content

Instantly share code, notes, and snippets.

@adnaan
Last active December 23, 2015 09:59
Show Gist options
  • Save adnaan/6618585 to your computer and use it in GitHub Desktop.
Save adnaan/6618585 to your computer and use it in GitHub Desktop.
mywebframework
package mywebframework
import (
"bytes"
"fmt"
"github.com/garyburd/redigo/redis"
"html/template"
"io/ioutil"
"labix.org/v2/mgo"
"net"
"net/http"
"os"
"strconv"
)
var templates = template.Must(template.ParseGlob("views/*.html"))
type Server struct {
listener net.Listener
httpServer *http.Server
route *Mux
db *Db
closeChan chan bool
redisConn func() redis.Conn
}
type Db struct {
Url string
MgoSession *mgo.Session
}
func (d *Db) GetSession() *mgo.Session {
if d.MgoSession == nil {
var err error
d.MgoSession, err = mgo.Dial(d.Url)
if err != nil {
panic(err) // no, not really
}
}
return d.MgoSession.Clone()
}
func NewServer() *Server {
//initialize server
r := Route()
//redis
var getRedis = func() redis.Conn {
c, err := redis.Dial("tcp", ":6379")
if err != nil {
panic(err)
}
return c
}
s := &Server{
httpServer: &http.Server{Addr: fmt.Sprintf(":%d", 9947), Handler: r},
route: r,
db: &Db{Url: "mongodb://hello:hello@localhost:27017/hello"},
redisConn: getRedis,
}
//static file server
pwd, _ := os.Getwd()
s.route.Static("/static", pwd)
s.addHandlers()
return s
}
func (s *Server) addHandlers() {
//pages
s.route.Get("/", s.Home)
}
func (s *Server) Home(w http.ResponseWriter, r *http.Request) {
s.Render(w, "app.html")
}
func (s *Server) Render(w http.ResponseWriter, view string) {
wr := bytes.NewBufferString("")
err := templates.ExecuteTemplate(wr, view, nil)
if err != nil {
http.Error(w, "Error rendering template!", http.StatusInternalServerError)
}
content, _ := ioutil.ReadAll(wr)
w.Header().Set("Content-Length", strconv.Itoa(len(content)))
w.Header().Set("Content-Type", "text/html; charset=utf-8")
w.Write(content)
}
func (s *Server) ListenAndServe(closeChan chan bool) error {
s.closeChan = closeChan
listener, err := net.Listen("tcp", s.httpServer.Addr)
if err != nil {
fmt.Printf("error listening: %v \n", err)
return err
}
s.listener = listener
go s.httpServer.Serve(s.listener)
return nil
}
func (s *Server) Shutdown() error {
if s.listener != nil {
err := s.listener.Close()
s.listener = nil
if err != nil {
return err
}
}
return nil
}
@lany192
Copy link

lany192 commented Sep 19, 2013

fvvvvffffffff

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment