瀏覽代碼

Multiple changes to support any sub url

luis 7 年之前
父節點
當前提交
aad611f30b

+ 1 - 1
.drone.yml

@@ -36,7 +36,7 @@ pipeline:
       - go get -d -t ./go/src/...
       - go/deps/bin/gocov test -v -race ./go/src/... | go/deps/bin/gocov report
       - go/deps/bin/folder2go -nobackup ./browser/vue-flow/dist webbin go/src/flow/cmd/demo/webbin/webbin.go
-      - CGO_ENABLED=0 go build -o DIST/demo1 demo1/cmd/demo1  
+      - CGO_ENABLED=0 go build -o DIST/demo1 demos/cmd/demo1  
 
   rebuild-cache:
     image: drillster/drone-volume-cache

+ 1 - 9
browser/vue-flow/src/components/app-flow.vue

@@ -115,15 +115,7 @@ export default {
   mounted () {
     // Handle incoming things
     this.$flowService.on('sessionJoin', (v) => {
-      if (v.id !== this.$route.params.sessId) {
-        var ctx = this.$route.params.context
-
-        if (ctx) {
-          this.$router.push(`/${ctx}/s:${v.id}`)
-        } else {
-          this.$router.push(`/s:${v.id}`)
-        }
-      }
+      this.$router.push(`s:${v.id}`)
     })
     this.$flowService.on('sessionLog', (v) => {
       console.log(v.data) // Temporary

+ 10 - 6
browser/vue-flow/src/router/index.js

@@ -8,16 +8,20 @@ Vue.use(Router)
 export default new Router({
   mode: 'history',
   routes: [
-    { path: '/', component: AppFlow },
-    { path: '/s\\::sessId', component: AppFlow },
-    { path: '/help', component: AppHelp },
+    { path: '/*', component: AppFlow }
+    // { path: '/*/s\\::sessId', component: AppFlow },
+    // { path: '/s\\::sessId', component: AppFlow }
+    // { path: '/*', component: AppFlow }
+
+    // { path: '*?/s\\::sessId', component: AppFlow },
+    // { path: '*?/help', component: AppHelp }
 
     // With a context
-    { path: '/:context', component: AppFlow },
+    /* { path: '/:context', component: AppFlow },
     { path: '/:context/s\\::sessId', component: AppFlow },
-    { path: '/:context/help', component: AppHelp },
+    { path: '/:context/help', component: AppHelp }, */
     // Backward compatibilitie
-    { path: '/:context/:sessId', redirect: '/:context/s\\::sessId' }
+    // { path: '/:context/:sessId', redirect: '/:context/s\\::sessId' }
 
   ]
 

+ 1 - 1
browser/vue-flow/src/store/flow/actions.js

@@ -3,7 +3,7 @@ import flowService from '@/services/flowservice'
 
 export default {
   [m.DOCUMENT_SYNC] (ctx) {
-    flowService.documentUpdate(ctx.getters.nodeData, ctx.rootState.route.params.sessId)
+    flowService.documentUpdate(ctx.getters.nodeData, ctx.state.sessId)
   },
   // Node update full document state somehow
   [m.DOCUMENT_UPDATE] ({commit}, nodeData) {

+ 1 - 0
browser/vue-flow/src/store/flow/mutation-types.js

@@ -1,5 +1,6 @@
 var actions = [
   'REGISTRY_UPDATE',
+  'SESSID_UPDATE',
   'DOCUMENT_UPDATE', 'DOCUMENT_SYNC',
   'ACTIVITY_UPDATE',
   'NODE_RAISE', 'NODE_UPDATE', 'NODE_ADD', 'NODE_REMOVE', 'NODE_INSPECT', 'NODE_PROCESS',

+ 3 - 0
browser/vue-flow/src/store/flow/mutations.js

@@ -3,6 +3,9 @@ import Vue from 'vue'
 import m from './mutation-types'
 
 export default {
+  [m.SESSID_UPDATE] (state, sessId) {
+    state.sessId = sessId
+  },
   [m.REGISTRY_UPDATE] (state, registry) {
     state.registry = registry
   },

+ 1 - 0
browser/vue-flow/src/store/flow/state.js

@@ -1,4 +1,5 @@
 export default {
+  sessId: null,
   // document
   nodeData: {
     nodes: [],

+ 27 - 18
browser/vue-flow/src/store/ws.js

@@ -9,41 +9,48 @@ for (let k in flowMut) { flow[k] = 'flow/' + k }
 for (let k in chatMut) { chat[k] = 'chat/' + k }
 
 let targetws
+// DEBUG PURPOSES
+window.dbgDisconnect = () => {
+  flowService.close()
+}
+window.dbgReconnect = () => {
+  flowService.connect(targetws)
+}
 
 export default store => {
   store.subscribe(mut => {
     // console.log('I changed -- perform the connection somehow', mut)
     if (mut.type === 'route/ROUTE_CHANGED') {
-      let route = mut.payload.to
-      let ctx = route.params.context
-      let urlPath = [window.location.host]
-      if (ctx) urlPath.push(ctx)
-      urlPath.push('conn')
-      targetws = 'ws://' + urlPath.join('/')
+      // let route = mut.payload.to
+      const urlParts = mut.payload.to.path.split('/')
+      urlParts[0] = window.location.host // Substitute '/' with host
+      urlParts[urlParts.length - 1] = 'conn' // 'substitute last with 'conn'
+      const urlPath = urlParts.join('/')
+
+      // Add protocol
+      targetws = 'ws://' + urlPath
       if (window.location.protocol === 'https:') {
-        targetws = 'wss://' + urlPath.join('/')
+        targetws = 'wss://' + urlPath
       }
       flowService.connect(targetws)
     }
   })
-  // DEBUG PURPOSES
-  window.dbgDisconnect = () => {
-    flowService.close()
-  }
-  window.dbgReconnect = () => {
-    flowService.connect(targetws)
-  }
 
   // Connected
   flowService.connected(() => {
+    const match = /.*\/s:(.*)/.exec(store.state.route.path)
+    let sessId
+    if (match != null) {
+      sessId = match[1]
+    }
     // Make this in a service
-    if (store.state.route.params.sessId === undefined) {
+    if (sessId === undefined) {
       flowService.sessionNew()
       return
     }
-
+    store.commit(flow.SESSID_UPDATE, sessId)
     store.dispatch(flow.NOTIFICATION_ADD, 'Connected')
-    flowService.sessionLoad(undefined, store.state.route.params.sessId)
+    flowService.sessionLoad(undefined, sessId)
   })
 
   flowService.on('document', (v) => {
@@ -77,11 +84,13 @@ export default store => {
     store.dispatch(flow.NOTIFICATION_ADD, v.data)
   })
   flowService.on('sessionJoin', (v) => {
+    const sessId = v.id
     store.dispatch(chat.CHAT_JOIN, {
       handle: store.state.chat.handle,
-      sessId: store.state.route.params.sessId
+      sessId: sessId
     })
     store.commit(chat.EVENTS_UPDATE, [])
+    store.commit(flow.SESSID_UPDATE, sessId)
   })
 
   /// // CHAT //////

+ 1 - 1
go/Makefile

@@ -11,7 +11,7 @@ GETENV=
 # What packages to build
 
 # CLI Packages
-CLI=demo1/cmd/demo1
+CLI=demos/cmd/demo1
 BIN=$(addprefix $(DIST)/, $(notdir $(CLI)))
 
 # Windows build

go/src/demo1/cmd/demo1/assets/assets.go → go/src/demos/cmd/demo1/assets/assets.go


go/src/demo1/cmd/demo1/defaultops/defaultops.go → go/src/demos/cmd/demo1/defaultops/defaultops.go


go/src/demo1/cmd/demo1/devops/devops.go → go/src/demos/cmd/demo1/devops/devops.go


go/src/demo1/cmd/demo1/gonumops/gonumops.go → go/src/demos/cmd/demo1/gonumops/gonumops.go


+ 4 - 4
go/src/demo1/cmd/demo1/main.go

@@ -1,10 +1,10 @@
 package main
 
 import (
-	"demo1/cmd/demo1/assets"
-	"demo1/cmd/demo1/defaultops"
-	"demo1/cmd/demo1/devops"
-	"demo1/cmd/demo1/gonumops"
+	"demos/cmd/demo1/assets"
+	"demos/cmd/demo1/defaultops"
+	"demos/cmd/demo1/devops"
+	"demos/cmd/demo1/gonumops"
 	"flow/flowserver"
 	"log"
 	"mime"

go/src/demo1/cmd/demo1/static/c1.html → go/src/demos/cmd/demo1/static/c1.html


go/src/demo1/cmd/demo1/static/c2.html → go/src/demos/cmd/demo1/static/c2.html


go/src/demo1/cmd/demo1/static/c2.jpg → go/src/demos/cmd/demo1/static/c2.jpg


go/src/demo1/cmd/demo1/static/c3.html → go/src/demos/cmd/demo1/static/c3.html


go/src/demo1/cmd/demo1/static/c3.jpg → go/src/demos/cmd/demo1/static/c3.jpg


go/src/demo1/cmd/demo1/static/index.html → go/src/demos/cmd/demo1/static/index.html


go/src/demo1/cmd/demo1/static/sample.png → go/src/demos/cmd/demo1/static/sample.png


go/src/demo1/cmd/simple/main.go → go/src/demos/cmd/simple/main.go


+ 33 - 0
go/src/demos/cmd/test/main.go

@@ -0,0 +1,33 @@
+package main
+
+import (
+	"flow/flowserver"
+	"flow/registry"
+	"log"
+	"net/http"
+
+	"github.com/gohxs/prettylog"
+	"github.com/gohxs/webu"
+	"github.com/gohxs/webu/chain"
+)
+
+func main() {
+	prettylog.Global()
+	r := registry.New()
+	r.Add("hello", func() string {
+		return "hello world"
+	})
+
+	c := chain.New(webu.ChainLogger(prettylog.New("flow")))
+
+	mux := http.NewServeMux()
+	mux.Handle("/", c.Build(flowserver.New(r, "storename")))
+	// Contextual
+	mux.Handle("/test/", c.Build(http.StripPrefix("/test", c.Build(flowserver.New(r, "storename")))))
+	// Subpage context
+	mux.Handle("/thesystem/has/test/", c.Build(http.StripPrefix("/thesystem/has/test", c.Build(flowserver.New(r, "storename")))))
+
+	log.Println("Server :5000")
+	http.ListenAndServe(":5000", mux)
+
+}

+ 30 - 8
go/src/flow/flowserver/flowserver.go

@@ -18,7 +18,9 @@ import (
 
 // FlowServer structure
 type FlowServer struct {
-	mux *http.ServeMux
+	//mux            *http.ServeMux
+	sessionHandler http.Handler
+	staticHandler  http.Handler
 }
 
 // New creates a New flow server
@@ -26,8 +28,10 @@ func New(r *registry.R, store string) *FlowServer {
 	if r == nil {
 		r = registry.Global.Clone()
 	}
-	mux := http.NewServeMux()
-	mux.Handle("/conn", NewFlowSessionManager(r, store))
+	var sessionHandler http.Handler
+	var staticHandler http.Handler
+
+	sessionHandler = NewFlowSessionManager(r, store)
 
 	if os.Getenv("DEBUG") == "1" {
 		log.Println("DEBUG MODE: reverse proxy localhost:8081")
@@ -38,16 +42,34 @@ func New(r *registry.R, store string) *FlowServer {
 
 		rp := httputil.NewSingleHostReverseProxy(proxyURL)
 		rp.ErrorLog = prettylog.New("rproxy")
-		mux.Handle("/", rp)
+		staticHandler = rp
 	} else {
-		mux.Handle("/", webu.StaticHandler("web", "index.html"))
+		staticHandler = webu.StaticHandler("web", "index.html")
 	}
 
-	return &FlowServer{mux}
+	/*mux := http.NewServeMux()
+	mux.Handle("/conn", sessionHandler)
+	mux.Handle("/", staticHandler)*/
+
+	return &FlowServer{
+		sessionHandler: sessionHandler,
+		staticHandler:  staticHandler,
+	}
 }
 
 func (f *FlowServer) ServeHTTP(w http.ResponseWriter, r *http.Request) {
-	f.mux.ServeHTTP(w, r)
+	log.Println("Requesting for:", r.URL)
+
+	// Manual routing
+	switch r.URL.Path {
+	case "/conn":
+		f.sessionHandler.ServeHTTP(w, r)
+	default:
+		f.staticHandler.ServeHTTP(w, r)
+	}
+	//handler, _ := f.mux.Handler(r)
+	//handler.ServeHTTP(w, r)
+	//f.mux.ServeHTTP(w, r)
 	// Manual routing here
 	// Grab last part of path
 	/*prefixToRemove := ""
@@ -66,5 +88,5 @@ func (f *FlowServer) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 // ListenAndServe starts the httpserver
 // It will listen on default port 2015 and increase if port is in use
 func (f *FlowServer) ListenAndServe(addr string) error {
-	return http.ListenAndServe(addr, f.mux)
+	return http.ListenAndServe(addr, f)
 }

+ 1 - 0
go/src/flow/flowserver/sessionmgr.go

@@ -141,6 +141,7 @@ func (fsm *FlowSessionManager) ServeHTTP(w http.ResponseWriter, r *http.Request)
 			// DOCUMENTUPDATE Receive a document
 			//////
 			case "documentUpdate":
+				log.Println("Updating document:", m.ID)
 				sess, err = fsm.LoadSession(m.ID)
 				if e(err) {
 					return err