aboutsummaryrefslogtreecommitdiff
path: root/src/server/writer.odin
blob: bbd0cac1edf22529aff0f2967cebda8e1f91da3a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package server

import "core:os"
import "core:mem"
import "core:fmt"
import "core:strings"
import "core:sync"

WriterFn :: proc(_: rawptr, _: []byte) -> (int, int)

Writer :: struct {
	writer_fn:      WriterFn,
	writer_context: rawptr,
	writer_mutex:   sync.Mutex,
}

make_writer :: proc(writer_fn: WriterFn, writer_context: rawptr) -> Writer {
	writer := Writer {writer_context = writer_context, writer_fn = writer_fn}
	return writer
}

write_sized :: proc(writer: ^Writer, data: []byte) -> bool {
	sync.mutex_lock(&writer.writer_mutex)
	defer sync.mutex_unlock(&writer.writer_mutex)

	written, err := writer.writer_fn(writer.writer_context, data)

	if (err != 0) {
		return false
	}

	return true
}