123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- package door
- import (
- "syscall"
- )
- type OSWriter struct {
- Handle syscall.Handle
- BaseWriter
- }
- func (ow *OSWriter) Init(d *Door) {
- ow.Closed = false
- ow.Handle = syscall.Handle(d.WRITEFD)
- ow.ansiCode = make([]byte, 0, 32)
- }
- func (ow *OSWriter) OSWrite(buffer []byte) (int, error) {
- var l uint32 = uint32(len(buffer))
- WSA_Buffer := syscall.WSABuf{Len: uint32(l), Buf: &buffer[0]}
- var UitnZero_1 uint32 = uint32(0)
- var DataWrite uint32 = uint32(0)
- var err error
- err = syscall.WSASend(ow.Handle, &WSA_Buffer, 1, &DataWrite, UitnZero_1, nil, nil)
- if (err != nil) || (l != DataWrite) {
- if !ow.Closed {
- ow.Closed = true
-
-
- }
- }
- return int(DataWrite), err
- }
- func (ow *OSWriter) Write(buffer []byte) (int, error) {
- if ow.Closed {
- return 0, ErrDisconnected
- }
- return ow.OSWrite(buffer)
- }
- func (ow *OSWriter) Stop() {
- ow.Closed = true
- }
- func (ow *OSWriter) IsClosed() bool {
- return ow.Closed
- }
|