// socket_example.wren (Corrected)
import "socket" for Socket
System.print("--- Wren Socket Echo Server and Client ---")
var serverFiber = Fiber.new {
var server = Socket.new()
if (server.listen("localhost", 8080, 5)) {
System.print("Server listening on localhost:8080")
while (server.isOpen) {
server.accept { |err, client|
if (err) {
System.print("Accept error: %(err)")
return
}
System.print("Client connected!")
Fiber.new {
while (client.isOpen) {
client.read(4096) { |readErr, data|
if (readErr) {
System.print("Client disconnected.")
client.close()
return
}
System.print("Received: %(data)")
// CORRECTED: Replaced '_' with 'result'
client.write("Echo: %(data)") { |writeErr, result|
if (writeErr) System.print("Write error: %(writeErr)")
}
}
}
}.call()
}
}
} else {
System.print("Failed to start server.")
}
}
var clientFiber = Fiber.new {
var client = Socket.new()
// CORRECTED: Replaced '_' with 'result'
client.connect("localhost", 8080) { |err, result|
if (err) {
System.print("Client connection error: %(err)")
return
}
System.print("Client connected to server.")
// CORRECTED: Replaced '_' with 'result'
client.write("Hello from Wren!") { |writeErr, result|
if (writeErr) {
System.print("Client write error: %(writeErr)")
return
}
client.read(1024) { |readErr, data|
if (readErr) {
System.print("Client read error: %(readErr)")
} else {
System.print("Client received: %(data)")
}
client.close()
}
}
}
}
// Start the server
serverFiber.call()
// Give the server a moment to start up before connecting the client
Fiber.sleep(100)
// Start the client
clientFiber.call()
// Let the operations complete
Fiber.sleep(1000)