Code Review
/
src
/
xds
/
xds-server.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
review
|
tree
raw
|
inline
| side by side
Refit source files to have a public xs-apiv1 lib package.
[src/xds/xds-server.git]
/
lib
/
xdsserver
/
webserver.go
diff --git
a/lib/webserver/server.go
b/lib/xdsserver/webserver.go
similarity index 59%
rename from
lib/webserver/server.go
rename to
lib/xdsserver/webserver.go
index
85a2c40
..
0e1676a
100644
(file)
--- a/
lib/webserver/server.go
+++ b/
lib/xdsserver/webserver.go
@@
-1,4
+1,4
@@
-package
web
server
+package
xds
server
import (
"fmt"
import (
"fmt"
@@
-12,62
+12,45
@@
import (
"github.com/gin-contrib/static"
"github.com/gin-gonic/gin"
"github.com/googollee/go-socket.io"
"github.com/gin-contrib/static"
"github.com/gin-gonic/gin"
"github.com/googollee/go-socket.io"
- "github.com/iotbzh/xds-server/lib/apiv1"
- "github.com/iotbzh/xds-server/lib/crosssdk"
- "github.com/iotbzh/xds-server/lib/model"
- "github.com/iotbzh/xds-server/lib/session"
- "github.com/iotbzh/xds-server/lib/xdsconfig"
)
)
-// Server .
-type Server struct {
+// WebServer .
+type WebServer struct {
+ *Context
router *gin.Engine
router *gin.Engine
- api *
apiv1.
APIService
+ api *APIService
sIOServer *socketio.Server
webApp *gin.RouterGroup
sIOServer *socketio.Server
webApp *gin.RouterGroup
- cfg *xdsconfig.Config
- sessions *session.Sessions
- mfolders *model.Folders
- sdks *crosssdk.SDKs
- log *logrus.Logger
- sillyLog bool
stop chan struct{} // signals intentional stop
}
const indexFilename = "index.html"
stop chan struct{} // signals intentional stop
}
const indexFilename = "index.html"
-const cookieMaxAge = "3600"
-// New
creates an instance of
Server
-func New
(cfg *xdsconfig.Config, mfolders *model.Folders, sdks *crosssdk.SDKs, logr *logrus.Logger, sillyLog bool) *
Server {
+// New
WebServer creates an instance of Web
Server
+func New
WebServer(ctx *Context) *Web
Server {
// Setup logging for gin router
// Setup logging for gin router
- if
logr
.Level == logrus.DebugLevel {
+ if
ctx.Log
.Level == logrus.DebugLevel {
gin.SetMode(gin.DebugMode)
} else {
gin.SetMode(gin.ReleaseMode)
}
// Redirect gin logs into another logger (LogVerboseOut may be stderr or a file)
gin.SetMode(gin.DebugMode)
} else {
gin.SetMode(gin.ReleaseMode)
}
// Redirect gin logs into another logger (LogVerboseOut may be stderr or a file)
- gin.DefaultWriter = c
f
g.LogVerboseOut
- gin.DefaultErrorWriter = c
f
g.LogVerboseOut
- log.SetOutput(c
f
g.LogVerboseOut)
+ gin.DefaultWriter = c
tx.Confi
g.LogVerboseOut
+ gin.DefaultErrorWriter = c
tx.Confi
g.LogVerboseOut
+ log.SetOutput(c
tx.Confi
g.LogVerboseOut)
// FIXME - fix pb about isTerminal=false when out is in VSC Debug Console
// Creates gin router
r := gin.New()
// FIXME - fix pb about isTerminal=false when out is in VSC Debug Console
// Creates gin router
r := gin.New()
- svr := &Server{
+ svr := &
Web
Server{
router: r,
api: nil,
sIOServer: nil,
webApp: nil,
router: r,
api: nil,
sIOServer: nil,
webApp: nil,
- cfg: cfg,
- sessions: nil,
- mfolders: mfolders,
- sdks: sdks,
- log: logr,
- sillyLog: sillyLog,
stop: make(chan struct{}),
}
stop: make(chan struct{}),
}
@@
-75,7
+58,7
@@
func New(cfg *xdsconfig.Config, mfolders *model.Folders, sdks *crosssdk.SDKs, lo
}
// Serve starts a new instance of the Web Server
}
// Serve starts a new instance of the Web Server
-func (s *Server) Serve() error {
+func (s *
Web
Server) Serve() error {
var err error
// Setup middlewares
var err error
// Setup middlewares
@@
-84,16
+67,13
@@
func (s *Server) Serve() error {
s.router.Use(s.middlewareXDSDetails())
s.router.Use(s.middlewareCORS())
s.router.Use(s.middlewareXDSDetails())
s.router.Use(s.middlewareCORS())
- // Sessions manager
- s.sessions = session.NewClientSessions(s.router, s.log, cookieMaxAge, s.sillyLog)
-
// Create REST API
// Create REST API
- s.api =
apiv1.New(s.router, s.sessions, s.cfg, s.mfolders, s.sdks
)
+ s.api =
NewAPIV1(s.Context
)
// Websocket routes
s.sIOServer, err = socketio.NewServer(nil)
if err != nil {
// Websocket routes
s.sIOServer, err = socketio.NewServer(nil)
if err != nil {
- s.
l
og.Fatalln(err)
+ s.
L
og.Fatalln(err)
}
s.router.GET("/socket.io/", s.socketHandler)
}
s.router.GET("/socket.io/", s.socketHandler)
@@
-104,12
+84,12
@@
func (s *Server) Serve() error {
*/
// Web Application (serve on / )
*/
// Web Application (serve on / )
- idxFile := path.Join(s.
cf
g.FileConf.WebAppDir, indexFilename)
+ idxFile := path.Join(s.
Confi
g.FileConf.WebAppDir, indexFilename)
if _, err := os.Stat(idxFile); err != nil {
if _, err := os.Stat(idxFile); err != nil {
- s.
l
og.Fatalln("Web app directory not found, check/use webAppDir setting in config file: ", idxFile)
+ s.
L
og.Fatalln("Web app directory not found, check/use webAppDir setting in config file: ", idxFile)
}
}
- s.
log.Infof("Serve WEB app dir: %s", s.cf
g.FileConf.WebAppDir)
- s.router.Use(static.Serve("/", static.LocalFile(s.
cf
g.FileConf.WebAppDir, true)))
+ s.
Log.Infof("Serve WEB app dir: %s", s.Confi
g.FileConf.WebAppDir)
+ s.router.Use(static.Serve("/", static.LocalFile(s.
Confi
g.FileConf.WebAppDir, true)))
s.webApp = s.router.Group("/", s.serveIndexFile)
{
s.webApp.GET("/")
s.webApp = s.router.Group("/", s.serveIndexFile)
{
s.webApp.GET("/")
@@
-118,10
+98,10
@@
func (s *Server) Serve() error {
// Serve in the background
serveError := make(chan error, 1)
go func() {
// Serve in the background
serveError := make(chan error, 1)
go func() {
- msg := fmt.Sprintf("Web Server running on localhost:%s ...\n", s.
cf
g.FileConf.HTTPPort)
- s.
l
og.Infof(msg)
+ msg := fmt.Sprintf("Web Server running on localhost:%s ...\n", s.
Confi
g.FileConf.HTTPPort)
+ s.
L
og.Infof(msg)
fmt.Printf(msg)
fmt.Printf(msg)
- serveError <- http.ListenAndServe(":"+s.
cf
g.FileConf.HTTPPort, s.router)
+ serveError <- http.ListenAndServe(":"+s.
Confi
g.FileConf.HTTPPort, s.router)
}()
// Wait for stop, restart or error signals
}()
// Wait for stop, restart or error signals
@@
-129,36
+109,36
@@
func (s *Server) Serve() error {
case <-s.stop:
// Shutting down permanently
s.sessions.Stop()
case <-s.stop:
// Shutting down permanently
s.sessions.Stop()
- s.
l
og.Infoln("shutting down (stop)")
+ s.
L
og.Infoln("shutting down (stop)")
case err = <-serveError:
// Error due to listen/serve failure
case err = <-serveError:
// Error due to listen/serve failure
- s.
l
og.Errorln(err)
+ s.
L
og.Errorln(err)
}
return nil
}
// Stop web server
}
return nil
}
// Stop web server
-func (s *Server) Stop() {
+func (s *
Web
Server) Stop() {
close(s.stop)
}
// serveIndexFile provides initial file (eg. index.html) of webapp
close(s.stop)
}
// serveIndexFile provides initial file (eg. index.html) of webapp
-func (s *Server) serveIndexFile(c *gin.Context) {
+func (s *
Web
Server) serveIndexFile(c *gin.Context) {
c.HTML(200, indexFilename, gin.H{})
}
// Add details in Header
c.HTML(200, indexFilename, gin.H{})
}
// Add details in Header
-func (s *Server) middlewareXDSDetails() gin.HandlerFunc {
+func (s *
Web
Server) middlewareXDSDetails() gin.HandlerFunc {
return func(c *gin.Context) {
return func(c *gin.Context) {
- c.Header("XDS-Version", s.
cf
g.Version)
- c.Header("XDS-API-Version", s.
cf
g.APIVersion)
+ c.Header("XDS-Version", s.
Confi
g.Version)
+ c.Header("XDS-API-Version", s.
Confi
g.APIVersion)
c.Next()
}
}
// CORS middleware
c.Next()
}
}
// CORS middleware
-func (s *Server) middlewareCORS() gin.HandlerFunc {
+func (s *
Web
Server) middlewareCORS() gin.HandlerFunc {
return func(c *gin.Context) {
if c.Request.Method == "OPTIONS" {
c.Header("Access-Control-Allow-Origin", "*")
return func(c *gin.Context) {
if c.Request.Method == "OPTIONS" {
c.Header("Access-Control-Allow-Origin", "*")
@@
-174,7
+154,7
@@
func (s *Server) middlewareCORS() gin.HandlerFunc {
}
// socketHandler is the handler for the "main" websocket connection
}
// socketHandler is the handler for the "main" websocket connection
-func (s *Server) socketHandler(c *gin.Context) {
+func (s *
Web
Server) socketHandler(c *gin.Context) {
// Retrieve user session
sess := s.sessions.Get(c)
// Retrieve user session
sess := s.sessions.Get(c)
@@
-184,17
+164,17
@@
func (s *Server) socketHandler(c *gin.Context) {
}
s.sIOServer.On("connection", func(so socketio.Socket) {
}
s.sIOServer.On("connection", func(so socketio.Socket) {
- s.
l
og.Debugf("WS Connected (SID=%v)", so.Id())
+ s.
L
og.Debugf("WS Connected (SID=%v)", so.Id())
s.sessions.UpdateIOSocket(sess.ID, &so)
so.On("disconnection", func() {
s.sessions.UpdateIOSocket(sess.ID, &so)
so.On("disconnection", func() {
- s.
l
og.Debugf("WS disconnected (SID=%v)", so.Id())
+ s.
L
og.Debugf("WS disconnected (SID=%v)", so.Id())
s.sessions.UpdateIOSocket(sess.ID, nil)
})
})
s.sIOServer.On("error", func(so socketio.Socket, err error) {
s.sessions.UpdateIOSocket(sess.ID, nil)
})
})
s.sIOServer.On("error", func(so socketio.Socket, err error) {
- s.
l
og.Errorf("WS SID=%v Error : %v", so.Id(), err.Error())
+ s.
L
og.Errorf("WS SID=%v Error : %v", so.Id(), err.Error())
})
s.sIOServer.ServeHTTP(c.Writer, c.Request)
})
s.sIOServer.ServeHTTP(c.Writer, c.Request)