185 lines
4.2 KiB
V
185 lines
4.2 KiB
V
module io
|
|
|
|
import net
|
|
import encoding.binary
|
|
|
|
struct NetOutputStream {
|
|
mut:
|
|
sock &net.Socket
|
|
}
|
|
|
|
pub fn new_net_output_stream(sock &net.Socket) &NetOutputStream {
|
|
return &NetOutputStream{
|
|
sock: sock
|
|
}
|
|
}
|
|
|
|
pub fn (mut nos NetOutputStream) write_int(d int) ? {
|
|
mut bytes := []byte{len: int(sizeof(int))}
|
|
binary.big_endian_put_u32(mut bytes, u32(d))
|
|
nos.sock.send(bytes.data, bytes.len)?
|
|
}
|
|
|
|
pub fn (mut nos NetOutputStream) write_ints(d []int) ? {
|
|
mut bytes := []byte{}
|
|
for u in d {
|
|
mut tmp := []byte{len: int(sizeof(int))}
|
|
binary.big_endian_put_u32(mut tmp, u32(u))
|
|
bytes << tmp
|
|
}
|
|
nos.sock.send(bytes.data, bytes.len)?
|
|
}
|
|
|
|
pub fn (mut nos NetOutputStream) write_i8(d i8) ? {
|
|
nos.sock.send([byte(d)].data, int(sizeof(i8)))?
|
|
}
|
|
|
|
pub fn (mut nos NetOutputStream) write_i8s(d []i8) ? {
|
|
nos.sock.send(d.data, int(sizeof(i8) * u32(d.len)))?
|
|
}
|
|
|
|
pub fn (mut nos NetOutputStream) write_i16(d i16) ? {
|
|
mut bytes := []byte{len: int(sizeof(i16))}
|
|
binary.big_endian_put_u16(mut bytes, u16(d))
|
|
nos.sock.send(bytes.data, bytes.len)?
|
|
}
|
|
|
|
pub fn (mut nos NetOutputStream) write_i16s(d []i16) ? {
|
|
mut bytes := []byte{}
|
|
for u in d {
|
|
mut tmp := []byte{len: int(sizeof(i16))}
|
|
binary.big_endian_put_u16(mut tmp, u16(u))
|
|
bytes << tmp
|
|
}
|
|
nos.sock.send(bytes.data, bytes.len)?
|
|
}
|
|
|
|
pub fn (mut nos NetOutputStream) write_i64(d i64) ? {
|
|
mut bytes := []byte{len: int(sizeof(i64))}
|
|
binary.big_endian_put_u64(mut bytes, u64(d))
|
|
nos.sock.send(bytes.data, bytes.len)?
|
|
}
|
|
|
|
pub fn (mut nos NetOutputStream) write_i64s(d []i64) ? {
|
|
mut bytes := []byte{}
|
|
for u in d {
|
|
mut tmp := []byte{len: int(sizeof(i64))}
|
|
binary.big_endian_put_u64(mut tmp, u64(u))
|
|
bytes << tmp
|
|
}
|
|
nos.sock.send(bytes.data, bytes.len)?
|
|
}
|
|
|
|
pub fn (mut nos NetOutputStream) write_byte(d byte) ? {
|
|
nos.sock.send([d].data, int(sizeof(byte)))?
|
|
}
|
|
|
|
pub fn (mut nos NetOutputStream) write_bytes(d []byte) ? {
|
|
nos.sock.send(d.data, int(sizeof(byte) * u32(d.len)))?
|
|
}
|
|
|
|
pub fn (mut nos NetOutputStream) write_u16(d u16) ? {
|
|
mut bytes := []byte{len: int(sizeof(u16))}
|
|
binary.big_endian_put_u16(mut bytes, d)
|
|
nos.sock.send(bytes.data, bytes.len)?
|
|
}
|
|
|
|
pub fn (mut nos NetOutputStream) write_u16s(d []u16) ? {
|
|
mut bytes := []byte{}
|
|
for u in d {
|
|
mut tmp := []byte{len: int(sizeof(u16))}
|
|
binary.big_endian_put_u16(mut tmp, u)
|
|
bytes << tmp
|
|
}
|
|
nos.sock.send(bytes.data, bytes.len)?
|
|
}
|
|
|
|
pub fn (mut nos NetOutputStream) write_u32(d u32) ? {
|
|
mut bytes := []byte{len: int(sizeof(u32))}
|
|
binary.big_endian_put_u32(mut bytes, d)
|
|
nos.sock.send(bytes.data, bytes.len)?
|
|
}
|
|
|
|
pub fn (mut nos NetOutputStream) write_u32s(d []u32) ? {
|
|
mut bytes := []byte{}
|
|
for u in d {
|
|
mut tmp := []byte{len: int(sizeof(u32))}
|
|
binary.big_endian_put_u32(mut tmp, u)
|
|
bytes << tmp
|
|
}
|
|
nos.sock.send(bytes.data, int(sizeof(u32) * u32(d.len)))?
|
|
}
|
|
|
|
pub fn (mut nos NetOutputStream) write_u64(d u64) ? {
|
|
mut bytes := []byte{len: int(sizeof(u64))}
|
|
binary.big_endian_put_u64(mut bytes, d)
|
|
nos.sock.send(bytes.data, bytes.len)?
|
|
}
|
|
|
|
pub fn (mut nos NetOutputStream) write_u64s(d []u64) ? {
|
|
mut bytes := []byte{}
|
|
for u in d {
|
|
mut tmp := []byte{len: int(sizeof(u64))}
|
|
binary.big_endian_put_u64(mut tmp, u)
|
|
bytes << tmp
|
|
}
|
|
nos.sock.send(bytes.data, int(sizeof(u64) * u32(d.len)))?
|
|
}
|
|
|
|
pub fn (mut nos NetOutputStream) write_f32(d f32) ? {
|
|
pb := &byte(&d)
|
|
mut bytes := []byte{len: int(sizeof(f32))}
|
|
unsafe {
|
|
for i in 0..bytes.len {
|
|
bytes[i] = pb[i]
|
|
}
|
|
}
|
|
nos.sock.send(bytes.data, bytes.len)?
|
|
}
|
|
|
|
pub fn (mut nos NetOutputStream) write_f32s(d []f32) ? {
|
|
mut bytes := []byte{}
|
|
for f in d {
|
|
pb := &byte(&f)
|
|
unsafe {
|
|
for i in 0..int(sizeof(f32)) {
|
|
bytes << pb[i]
|
|
}
|
|
}
|
|
}
|
|
nos.sock.send(bytes.data, bytes.len)?
|
|
}
|
|
|
|
pub fn (mut nos NetOutputStream) write_f64(d f64) ? {
|
|
pb := &byte(&d)
|
|
mut bytes := []byte{len: int(sizeof(f64))}
|
|
unsafe {
|
|
for i in 0..bytes.len {
|
|
bytes[i] = pb[i]
|
|
}
|
|
}
|
|
nos.sock.send(bytes.data, bytes.len)?
|
|
}
|
|
|
|
pub fn (mut nos NetOutputStream) write_f64s(d []f64) ? {
|
|
mut bytes := []byte{}
|
|
for f in d {
|
|
pb := &byte(&f)
|
|
unsafe {
|
|
for i in 0..int(sizeof(f64)) {
|
|
bytes << pb[i]
|
|
}
|
|
}
|
|
}
|
|
nos.sock.send(bytes.data, bytes.len)?
|
|
}
|
|
|
|
pub fn (mut nos NetOutputStream) write_string(d string) ? {
|
|
nos.write_bytes(d.bytes())?
|
|
}
|
|
|
|
// TODO make it generic
|
|
pub fn (mut nos NetOutputStream) write_struct(d voidptr, l u32) ? {
|
|
nos.sock.send(byteptr(d), int(l))?
|
|
}
|