1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- package door
- import (
- "fmt"
- "log"
- "strings"
- "sync/atomic"
- "syscall"
- )
- func Writer(d *Door) {
- var handle syscall.Handle = syscall.Handle(d.Config.Comm_handle)
- // handle syscall.Handle, writerChannel *chan string
- log.Println("Writer")
- defer d.wg.Done()
- for {
- select {
- case <-d.closeChannel:
- close(d.writerChannel)
- log.Println("~Writer")
- return
- default:
- }
- select {
- case <-d.closeChannel:
- close(d.writerChannel)
- log.Println("~Writer")
- return
- case output, ok := <-d.writerChannel:
- if !ok {
- log.Println("closeChannel")
- if !d.Disconnect() {
- atomic.StoreInt32(&d.Disconnected, 1)
- }
- log.Println("~Writer")
- return
- } else {
- if strings.HasSuffix(output, RestorePos) {
- output += Color(d.LastColor...)
- } else {
- d.UpdateLastColor(output, &d.LastColor)
- }
- var l uint32 = uint32(len(output))
- var buffer []byte = []byte(output)
- 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(handle, &WSA_Buffer, 1, &DataWrite, UitnZero_1, nil, nil)
- if err != nil {
- fmt.Printf("write: %d bytes, error: %#v\n", DataWrite, err)
- }
- if (err != nil) || (l != DataWrite) {
- log.Println("CloseChannel")
- if !d.Disconnect() {
- atomic.StoreInt32(&d.Disconnected, 1)
- close(d.writerChannel)
- }
- log.Println("~Writer")
- return
- }
- }
- }
- }
- /*
- for output := range *writerChannel {
- l := uint32(len(output))
- buffer := []byte(output)
- WSA_Buffer := syscall.WSABuf{Len: uint32(l), Buf: &buffer[0]}
- UitnZero_1 := uint32(0)
- DataWrite := uint32(0)
- err := syscall.WSASend(handle, &WSA_Buffer, 1, &DataWrite, UitnZero_1, nil, nil)
- if err != nil {
- fmt.Printf("write: %d bytes, error: %#v\n", DataWrite, err)
- }
- if (err != nil) || (l != DataWrite) {
- close(*writerChannel)
- break
- }
- }
- */
- }
|