12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- 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)
- }
- 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) {
- 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
- }
- }
- */
- }
|