Made the requested changes but not seeing a return back to the main loop. Also 
put an echo after calling the serve() function, - echo "Returning to the main 
loop.". Not seeing that echo either.

The loop comes to an end but still not able to get back to the main program 
loop.

Updated Client-
    
    
    import os
    import net
    import strutils
    import asyncnet, asyncdispatch, parseutils
    
    proc processClient*(client: AsyncSocket, fileName: string) {.async.} =
        var
            fileSize: int
            counter: int
        while not client.isClosed:
            echo "Wait file"
            var file = open(fileName, fmWrite )
            let sizeFileString = await client.recvLine()
            discard sizeFileString.parseInt(fileSize)
            echo "File Size is " & $fileSize
            counter = 0
            var dataFut = client.recv(4000)
            while true:
                yield dataFut
                echo "Counter : " & $counter
                if counter >= fileSize:
                    break
                else:
                    if dataFut.finished:
                        let data = dataFut.read
                        if data != "":
                            counter += data.len
                            file.write(data)
                            dataFut = client.recv(4000)
                        else:
                            echo "No data"
                            break
                    else:
                        echo "Exit"
                        break
            echo "End of file"
            file.close
            break
        client.close()
    
    
    proc serve*(fileName: string) {.async.} =
        var server = newAsyncSocket(buffered=false)
        server.setSockOpt(OptReuseAddr, true)
        server.bindAddr(Port(5555))
        server.listen()
        
        echo "Server running!"
        
        while true:
            let client = await server.accept()
            echo "New client connected"
            asyncCheck processClient(client, fileName)
    
    
    var server: Socket = newSocket()
    server.bindAddr(Port(443))
    server.listen()
    stdout.writeLine("The Sever is now Listening for incoming connections ... ")
    
    var client: Socket = new(Socket)
    server.accept(client)
    stdout.writeLine("The connection has been established.")
    echo "\n"
    
    proc mainLoop() {.async.} =
        
        while true:
            stdout.write("Enter a command > ")
            
            let input: string = stdin.readLine()
            
            echo "\n"
            
            if input.startsWith("cmd ") or input.startsWith("exit ") or 
input.startsWith("getsize ") or input.startsWith("path ") or 
input.startsWith("screenshot") or input.startsWith("download "):
                client.send(input & "\r\n")
                if input.startsWith("download "):
                    var get_name = input[0..^1]
                    
                    let (dirPath, fileName) = splitPath(get_name)
                    echo "THIS IS WHAT IS BEING PASSED TO THE FUNCTION: ", 
fileName
                    
                    waitFor serve(fileName)
                    echo "Returning back to the main loop."
            
            
            else:
                stdout.writeLine("Command not allowed")
                continue
            
            let message: string = client.recvLine()
            
            if ":" in message:
                for x in message.split(";"):
                    stdout.writeLine(x)
                echo "\n"
            else:
                stdout.writeLine(message)
                echo "\n"
        
        #client.close()
    
    waitFor mainLoop()
    
    
    
    Run

The Server code has not been changed.

Here is the current output of both the client and server -
    
    
    
    Client Output -
    
    
    C:\Users\nater\Desktop\nim>client
    The Sever is now Listening for incoming connections ...
    The connection has been established.
    
    
    Enter a command > download c:\users\nater\desktop\spring.jpg
    
    
    THIS IS WHAT IS BEING PASSED TO THE FUNCTION: spring.jpg
    Client running!
    New client connected
    Wait file
    File Size is 894902
    Counter : 0
    Counter : 4000
    Counter : 8000
    Counter : 12000
    Counter : 16000
    Counter : 20000
    Counter : 24000
    Counter : 28000
    Counter : 32000
    Counter : 36000
    Counter : 40000
    Counter : 44000
    Counter : 48000
    Counter : 52000
    Counter : 56000
    Counter : 60000
    Counter : 64000
    Counter : 68000
    Counter : 72000
    Counter : 76000
    Counter : 80000
    Counter : 84000
    Counter : 88000
    Counter : 92000
    Counter : 96000
    Counter : 100000
    Counter : 104000
    Counter : 108000
    Counter : 112000
    Counter : 116000
    Counter : 120000
    Counter : 124000
    Counter : 128000
    Counter : 132000
    Counter : 136000
    Counter : 140000
    Counter : 144000
    Counter : 148000
    Counter : 152000
    Counter : 156000
    Counter : 160000
    Counter : 164000
    Counter : 168000
    Counter : 172000
    Counter : 176000
    Counter : 180000
    Counter : 184000
    Counter : 188000
    Counter : 192000
    Counter : 196000
    Counter : 200000
    Counter : 204000
    Counter : 208000
    Counter : 212000
    Counter : 216000
    Counter : 220000
    Counter : 224000
    Counter : 228000
    Counter : 232000
    Counter : 236000
    Counter : 240000
    Counter : 244000
    Counter : 248000
    Counter : 252000
    Counter : 256000
    Counter : 260000
    Counter : 264000
    Counter : 268000
    Counter : 272000
    Counter : 276000
    Counter : 280000
    Counter : 284000
    Counter : 288000
    Counter : 292000
    Counter : 296000
    Counter : 300000
    Counter : 304000
    Counter : 308000
    Counter : 312000
    Counter : 316000
    Counter : 320000
    Counter : 324000
    Counter : 328000
    Counter : 332000
    Counter : 336000
    Counter : 340000
    Counter : 344000
    Counter : 348000
    Counter : 352000
    Counter : 356000
    Counter : 360000
    Counter : 364000
    Counter : 368000
    Counter : 372000
    Counter : 376000
    Counter : 380000
    Counter : 384000
    Counter : 388000
    Counter : 392000
    Counter : 396000
    Counter : 400000
    Counter : 404000
    Counter : 408000
    Counter : 412000
    Counter : 416000
    Counter : 420000
    Counter : 424000
    Counter : 428000
    Counter : 432000
    Counter : 436000
    Counter : 440000
    Counter : 444000
    Counter : 448000
    Counter : 452000
    Counter : 456000
    Counter : 460000
    Counter : 464000
    Counter : 468000
    Counter : 472000
    Counter : 476000
    Counter : 480000
    Counter : 484000
    Counter : 488000
    Counter : 492000
    Counter : 496000
    Counter : 500000
    Counter : 504000
    Counter : 508000
    Counter : 512000
    Counter : 516000
    Counter : 520000
    Counter : 524000
    Counter : 528000
    Counter : 532000
    Counter : 536000
    Counter : 540000
    Counter : 544000
    Counter : 548000
    Counter : 552000
    Counter : 556000
    Counter : 560000
    Counter : 564000
    Counter : 568000
    Counter : 572000
    Counter : 576000
    Counter : 580000
    Counter : 584000
    Counter : 588000
    Counter : 592000
    Counter : 596000
    Counter : 600000
    Counter : 604000
    Counter : 608000
    Counter : 612000
    Counter : 616000
    Counter : 620000
    Counter : 624000
    Counter : 628000
    Counter : 632000
    Counter : 636000
    Counter : 640000
    Counter : 644000
    Counter : 648000
    Counter : 652000
    Counter : 656000
    Counter : 660000
    Counter : 664000
    Counter : 668000
    Counter : 672000
    Counter : 676000
    Counter : 680000
    Counter : 684000
    Counter : 688000
    Counter : 692000
    Counter : 696000
    Counter : 700000
    Counter : 704000
    Counter : 708000
    Counter : 712000
    Counter : 716000
    Counter : 720000
    Counter : 724000
    Counter : 728000
    Counter : 732000
    Counter : 736000
    Counter : 740000
    Counter : 744000
    Counter : 748000
    Counter : 752000
    Counter : 756000
    Counter : 760000
    Counter : 764000
    Counter : 768000
    Counter : 772000
    Counter : 776000
    Counter : 780000
    Counter : 784000
    Counter : 788000
    Counter : 792000
    Counter : 796000
    Counter : 800000
    Counter : 804000
    Counter : 808000
    Counter : 812000
    Counter : 816000
    Counter : 820000
    Counter : 824000
    Counter : 828000
    Counter : 832000
    Counter : 836000
    Counter : 840000
    Counter : 844000
    Counter : 848000
    Counter : 852000
    Counter : 856000
    Counter : 860000
    Counter : 864000
    Counter : 868000
    Counter : 872000
    Counter : 876000
    Counter : 880000
    Counter : 884000
    Counter : 888000
    Counter : 892000
    Counter : 894902
    End of file
    
    
    
    Server Output -
    
    
    C:\Users\nater\Desktop\nim>Server
    Client: connected to server on address 127.0.0.1:5555
    This is the file name: c:\users\nater\desktop\spring.jpg
    File size is :894902
    Send file size
    Pull ...
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 4000
    Send data size : 2902
    End of file
    
    
    
    
    
    Run

Notice the server sends chunks of 4000 to the client and at the end it breaks 
out of the loop and shows "End of file"

The server is nearly the same receiving an iteration of 4000 and when the file 
chunks have finished, it breaks out of the loop and shows "End of file". 
However, the echo statement in the client
    
    
    waitFor serve(fileName)
    echo "Returning back to the main loop."
    
    
    Run

never shows the "Returning back to the main loop.". And there is no ability to 
input text, as the cursor will not take input. Please help to resolve.

Reply via email to