...
1 package utils
2
3 import (
4 "fmt"
5 )
6
7 type Send_data_type func(b []byte) error
8 type Send_new_file_type func(key, filename string) error
9
10
11 type ByteStreamSender struct {
12 new_file Send_new_file_type
13 send_data Send_data_type
14 file_counter int
15 }
16
17
26 func NewByteStreamSender(f1 Send_new_file_type, f2 Send_data_type) *ByteStreamSender {
27 res := &ByteStreamSender{
28 new_file: f1,
29 send_data: f2,
30 }
31 return res
32 }
33
34
35 func (bss *ByteStreamSender) FileCount() int {
36 return bss.file_counter
37 }
38
39 func (bss *ByteStreamSender) SendBytes(key, filename string, b []byte) error {
40 err := bss.new_file(key, filename)
41 if err != nil {
42 return err
43 }
44 bss.file_counter++
45 size := 8192
46 offset := 0
47 for {
48 if size+offset > len(b) {
49 size = len(b) - offset
50 }
51 if size == 0 {
52 break
53 }
54
55 err := bss.send_data(b[offset : offset+size])
56 if err != nil {
57 return err
58 }
59 offset = offset + size
60 }
61 return nil
62 }
63
64 func (bss *ByteStreamSender) debugf(format string, args ...interface{}) {
65 fmt.Printf("[bss] "+format, args...)
66 }
67
View as plain text