|
@@ -3,45 +3,43 @@ package door
|
|
|
import (
|
|
|
"log"
|
|
|
"strings"
|
|
|
- "syscall"
|
|
|
"sync/atomic"
|
|
|
+ "syscall"
|
|
|
)
|
|
|
|
|
|
// https://go101.org/article/channel-closing.html
|
|
|
|
|
|
-// This will get renamed back to Writer, once I get
|
|
|
-// it working...
|
|
|
-func Writer2(handle int, d *Door) {
|
|
|
+func Writer(handle int, d *Door) {
|
|
|
log.Println("Writer2")
|
|
|
defer d.wg.Done()
|
|
|
for {
|
|
|
select {
|
|
|
- case <- d.closeChannel:
|
|
|
- close(d.writerChannel)
|
|
|
- log.Println("~Writer2")
|
|
|
- return
|
|
|
+ case <-d.closeChannel:
|
|
|
+ close(d.writerChannel)
|
|
|
+ log.Println("~Writer")
|
|
|
+ return
|
|
|
default:
|
|
|
}
|
|
|
|
|
|
select {
|
|
|
- case <- d.closeChannel:
|
|
|
- close(d.writerChannel)
|
|
|
- log.Println("~Writer2")
|
|
|
- return
|
|
|
+ case <-d.closeChannel:
|
|
|
+ close(d.writerChannel)
|
|
|
+ log.Println("~Writer")
|
|
|
+ return
|
|
|
case output, ok := <-d.writerChannel:
|
|
|
if !ok {
|
|
|
log.Println("closeChannel")
|
|
|
- if ! d.Disconnect() {
|
|
|
- // d.Disconnected = true
|
|
|
- atomic.StoreInt32(&d.Disconnected, 1)
|
|
|
- // if !ok, the channel is already closed...
|
|
|
- // close(d.writerChannel)
|
|
|
-}
|
|
|
- log.Println("~Writer2")
|
|
|
+ if !d.Disconnect() {
|
|
|
+ // d.Disconnected = true
|
|
|
+ atomic.StoreInt32(&d.Disconnected, 1)
|
|
|
+ // if !ok, the channel is already closed...
|
|
|
+ // close(d.writerChannel)
|
|
|
+ }
|
|
|
+ log.Println("~Writer")
|
|
|
return
|
|
|
|
|
|
-// d.closeChannel <- true
|
|
|
-// continue
|
|
|
+ // d.closeChannel <- true
|
|
|
+ // continue
|
|
|
} else {
|
|
|
// log.Println("output")
|
|
|
/* Handle cases where we're updating a portion of the screen.
|
|
@@ -58,12 +56,12 @@ func Writer2(handle int, d *Door) {
|
|
|
n, err := syscall.Write(handle, buffer)
|
|
|
if (err != nil) || (n != len(buffer)) {
|
|
|
log.Println("closeChannel")
|
|
|
- if ! d.Disconnect() {
|
|
|
- // d.Disconnected = true
|
|
|
- atomic.StoreInt32(&d.Disconnected, 1)
|
|
|
- close(d.writerChannel)
|
|
|
+ if !d.Disconnect() {
|
|
|
+ // d.Disconnected = true
|
|
|
+ atomic.StoreInt32(&d.Disconnected, 1)
|
|
|
+ close(d.writerChannel)
|
|
|
}
|
|
|
- log.Println("~Writer2")
|
|
|
+ log.Println("~Writer")
|
|
|
return
|
|
|
}
|
|
|
}
|
|
@@ -71,6 +69,7 @@ func Writer2(handle int, d *Door) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+/*
|
|
|
func Writer(handle int, writerChannel *chan string) {
|
|
|
for output := range *writerChannel {
|
|
|
buffer := []byte(output)
|
|
@@ -81,3 +80,4 @@ func Writer(handle int, writerChannel *chan string) {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+*/
|