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 (
|
import (
|
||||||
"encoding/gob"
|
"encoding/gob"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"log"
|
||||||
"net"
|
"net"
|
||||||
"os"
|
"os"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
@ -21,16 +22,26 @@ var cmdClient = &cobra.Command{
|
||||||
|
|
||||||
var (
|
var (
|
||||||
ServerHost string
|
ServerHost string
|
||||||
|
renderQueue = make(chan data.Frame)
|
||||||
)
|
)
|
||||||
|
|
||||||
func register(con net.Conn, id int) error {
|
func register(con net.Conn, id int) error {
|
||||||
w, h := data.TestNC()
|
w, h := 0, 0 //data.TestNC()
|
||||||
enc := gob.NewEncoder(con) // Encoder
|
enc := gob.NewEncoder(con) // Encoder
|
||||||
err := enc.Encode(handshake{ID: id, H: h, W: w})
|
err := enc.Encode(handshake{ID: id, H: h, W: w})
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func render() {
|
||||||
|
var f data.Frame
|
||||||
|
for f = range renderQueue {
|
||||||
|
data.RenderFrame(&f)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func runClient(cmd *cobra.Command, args []string) {
|
func runClient(cmd *cobra.Command, args []string) {
|
||||||
|
data.InitNC()
|
||||||
|
defer data.ExitNC()
|
||||||
fmt.Println("running client ...")
|
fmt.Println("running client ...")
|
||||||
|
|
||||||
if len(args) < 1 {
|
if len(args) < 1 {
|
||||||
|
@ -43,8 +54,21 @@ func runClient(cmd *cobra.Command, args []string) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("connect error:", err)
|
fmt.Println("connect error:", err)
|
||||||
}
|
}
|
||||||
|
defer con.Close()
|
||||||
register(con, id)
|
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() {
|
func init() {
|
||||||
|
|
|
@ -8,6 +8,8 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
|
||||||
|
"code.bitsetter.de/fun/gosl/data"
|
||||||
)
|
)
|
||||||
|
|
||||||
var cmdServer = &cobra.Command{
|
var cmdServer = &cobra.Command{
|
||||||
|
@ -51,11 +53,23 @@ func handleConn(conn *net.TCPConn) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func serveClients() {
|
func serveClients() {
|
||||||
|
var oFrame = data.Frame{
|
||||||
|
1, 10,
|
||||||
|
[][]rune{
|
||||||
|
[]rune("hallo"),
|
||||||
|
[]rune("das"),
|
||||||
|
[]rune("ist"),
|
||||||
|
[]rune("einTest"),
|
||||||
|
},
|
||||||
|
}
|
||||||
for { // while true
|
for { // while true
|
||||||
for _, k := range clientKeys {
|
for _, k := range clientKeys {
|
||||||
id, client := k, clients[k]
|
id, client := k, clients[k]
|
||||||
if id > 0 {
|
if id > 0 {
|
||||||
|
enc := gob.NewEncoder(client.con)
|
||||||
|
enc.Encode(oFrame)
|
||||||
log.Println("ID:", id, "Client:", client)
|
log.Println("ID:", id, "Client:", client)
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
time.Sleep(time.Second)
|
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"
|
nc "github.com/rthornton128/goncurses"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Screen struct {
|
var (
|
||||||
w, h int
|
win *nc.Window
|
||||||
data []rune
|
)
|
||||||
|
|
||||||
|
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) {
|
func TestNC() (int, int) {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user