collection of minimal Nim programs to accomplish simple tasks
keywords: Nim keywords: code snippets
collection of minimal Nim programs to accomplish simple tasks
keywords: Nim keywords: code snippets
import md5 | |
echo "Hello, world!".md5().toHex() |
import std/strformat | |
let payloadTxt: string = "TEST" | |
var json0 = &"{{\"type\":\"cmd\",\"payload\":\"{payloadTxt}\"}}" | |
echo json0 |
# compile with --threads:on | |
import std/os # for sleep | |
var | |
# create a channel to send/recv strings | |
commChan: Channel[string] | |
sender: Thread[void] | |
recver: Thread[void] | |
proc sendMsg() = | |
sleep(500) | |
# send a message in the channel | |
commChan.send("Hi") | |
proc recvMsg() = | |
# block on the channel, waiting for output | |
let msg: string = commChan.recv() | |
echo "Received message: " & msg | |
# very important: channels must be opened before they can be used | |
commChan.open() | |
createThread(sender, sendMsg) | |
createThread(recver, recvMsg) | |
joinThreads(sender, recver) |
import std/net | |
let socket = newSocket(AF_INET, SOCK_DGRAM, IPPROTO_UDP) | |
#socket.setBlocking(false) | |
var address: string = "0.0.0.0" | |
var port: int = 26098 | |
socket.sendTo(address, Port(port), "status\n") | |
while true: | |
var data: string | |
let length: int = 2048 | |
var port2: Port | |
let recvRes: int = recvFrom(socket, data, length, address, port2) | |
# from https://nim-lang.org/docs/asyncnet.html | |
import std/[asyncnet, asyncdispatch] | |
var clients {.threadvar.}: seq[AsyncSocket] | |
proc processClient(client: AsyncSocket) {.async.} = | |
while true: | |
let line = await client.recvLine() | |
if line.len == 0: break | |
for c in clients: | |
await c.send(line & "\c\L") | |
proc serve() {.async.} = | |
clients = @[] | |
var server = newAsyncSocket() | |
server.setSockOpt(OptReuseAddr, true) | |
server.bindAddr(Port(12345)) | |
server.listen() | |
while true: | |
let client = await server.accept() | |
clients.add client | |
asyncCheck processClient(client) | |
asyncCheck serve() | |
runForever() | |
import std/[asyncnet, asyncdispatch] | |
# Create the socket | |
var socket = newAsyncSocket() | |
block: | |
# Connect to the server | |
let host = "127.0.0.1" | |
let port: Port = Port(4466) | |
waitFor socket.connect(host, port) | |
echo "net: Connected to the server" | |
var recvFuture: Future[system.string] = socket.recvLine() | |
while true: | |
poll(25) | |
if recvFuture.finished: | |
echo "DBG: recvFuture finished" | |
if not recvFuture.failed: | |
let recvMsg: string = recvFuture.read | |
echo "net: recv=", recvMsg | |
recvFuture = socket.recvLine() | |
import std/[asyncnet, asyncdispatch] | |
proc asyncClient(host: string, port: Port, message: string) {.async.} = | |
# Create the socket | |
var socket = newAsyncSocket() | |
try: | |
# Connect to the server | |
await socket.connect(host, port) | |
echo "Connected to the server." | |
# Send the message to the server | |
await socket.send(message) | |
echo "Message sent: ", message | |
# Receive the response from the server | |
#var response = newString(1024) | |
#let bytesRead = await socket.recv(response, response.len) | |
#response.setLen(bytesRead) | |
var response: string = await socket.recvLine() | |
echo "Response received: ", response | |
except CatchableError as error: | |
echo "Error: ", error.msg | |
finally: | |
# Close the connection | |
socket.close() | |
echo "Connection closed." | |
# Main procedure | |
proc main() = | |
let host = "127.0.0.1" | |
let port: Port = Port(12345) | |
let message = "Hello, Server!" | |
waitFor asyncClient(host, port, message) | |
main() |
import system/io | |
# Open a binary file for reading | |
let input = open("textZ9584.txt.gz", fmRead) | |
let content = input.readAll() | |
input.close() | |
# Do something with the content | |
echo(content) |
# keywords: regex | |
# keywords: regular expression | |
# keywords: nim | |
# keywords: group matching | |
import re | |
let s = "22. YTTD kmkmkm" | |
let pattern = re"^\d+\. ([\w\s]+)$" | |
var matchesArr: array[2, string] | |
let matches = match(s, pattern, matchesArr) | |
if matches: # check if there is a match | |
echo("match found") | |
echo(matchesArr[0]) | |
else: | |
echo("No match found") |