Skip to content
This repository was archived by the owner on Feb 14, 2025. It is now read-only.

Commit ae12083

Browse files
committed
wip refactoring structs to use span for read trait. Scanner still needs some work
1 parent 8cdcc37 commit ae12083

File tree

10 files changed

+272
-0
lines changed

10 files changed

+272
-0
lines changed

examples/scanner/__init__.mojo

Whitespace-only changes.

examples/scanner/scan_text.mojo

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
from gojo.bytes import buffer
2+
from gojo.bufio import Reader, Scanner, scan_words
3+
4+
5+
fn print_words(owned text: String):
6+
# Create a reader from a string buffer
7+
var buf = buffer.new_buffer(text^)
8+
var r = Reader(buf^)
9+
10+
# Create a scanner from the reader
11+
var scanner = Scanner[split=scan_words](r^)
12+
13+
while scanner.scan():
14+
print(scanner.current_token())
15+
16+
17+
fn print_lines(owned text: String):
18+
# Create a reader from a string buffer
19+
var buf = buffer.new_buffer(text^)
20+
var r = Reader(buf^)
21+
22+
# Create a scanner from the reader
23+
var scanner = Scanner(r^)
24+
25+
while scanner.scan():
26+
print(scanner.current_token())
27+
28+
29+
fn main():
30+
var text = String("Testing this string!")
31+
var text2 = String("Testing\nthis\nstring!")
32+
print_words(text^)
33+
print_lines(text2^)

examples/tcp/__init__.mojo

Whitespace-only changes.

examples/tcp/dial_client.mojo

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
from gojo.net import Socket, HostPort, dial_tcp, TCPAddr
2+
from gojo.syscall import SocketType
3+
import gojo.io
4+
5+
6+
fn main() raises:
7+
# Create UDP Connection
8+
alias message = String("dial")
9+
alias host = "127.0.0.1"
10+
alias port = 8081
11+
12+
for _ in range(10):
13+
var connection = dial_tcp("tcp", host, port)
14+
var bytes_written: Int
15+
var err: Error
16+
bytes_written, err = connection.write(
17+
String("GET / HTTP/1.1\r\nHost: www.example.com\r\nConnection: close\r\n\r\n").as_bytes()
18+
)
19+
if err:
20+
raise err
21+
22+
if bytes_written == 0:
23+
print("No bytes sent to peer.")
24+
return
25+
26+
# Read the response from the connection
27+
var response = List[UInt8](capacity=4096)
28+
var bytes_read: Int = 0
29+
bytes_read, err = connection.read(response)
30+
if err and str(err) != io.EOF:
31+
raise err
32+
33+
if bytes_read == 0:
34+
print("No bytes received from peer.")
35+
return
36+
37+
response.append(0)
38+
print("Message received:", String(response^))
39+
40+
# Cleanup the connection
41+
err = connection.close()
42+
if err:
43+
raise err

examples/tcp/get_request.mojo

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
from gojo.net import TCPAddr, get_ip_address, dial_tcp
2+
from gojo.syscall import ProtocolFamily
3+
4+
5+
fn main() raises:
6+
# Connect to example.com on port 80 and send a GET request
7+
var connection = dial_tcp("tcp", TCPAddr(get_ip_address("www.example.com"), 80))
8+
var bytes_written: Int = 0
9+
var err = Error()
10+
bytes_written, err = connection.write(
11+
String("GET / HTTP/1.1\r\nHost: www.example.com\r\nConnection: close\r\n\r\n").as_bytes()
12+
)
13+
if err:
14+
raise err
15+
16+
if bytes_written == 0:
17+
print("No bytes sent to peer.")
18+
return
19+
20+
# Read the response from the connection
21+
var response = List[UInt8](capacity=4096)
22+
var bytes_read: Int = 0
23+
bytes_read, err = connection.read(response)
24+
if err:
25+
raise err
26+
27+
if bytes_read == 0:
28+
print("No bytes received from peer.")
29+
return
30+
31+
response.append(0)
32+
print(String(response^))
33+
34+
# Cleanup the connection
35+
err = connection.close()
36+
if err:
37+
raise err

examples/tcp/listener_server.mojo

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
from gojo.net import TCPAddr, get_ip_address, listen_tcp, HostPort
2+
import gojo.io
3+
4+
5+
fn main() raises:
6+
var listener = listen_tcp("udp", TCPAddr("127.0.0.1", 12000))
7+
8+
while True:
9+
var connection = listener.accept()
10+
11+
# Read the contents of the message from the client.
12+
var bytes = List[UInt8](capacity=4096)
13+
var bytes_read: Int
14+
var err: Error
15+
bytes_read, err = connection.read(bytes)
16+
if str(err) != io.EOF:
17+
raise err
18+
19+
bytes.append(0)
20+
var message = String(bytes^)
21+
print("Message Received:", message)
22+
message = message.upper()
23+
24+
# Send a response back to the client.
25+
var bytes_sent: Int
26+
bytes_sent, err = connection.write(message.as_bytes())
27+
print("Message sent:", message, bytes_sent)

examples/tcp/socket_client.mojo

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
from gojo.net import Socket, HostPort
2+
from gojo.syscall import SocketType
3+
import gojo.io
4+
5+
6+
fn main() raises:
7+
# Create TCP Socket
8+
var socket = Socket()
9+
alias message = String("test")
10+
alias host = "127.0.0.1"
11+
alias port = 8082
12+
13+
# Bind client to port 8082
14+
socket.bind(host, port)
15+
16+
# Send 10 test messages
17+
var err = socket.connect(host, 8081)
18+
if err:
19+
raise err
20+
var bytes_sent: Int
21+
bytes_sent, err = socket.write(message.as_bytes())
22+
print("Message sent:", message)
23+
24+
var bytes = List[UInt8](capacity=16)
25+
var bytes_read: Int
26+
bytes_read, err = socket.read(bytes)
27+
if str(err) != io.EOF:
28+
raise err
29+
30+
bytes.append(0)
31+
var response = String(bytes^)
32+
print("Message received:", response)
33+
34+
_ = socket.shutdown()
35+
_ = socket.close()

examples/tcp/socket_server.mojo

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
from gojo.net import Socket, HostPort
2+
from gojo.syscall import SocketOptions
3+
import gojo.io
4+
5+
6+
fn main() raises:
7+
var socket = Socket()
8+
socket.set_socket_option(SocketOptions.SO_REUSEADDR, 1)
9+
alias host = "127.0.0.1"
10+
alias port = 8081
11+
12+
# Bind server to port 8081
13+
socket.bind(host, port)
14+
socket.listen()
15+
print("Listening on", socket.local_address_as_tcp())
16+
while True:
17+
# Accept connections from clients and serve them.
18+
var connection = socket.accept()
19+
print("Serving", connection.remote_address_as_tcp())
20+
21+
# Read the contents of the message from the client.
22+
var bytes = List[UInt8](capacity=4096)
23+
var bytes_read: Int
24+
var err: Error
25+
bytes_read, err = connection.read(bytes)
26+
if str(err) != io.EOF:
27+
raise err
28+
29+
bytes.append(0)
30+
var message = String(bytes^)
31+
print("Message Received:", message)
32+
message = message.upper()
33+
34+
# Send a response back to the client.
35+
var bytes_sent: Int
36+
bytes_sent, err = connection.write(message.as_bytes())
37+
print("Message sent:", message, bytes_sent)
38+
err = connection.close()
39+
if err:
40+
raise err

examples/udp/dial_client.mojo

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
from gojo.net import Socket, HostPort, dial_udp, UDPAddr
2+
from gojo.syscall import SocketType
3+
import gojo.io
4+
5+
6+
fn main() raises:
7+
# Create UDP Connection
8+
alias message = String("dial")
9+
alias host = "127.0.0.1"
10+
alias port = 12000
11+
var udp = dial_udp("udp", host, port)
12+
13+
# Send 10 test messages
14+
for _ in range(10):
15+
var bytes_sent: Int
16+
var err: Error
17+
bytes_sent, err = udp.write_to(message.as_bytes(), host, port)
18+
print("Message sent:", message, bytes_sent)
19+
20+
var bytes = List[UInt8](capacity=16)
21+
var bytes_received: Int
22+
var remote: HostPort
23+
bytes_received, remote, err = udp.read_from(bytes)
24+
if str(err) != io.EOF:
25+
raise err
26+
27+
bytes.append(0)
28+
var response = String(bytes^)
29+
print("Message received:", response)

examples/udp/socket_client.mojo

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
from gojo.net import Socket, HostPort
2+
from gojo.syscall import SocketType
3+
import gojo.io
4+
5+
6+
fn main() raises:
7+
# Create UDP Socket
8+
var socket = Socket(socket_type=SocketType.SOCK_DGRAM)
9+
alias message = String("test")
10+
alias host = "127.0.0.1"
11+
alias port = 12000
12+
13+
# Send 10 test messages
14+
for _ in range(10):
15+
var bytes_sent: Int
16+
var err: Error
17+
bytes_sent, err = socket.send_to(message.as_bytes(), host, port)
18+
print("Message sent:", message)
19+
20+
var bytes: List[UInt8]
21+
var remote: HostPort
22+
bytes, remote, err = socket.receive_from(1024)
23+
if str(err) != io.EOF:
24+
raise err
25+
26+
bytes.append(0)
27+
var response = String(bytes^)
28+
print("Message received:", response)

0 commit comments

Comments
 (0)