add server side api

This commit is contained in:
lxsang 2019-08-30 13:27:17 +02:00
parent 9b75bc4ca2
commit e47a424a9f
6 changed files with 53 additions and 9 deletions

View File

@ -18,7 +18,8 @@
class BaseApplication extends this.OS.GUI.BaseModel class BaseApplication extends this.OS.GUI.BaseModel
constructor: (name, args) -> constructor: (name, args) ->
super name, args super name, args
_OS.setting.applications[@name] = {} if not _OS.setting.applications[@name] if (not _OS.setting.applications[@name]) or (Array.isArray OS.setting.applications[@name])
_OS.setting.applications[@name] = {}
@setting = _OS.setting.applications[@name] @setting = _OS.setting.applications[@name]
@keycomb = @keycomb =
ALT: {} ALT: {}

View File

@ -44,6 +44,14 @@ class BaseModel
return mt.path if mt and mt.path return mt.path if mt and mt.path
return null return null
# call a server side script
call: (cmd, func) ->
@_api.apigateway cmd, false, func
# get a stream
stream: () ->
return @_api.apigateway null, true, null
init: -> init: ->
#implement by sub class #implement by sub class
onexit: (e) -> onexit: (e) ->

View File

@ -337,6 +337,8 @@ self.OS.API =
}, f }, f
setting: (f) -> setting: (f) ->
_API.handler.setting f _API.handler.setting f
apigateway: (d, ws, c) ->
return _API.handler.apigateway d, ws, c
search: (text) -> search: (text) ->
r = [] r = []

View File

@ -18,9 +18,8 @@
self.OS.API.HOST = self.location.hostname+ (if self.location.port then":#{self.location.port}" else "") self.OS.API.HOST = self.location.hostname+ (if self.location.port then":#{self.location.port}" else "")
self.OS.API.REST = "#{self.location.protocol}//#{self.OS.API.HOST}" self.OS.API.REST = "#{self.location.protocol}//#{self.OS.API.HOST}"
self.OS.API.TERMURI = "wss://lxsang.me/wterm"
_REST = self.OS.API.REST _REST = self.OS.API.REST
_HOST = self.OS.API.HOST
self.OS.API.handler = self.OS.API.handler =
# get file, require authentification # get file, require authentification
get: "#{_REST}/VFS/get" get: "#{_REST}/VFS/get"
@ -82,6 +81,19 @@ self.OS.API.handler =
scanapp: (p, c ) -> scanapp: (p, c ) ->
path = "#{_REST}/system/application" path = "#{_REST}/system/application"
apigateway: (d, ws, c) ->
if ws
path = "#{_HOST}/system/apigateway?ws=1"
proto = if window.location.protocol is "https:" then "wss://" else "ws://"
socket = new WebSocket proto + path
if c then c(socket)
return socket
else
path = "#{_REST}/system/apigateway?ws=0"
_API.post path, d, c, (e, s) ->
_courrier.osfail __("Fail to invoke gateway api"), e, s
auth: (c) -> auth: (c) ->
p = "#{_REST}/user/auth" p = "#{_REST}/user/auth"
_API.post p, {}, c, (e, s) -> _API.post p, {}, c, (e, s) ->

View File

@ -25,6 +25,7 @@
repeat: "repeat" repeat: "repeat"
} unless _OS.setting.appearance.wp } unless _OS.setting.appearance.wp
_OS.setting.appearance.wps = [] unless _OS.setting.appearance.wps _OS.setting.appearance.wps = [] unless _OS.setting.appearance.wps
_OS.setting.applications = {} unless _OS.setting.applications
_OS.setting.user = conf.user _OS.setting.user = conf.user
_OS.setting.VFS = conf.VFS if conf.VFS _OS.setting.VFS = conf.VFS if conf.VFS
_OS.setting.desktop.path = "home://.desktop" unless _OS.setting.desktop.path _OS.setting.desktop.path = "home://.desktop" unless _OS.setting.desktop.path

View File

@ -75,9 +75,9 @@ class wTerm extends this.OS.GUI.BaseApplication
me = @ me = @
@term.clear() @term.clear()
@term.focus() @term.focus()
proto = if window.location.protocol is "https:" then "wss://" else "ws://" return @configure() unless @setting.uri
#@socket = new WebSocket proto + @_api.HOST + "/wterm"
@socket = new WebSocket @_api.TERMURI @socket = new WebSocket @setting.uri
@socket.onopen = () -> @socket.onopen = () ->
#el.style.display = "none" #el.style.display = "none"
me.resizeContent (($ me.mterm).width()) , (($ me.mterm).height()) me.resizeContent (($ me.mterm).width()) , (($ me.mterm).height())
@ -86,9 +86,29 @@ class wTerm extends this.OS.GUI.BaseApplication
@socket.onmessage = (e) -> me.term.write e.data if me.term and e.data @socket.onmessage = (e) -> me.term.write e.data if me.term and e.data
@socket.onclose = () -> @socket.onclose = () ->
me.socket = null me.socket = null
me.quit() #me.quit()
console.log "socket closed" console.log "socket closed"
#el.style.display = "block" #el.style.display = "block"
cleanup: (e) -> cleanup: (e) ->
@socket.close() if @socket @socket.close() if @socket
menu: () ->
me = @
{
text: "__(Edit)",
child: [
{ text: "__(Terminal URI)", dataid: "#{@name}-termuri" }
],
onmenuselect: (e) -> me.configure()
}
configure: () ->
@sock.close() if @socket
me = @
@openDialog "PromptDialog",
(d) ->
return unless (d and d isnt "")
me.setting.uri = d
me.openSession()
, "__(Please enter terminal URI)", { label: "__(URI)", value: me.setting.uri || "wss://lxsang.me/wterm" }
this.OS.register "wTerm", wTerm this.OS.register "wTerm", wTerm