Chat server: Difference between revisions

Line 1,328:
<lang nim>import asyncnet, asyncdispatch
 
type
type TClient = tuple[socket: AsyncSocket, name: string]
var clients: seq[Client] = @[]tuple
socket: AsyncSocket
name: string
connected: bool
 
var clients {.threadvar.}: seq[Client]
 
proc sendOthers(client: Client, line: string) {.async.} =
for c in clients:
if c != client and c.connected:
await c.socket.send(line & "\c\L")
 
proc processClient(socket: AsyncSocket) {.async.} =
await socket.send("Please enter your name: ")
letvar client: Client = (socket, await socket.recvLine(), true)
 
clients.add (client)
discardasyncCheck client.sendOthers ("+++ " & client.name & " arrived +++")
 
while true:
let line = await client.socket.recvLine()
if line == "":
discardasyncCheck client.sendOthers ("--- " & client.name & " leaves ---")
client.connected = false
breakreturn
discardasyncCheck client.sendOthers (client.name & "> " & line)
 
for i,c in clients:
if c == client:
clients.del i
break
 
proc serve() {.async.} =
clients = @[]
var server = newAsyncSocket()
server.bindAddr(Port(4004))
Line 1,362 ⟶ 1,364:
while true:
let socket = await server.accept()
discardasyncCheck processClient (socket)
 
discardasyncCheck serve()
runForever()</lang>
 
Anonymous user