wren-lang / wren-cli

A command line tool for the Wren programming language
MIT License
129 stars 31 forks source link

Using Libuv to create a socket server #13

Open masoodahm opened 7 years ago

masoodahm commented 7 years ago

hi, Since wren uses libuv, is there a way for wren to use underlying libuv's network IO functions, maybe via io module, I haven't found any thing in the docs regarding the wren built in io module. It says it's up to the host application to provide interfaces, but what about using wren script as a stand alone application. Also I am coming from web development background, as opposed to game dev. It would really be cool to be able to write a web framework using wren

minirop commented 7 years ago

libuv is only used in the CLI, wren itself doesn't know anything. You could build up on the CLI or doing something similar from scratch.

masoodahm commented 7 years ago

ok I will try that

munificent commented 6 years ago

The short answer is no, the Wren CLI doesn't currently expose libuv's networking API. I intend to, I just haven't gotten there yet.

joshgoebel commented 3 years ago

OMG, a simple MUD or something in Wren would be pretty awesome.

joshgoebel commented 3 years ago

Disclaimer: I'm new to Wren and it's embedding and C++ is not my best language, and low-level networking is not the simplest... so go easy on me. But if anyone had comments or wanted to try it out, test it, etc... there is no outbound connections, this is just a TCP server that handles incoming connections.

There is probably all sorts of ugly, missing error handling, and really there should probably be hooks for disconnect, etc... This should be considered like an alpha version.

https://github.com/joshgoebel/wren-cli/tree/network

A simple echo server:

import "socket" for TCPServer

var server = TCPServer.new("127.0.0.1",7000)
server.onConnect = Fn.new() { |conn|
    conn.writeLn("Hello, user.")
    var x 
    while (x = conn.readWait()) {
        conn.write(x)
    }
}
server.serve()

Very open to a high level discussion of what primitives we need to flesh this out.

aosenkidu commented 1 year ago

This seems not to be in your repository @joshgoebel. Might it be in a branch you have not committed to github yet?

joshgoebel commented 1 year ago

https://github.com/joshgoebel/wren-console/blob/network/src/module/network.wren

The stuff I was working on can be found in the branch I pointed to.

aosenkidu commented 1 year ago

https://github.com/joshgoebel/wren-console/blob/network/src/module/network.wren

The stuff I was working on can be found in the branch I pointed to.

Thank you :D however, the link I answered to: is either a different repository or a different branch. So no reason to "down thumb" a valid question.

Perhaps I just don't grasp the github webinterface ...