123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- package door
- import (
- "bytes"
- "log"
- "sync"
- "syscall"
- )
- type OSWriter struct {
- Mutex sync.Mutex
- Closed bool
- Handle int
- }
- func (ow *OSWriter) Init(d *Door) {
- ow.Closed = false
- ow.Handle = d.Config.Comm_handle
- }
- func (ow *OSWriter) OSWrite(buffer []byte) (int, error) {
- if DEBUG_DOOR {
- if ow.Mutex.TryLock() {
- log.Panic("OSWrite: mutex was NOT locked.")
- }
- }
- n, err := syscall.Write(ow.Handle, buffer)
- if (err != nil) || (n != len(buffer)) {
- if !ow.Closed {
- ow.Closed = true
-
-
- }
- }
- return n, err
- }
- func (ow *OSWriter) Write(buffer []byte) (int, error) {
- ow.Mutex.Lock()
- defer ow.Mutex.Unlock()
- if ow.Closed {
- return 0, ErrDisconnected
- }
- var output bytes.Buffer
- output.Write(buffer)
-
-
-
- return ow.OSWrite(output.Bytes())
- }
- func (ow *OSWriter) Stop() {
- ow.Mutex.Lock()
- defer ow.Mutex.Unlock()
- ow.Closed = true
- }
- func (ow *OSWriter) IsClosed() bool {
- ow.Mutex.Lock()
- defer ow.Mutex.Unlock()
- return ow.Closed
- }
|