« get me outta code hell

mtui - Music Text User Interface - user-friendly command line music player
about summary refs log tree commit diff
path: root/socket.js
diff options
context:
space:
mode:
Diffstat (limited to 'socket.js')
-rw-r--r--socket.js28
1 files changed, 28 insertions, 0 deletions
diff --git a/socket.js b/socket.js
index aae1504..12d08af 100644
--- a/socket.js
+++ b/socket.js
@@ -145,6 +145,12 @@ function validateCommand(command) {
             typeof command.queuePlayer === 'string' &&
             typeof command.time === 'number'
           )
+        case 'set-nickname':
+          return (
+            typeof command.nickname === 'string' &&
+            command.nickname.length >= 1 &&
+            command.nickname.length <= 12
+          )
         case 'set-pause':
           return (
             typeof command.queuePlayer === 'string' &&
@@ -219,6 +225,8 @@ export function makeSocketServer() {
   server.on('connection', socket => {
     sockets.push(socket)
 
+    let nickname = '(Unnamed)'
+
     socket.on('close', () => {
       if (sockets.includes(socket)) {
         sockets.splice(sockets.indexOf(socket), 1)
@@ -236,6 +244,7 @@ export function makeSocketServer() {
       }
 
       command.sender = 'client'
+      command.senderNickname = nickname
 
       if (!validateCommand(command)) {
         return
@@ -294,6 +303,12 @@ export function makeSocketServer() {
         readyToResume[command.queuePlayer] = []
       }
 
+      // If it's a 'set-nickname' command, save the nickname.
+
+      if (command.code === 'set-nickname') {
+        nickname = command.nickname
+      }
+
       // Relay the command to client sockets besides the sender.
 
       const otherSockets = sockets.filter(s => s !== socket)
@@ -332,6 +347,11 @@ export function makeSocketClient() {
   client.sendCommand = function(command) {
     const data = serializeCommandToData(command)
     client.socket.write(data + '\n')
+    client.emit('sent-command', command)
+  }
+
+  client.setNickname = function(nickname) {
+    client.sendCommand({code: 'set-nickname', nickname})
   }
 
   client.socket.on('data', perLine(line => {
@@ -363,7 +383,15 @@ export function attachBackendToSocketClient(backend, client, {
 
   backend.setAlwaysStartPaused(true)
 
+  function logCommand(command) {
+    const nickname = command.sender === 'server' ? 'the server' : command.nickname
+    backend.showLogMessage(`${nickname} sent ${command.code}!`)
+  }
+
+  client.on('sent-command', logCommand)
+
   client.on('command', async command => {
+    logCommand(command)
     switch (command.sender) {
       case 'server':
         switch (command.code) {