syni_prototype module not needed anymore
This commit is contained in:
parent
f5e07b79f4
commit
17c4fa47f2
|
@ -1,95 +0,0 @@
|
|||
import
|
||||
net,
|
||||
asyncnet,
|
||||
asyncdispatch,
|
||||
asyncutils,
|
||||
punch
|
||||
|
||||
from strutils import format, join
|
||||
from nativesockets import setSockOptInt
|
||||
from os import paramCount, paramStr
|
||||
|
||||
var IPPROTO_IP {.importc: "IPPROTO_IP", header: "<netinet/in.h>".}: cint
|
||||
var IP_TTL {.importc: "IP_TTL", header: "<netinet/in.h>".}: cint
|
||||
|
||||
proc usage() =
|
||||
echo("Usage: $# client|server".format(paramStr(0)))
|
||||
|
||||
proc processInput(client: AsyncSocket) {.async.} =
|
||||
while true:
|
||||
let input = await asyncReadline()
|
||||
await client.send(input & "\c\L")
|
||||
|
||||
proc connectAsClient(clientAddress: string,
|
||||
clientPort: Port,
|
||||
serverAddress: string,
|
||||
serverPort: Port) {.async.} =
|
||||
var client = newAsyncSocket()
|
||||
client.setSockOpt(OptReuseAddr, true)
|
||||
client.getFd().setSockOptInt(IPPROTO_IP, IP_TTL, 2)
|
||||
client.bindAddr(clientPort, clientAddress)
|
||||
try:
|
||||
echo "trying to connect"
|
||||
await client.connect(serverAddress, serverPort)
|
||||
let (address, port) = client.getPeerAddr()
|
||||
echo("connected to $#:$#!".format(address, port.uint16))
|
||||
asyncCheck processInput(client)
|
||||
while true:
|
||||
let line = await client.recvLine()
|
||||
if line.len == 0: break
|
||||
echo("server responded: $#".format(line))
|
||||
except OSError as e:
|
||||
echo("Error: $#".format(e.msg))
|
||||
|
||||
proc processClient(client: AsyncSocket) {.async.} =
|
||||
while true:
|
||||
let line = await client.recvLine()
|
||||
if line.len == 0: break
|
||||
echo("client sent message: $#".format(line))
|
||||
await client.send(line & "\c\L")
|
||||
|
||||
proc runServer(serverAddress: string,
|
||||
serverPort: Port,
|
||||
clientAddress: string,
|
||||
clientPort: Port) {.async.} =
|
||||
var server = newAsyncSocket()
|
||||
server.setSockOpt(OptReuseAddr, true)
|
||||
server.bindAddr(serverPort)
|
||||
server.listen()
|
||||
echo("listening on port $#".format(serverPort.uint16))
|
||||
while true:
|
||||
let client = await server.accept()
|
||||
let (address, port) = client.getPeerAddr()
|
||||
echo("client $#:$# connected!".format(address, port.uint16()))
|
||||
asyncCheck processClient(client)
|
||||
|
||||
proc main() =
|
||||
if paramCount() != 1:
|
||||
usage()
|
||||
return
|
||||
let serverAddress = "176.95.209.87"
|
||||
let serverPort = Port(80)
|
||||
let clientAddress = $getPrimaryIPAddr(parseIpAddress(serverAddress))
|
||||
let clientPort = Port(1234)
|
||||
case paramStr(1)
|
||||
of "client":
|
||||
asyncCheck punchHoleAsClient(clientAddress, clientPort, serverAddress, serverPort)
|
||||
asyncCheck connectAsClient(clientAddress, clientPort, serverAddress, serverPort)
|
||||
try:
|
||||
runForever()
|
||||
except NetworkInterfaceError as e:
|
||||
echo(e.msg)
|
||||
except PunchHoleError as e:
|
||||
echo(e.msg)
|
||||
of "server":
|
||||
asyncCheck runServer(serverAddress, serverPort, clientAddress, clientPort)
|
||||
try:
|
||||
runForever()
|
||||
except ValueError:
|
||||
echo "server got ValueError!"
|
||||
discard
|
||||
else:
|
||||
usage()
|
||||
|
||||
when isMainModule:
|
||||
main()
|
Loading…
Reference in New Issue