basic frame shipping, but bug in ncurses init/exit
This commit is contained in:
parent
bba1177326
commit
9388ea78f7
|
@ -3,6 +3,7 @@ package cmd // code.bitsetter.de/fun/gosl/cmd
|
|||
import (
|
||||
"encoding/gob"
|
||||
"fmt"
|
||||
"log"
|
||||
"net"
|
||||
"os"
|
||||
"strconv"
|
||||
|
@ -20,17 +21,27 @@ var cmdClient = &cobra.Command{
|
|||
}
|
||||
|
||||
var (
|
||||
ServerHost string
|
||||
ServerHost string
|
||||
renderQueue = make(chan data.Frame)
|
||||
)
|
||||
|
||||
func register(con net.Conn, id int) error {
|
||||
w, h := data.TestNC()
|
||||
w, h := 0, 0 //data.TestNC()
|
||||
enc := gob.NewEncoder(con) // Encoder
|
||||
err := enc.Encode(handshake{ID: id, H: h, W: w})
|
||||
return err
|
||||
}
|
||||
|
||||
func render() {
|
||||
var f data.Frame
|
||||
for f = range renderQueue {
|
||||
data.RenderFrame(&f)
|
||||
}
|
||||
}
|
||||
|
||||
func runClient(cmd *cobra.Command, args []string) {
|
||||
data.InitNC()
|
||||
defer data.ExitNC()
|
||||
fmt.Println("running client ...")
|
||||
|
||||
if len(args) < 1 {
|
||||
|
@ -43,8 +54,21 @@ func runClient(cmd *cobra.Command, args []string) {
|
|||
if err != nil {
|
||||
fmt.Println("connect error:", err)
|
||||
}
|
||||
|
||||
defer con.Close()
|
||||
register(con, id)
|
||||
|
||||
go render()
|
||||
for {
|
||||
var oFrame data.Frame
|
||||
// always use new decoder - reusing may lead to errors
|
||||
gd := gob.NewDecoder(con)
|
||||
err = gd.Decode(&oFrame)
|
||||
if err != nil {
|
||||
log.Fatal("RGS:", err)
|
||||
}
|
||||
renderQueue <- oFrame
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func init() {
|
||||
|
|
|
@ -8,6 +8,8 @@ import (
|
|||
"time"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
|
||||
"code.bitsetter.de/fun/gosl/data"
|
||||
)
|
||||
|
||||
var cmdServer = &cobra.Command{
|
||||
|
@ -51,11 +53,23 @@ func handleConn(conn *net.TCPConn) {
|
|||
}
|
||||
|
||||
func serveClients() {
|
||||
var oFrame = data.Frame{
|
||||
1, 10,
|
||||
[][]rune{
|
||||
[]rune("hallo"),
|
||||
[]rune("das"),
|
||||
[]rune("ist"),
|
||||
[]rune("einTest"),
|
||||
},
|
||||
}
|
||||
for { // while true
|
||||
for _, k := range clientKeys {
|
||||
id, client := k, clients[k]
|
||||
if id > 0 {
|
||||
enc := gob.NewEncoder(client.con)
|
||||
enc.Encode(oFrame)
|
||||
log.Println("ID:", id, "Client:", client)
|
||||
|
||||
}
|
||||
}
|
||||
time.Sleep(time.Second)
|
||||
|
|
6
data/frame.go
Normal file
6
data/frame.go
Normal file
|
@ -0,0 +1,6 @@
|
|||
package data // code.bitsetter.de/fun/gosl/data
|
||||
|
||||
type Frame struct {
|
||||
W, H int
|
||||
Data [][]rune
|
||||
}
|
|
@ -8,9 +8,31 @@ import (
|
|||
nc "github.com/rthornton128/goncurses"
|
||||
)
|
||||
|
||||
type Screen struct {
|
||||
w, h int
|
||||
data []rune
|
||||
var (
|
||||
win *nc.Window
|
||||
)
|
||||
|
||||
func RenderFrame(f *Frame) {
|
||||
win.Clear()
|
||||
for k, _ := range f.Data {
|
||||
win.MovePrint(k+1, 1, string(f.Data[k]))
|
||||
}
|
||||
}
|
||||
|
||||
func InitNC() {
|
||||
var err error
|
||||
win, err = nc.Init()
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
|
||||
func ExitNC() {
|
||||
//if win != nil {
|
||||
|
||||
// }
|
||||
nc.End()
|
||||
}
|
||||
|
||||
func TestNC() (int, int) {
|
||||
|
|
Loading…
Reference in New Issue
Block a user