diff --git a/client/authd.ls b/client/authd.ls index 1e842e7..a0ace41 100644 --- a/client/authd.ls +++ b/client/authd.ls @@ -3,37 +3,39 @@ h = require 'maquette' .h module.exports = { - create-socket: -> + create-socket: (socket-url) -> self = {} request-types = { - \get-token: 0 - \add-user: 1 - \get-user: 2 - \get-user-by-credentials: 3 - \mod-user: 4 + "get-token": 0 + "add-user": 1 + "get-user": 2 + "get-user-by-credentials": 3 + "mod-user": 4 } response-types = { - \error: 0 - \token: 1 - \user: 2 - \user-added: 3 - \user-edited: 4 + "error": 0 + "token": 1 + "user": 2 + "user-added": 3 + "user-edited": 4 } # TODO: naming convention # users can record functions to run on events self.user-on-socket-error = [] - self.user-on-close = [] + self.user-on-socket-close = [] self.callbacks = {} - for key, value in response-types - self.callbacks[key] = [] + for key, value of response-types + self.callbacks[value] = [] # self.user-on-message = [] self.add-event-listener = (type, callback) -> + console.log "authd: add event listener", type, callback, response-types[type] + console.log response-types type = response-types[type] self.callbacks[type] ++= [callback] @@ -48,13 +50,14 @@ module.exports = { self.socket.close! self.socket.onclose = (event) -> - for f in self.user-on-close + for f in self.user-on-socket-close f event self.socket.onmessage = (event) -> message = JSON.parse(event.data) + console.log "authd message received: ", message - for f in self.callbacks[message.type] + for f in self.callbacks[message.mtype] f JSON.parse(message.payload) self.reopen = -> @@ -68,13 +71,13 @@ module.exports = { self.socket.send JSON.stringify { mtype: type, payload: opts } self.get-token = (login, password) -> - self.send request-type.get-token, JSON.stringify { + self.send request-types[\get-token], JSON.stringify { login: login password: password } self.get-user-by-credentials = (login, password) -> - self.send request-type.get-user-by-credentials, JSON.stringify { + self.send request-types[\get-user-by-credentials], JSON.stringify { login: login password: password } @@ -85,20 +88,20 @@ module.exports = { self.get-user = (uid) -> - self.send request-type.get-user, JSON.stringify { + self.send request-types[\get-user], JSON.stringify { uid: uid } # TODO: authd overhaul #self.add-user = (login, password) -> - # self.send request-type.add-user, JSON.stringify { + # self.send request-types[\add-user], JSON.stringify { # login: login # password: password # } # TODO: authd overhaul #self.mod-user = (uid) -> - # self.send request-type.mod-user, JSON.stringify { + # self.send request-types[\mod-user], JSON.stringify { # uid: uid # } diff --git a/client/index.ls b/client/index.ls index ab1ee02..331112f 100644 --- a/client/index.ls +++ b/client/index.ls @@ -85,7 +85,7 @@ model.todod-url = (if location.protocol == 'https' then 'wss' else 'ws') + '://' + location.hostname + \: + model.port + - "/kanban.JSON" + "/todo.JSON" console.log "authd url: " + model.authd-url console.log "todod url: " + model.todod-url @@ -119,21 +119,22 @@ authd-on-websocket-close = (event) -> # record changes that need to happen on a network event model.authd-ws.user-on-socket-error ++= [ authd-on-websocket-error ] -model.authd-ws.user-on-close ++= [ authd-on-websocket-close ] +model.authd-ws.user-on-socket-close ++= [ authd-on-websocket-close ] # authd message handlers -authd.add-event-listener \token, (message) -> +model.authd-ws.add-event-listener \token, (message) -> model.jwt := message.token model.current-view := "todo-list" + model.todod-ws.list-lists model.jwt projector.schedule-render! -authd.add-event-listener \error, (message) -> +model.authd-ws.add-event-listener \error, (message) -> console.log "authd error", message projector.schedule-render! -authd.add-event-listener \user, (message) -> +model.authd-ws.add-event-listener \user, (message) -> model.users[message.user.uid] := message.user projector.schedule-render! @@ -159,33 +160,29 @@ on-websocket-close = (event) -> projector.schedule-render! -on-websocket-message = (data) -> - message = JSON.parse data - - switch message.type - when "login" - model.current-view := "todo-list" - when "list-projects" - model.todo-list := message.projects || [] - when "project" - model.projects[message.project.id] = Project.new message.project, model - when "user" - if message.user - model.users[message.user.uid] := message.user - when "login-error" - model.login-error = message.error - else - console.log "RECEIVED UNKNOWN MESSAGE TYPE: #{message.type}" - - projector.schedule-render! - - console.log message +# TODO +# on-websocket-message = (data) -> +# message = JSON.parse data +# +# switch message.type +# when "login" +# model.current-view := "todo-list" +# when "list-projects" +# when "project" +# model.projects[message.project.id] = Project.new message.project, model +# when "user" +# if message.user +# model.users[message.user.uid] := message.user # record changes that need to happen on a network event model.todod-ws.user-on-socket-error ++= [ on-websocket-error ] -model.todod-ws.user-on-close ++= [ on-websocket-close ] -model.todod-ws.user-on-message ++= [ on-websocket-message ] +model.todod-ws.user-on-socket-close ++= [ on-websocket-close ] +model.todod-ws.add-event-listener \lists-list, (message) -> + console.log message + model.todo-list := message.lists + + projector.schedule-render! render-navbar = -> h \div.navbar [ @@ -215,7 +212,7 @@ render-todo-list = -> model.viewed-project := project.id model.todod-ws.get-project project.id } [ - bulma.title 4 project.name + bulma.title 4 project.title ] render-new-project-button = -> diff --git a/client/todowebsocket.ls b/client/todowebsocket.ls index 870063a..d888452 100644 --- a/client/todowebsocket.ls +++ b/client/todowebsocket.ls @@ -8,29 +8,66 @@ module.exports = { create-socket: (socket-url) -> self = {} + request-types = { + "list-lists": 0 + "get-list": 1 + "add-list": 2 + "edit-list": 3 + "remove-list": 4 + "get-tasks": 5 + "get-task": 6 + "add-task": 7 + "remove-task": 8 + "edit-task": 9 + } + + response-types = { + "ok": 0 + "error": 1 + "lists-list": 2 + "new-list": 3 + "list-removed": 4 + "list-updated": 5 + "tasks": 6 + "task": 7 + "task-created": 8 + "task-removed": 9 + "task-updated": 10 + } + # users can record functions to run on events - self.user-on-error = [] - self.user-on-close = [] - self.user-on-message = [] + self.user-on-socket-error = [] + self.user-on-socket-close = [] + + self.callbacks = {} + for key, value of response-types + self.callbacks[value] = [] + + self.add-event-listener = (type, callback) -> + console.log "add event listener", type, callback, response-types[type] + type = response-types[type] + + self.callbacks[type] ++= [callback] self.open-socket = -> console.log "Opening socket to #{socket-url}" self.socket := new WebSocket socket-url self.socket.onerror = (event) -> - for f in self.user-on-error + for f in self.user-on-socket-error f event self.socket.close! self.socket.onclose = (event) -> - for f in self.user-on-close + for f in self.user-on-socket-close f event self.socket.onmessage = (event) -> - data = JSON.parse(event.data).payload + message = JSON.parse(event.data) + console.log "todod message received: ", message - for f in self.user-on-message - f data + for f in self.callbacks[message.mtype] + f JSON.parse(message.payload) self.reopen = -> self.socket.close! @@ -38,109 +75,95 @@ module.exports = { self.open-socket! - self.send = (opts) -> - console.log JSON.stringify { - mtype: 0, - payload: opts + self.send = (type, opts) -> + console.log JSON.stringify { mtype: type, payload: opts } + self.socket.send JSON.stringify { mtype: type, payload: opts } + + + self.list-lists = (token) -> + self.send request-types[\list-lists], JSON.stringify { + token: token } - self.socket.send JSON.stringify { - mtype: 0, - payload: opts - } + # self.get-user = (uid) -> + # self.send JSON.stringify { + # type: "get-user" + # uid: uid + # } - self.get-project = (project-id) -> - self.send JSON.stringify { - type: "project", - project: project-id - } + # self.new-project = (name) -> + # self.send JSON.stringify { + # type: "new-project" + # name: name + # } - self.login = (login, password) -> - self.send JSON.stringify { - type: "login", - login: login - password: password - } + # self.edit-task = (project-id, task-id, options) -> + # payload = { + # type: "edit-task" + # project: project-id + # task: task-id + # } - self.get-user = (uid) -> - self.send JSON.stringify { - type: "get-user" - uid: uid - } + # for key, value of options + # payload[key] = value - self.new-project = (name) -> - self.send JSON.stringify { - type: "new-project" - name: name - } + # self.send JSON.stringify payload - self.edit-task = (project-id, task-id, options) -> - payload = { - type: "edit-task" - project: project-id - task: task-id - } + # self.delete-task = (project-id, task-id) -> + # self.send JSON.stringify { + # type: "delete-task" + # project: project-id + # task: task-id + # } - for key, value of options - payload[key] = value + # self.edit-column = (project-id, column-id, options) -> + # payload = { + # type: "edit-column" + # project: project-id + # column: column-id + # } - self.send JSON.stringify payload + # for key, value of options + # payload[key] = value - self.delete-task = (project-id, task-id) -> - self.send JSON.stringify { - type: "delete-task" - project: project-id - task: task-id - } + # self.send JSON.stringify payload - self.edit-column = (project-id, column-id, options) -> - payload = { - type: "edit-column" - project: project-id - column: column-id - } + # self.delete-column = (project-id, column-id) -> + # self.send JSON.stringify { + # type: "delete-column" + # project: project-id + # column: column-id + # } - for key, value of options - payload[key] = value + # self.new-column = (project-id, name) -> + # self.send JSON.stringify { + # type: "new-column" + # project: project-id + # name: name + # } - self.send JSON.stringify payload + # self.new-task = (project-id, column-id, options) -> + # payload = { + # type: "new-task" + # project: project-id + # column: column-id + # } - self.delete-column = (project-id, column-id) -> - self.send JSON.stringify { - type: "delete-column" - project: project-id - column: column-id - } + # for key, value of options + # payload[key] = value - self.new-column = (project-id, name) -> - self.send JSON.stringify { - type: "new-column" - project: project-id - name: name - } + # self.send JSON.stringify payload - self.new-task = (project-id, column-id, options) -> - payload = { - type: "new-task" - project: project-id - column: column-id - } + # self.edit-project = (project-id, options) -> + # payload = { + # type: "edit-project" + # project: project-id + # } - for key, value of options - payload[key] = value + # for key, value of options + # payload[key] = value - self.send JSON.stringify payload - - self.edit-project = (project-id, options) -> - payload = { - type: "edit-project" - project: project-id - } - - for key, value of options - payload[key] = value - - self.send JSON.stringify payload + # self.send JSON.stringify payload self }