It is also possible, for the client to initiate a message to the server at any time. In this example, we will prompt the client for a username, and then pass it to the server.
import{createServer}from'http'import{Server}from'socket.io'import*asexpressfrom'express'import*aspathfrom'path'importLuckyNumbersGamefrom'./luckyNumbersGame'constport=3000constapp=express()app.use(express.static(path.join(__dirname,'../client')))constserver=createServer(app)constio=newServer(server)constgame=newLuckyNumbersGame()constplayers:{[id:string]:{luckyNumber:number;socketId:string}}={}io.on('connection',(socket)=>{console.log('a user connected : '+socket.id)socket.on('joining',(uName)=>{if(players[uName]){// existing player. Use the lucky number already registeredplayers[uName].socketId=socket.id// update the reference since each new connection gets a new socket.idsocket.emit('joined','Hello "'+uName+'", welcome back, your lucky number is '+players[uName].luckyNumber)}else{// Create a new player with a new lucky numberplayers[uName]={luckyNumber:Math.floor(Math.random()*20),socketId:socket.id}socket.emit('joined','Hello new player named "'+uName+'", your lucky number is '+players[uName].luckyNumber)}game.LuckyNumbers[socket.id]=players[uName].luckyNumbersocket.broadcast.emit('message','Everybody, say hello to "'+uName+'"')})socket.on('disconnect',()=>{console.log('socket disconnected : '+socket.id)constplayer=Object.keys(players).find((p)=>{returnplayers[p].socketId===socket.id})if(player){socket.broadcast.emit('message','Player "'+player+'" has left the building')}})})server.listen(port,()=>{console.log('Server listening on port '+port)})setInterval(()=>{constrandomNumber=Math.floor(Math.random()*20)constwinners=game.GetWinners(randomNumber)if(winners.length){winners.forEach((w)=>{io.to(w).emit('message','*** You are the winner with '+randomNumber+' ***')})}io.emit('message',randomNumber)},1000)
import{io}from'socket.io-client'constsocket=io()letjoined=falsesocket.on('connect',()=>{constuName=prompt('What is your name?')// as stringif(uName){socket.emit('joining',uName)}})socket.on('disconnect',(message)=>{alert('Disconnected from Server \nReason : '+message)})socket.on('message',(message)=>{if(joined){document.body.innerHTML+='<p>'+message+'</p>'window.scrollTo({top:document.body.scrollHeight,behavior:'smooth'})}})socket.on('joined',(message)=>{document.body.innerHTML='<p>'+message+'</p>'joined=true})