Refactor debug and test folders
This commit is contained in:
parent
d32fffb5e9
commit
efe414873d
117
debug/debuger.go
117
debug/debuger.go
@ -1,117 +0,0 @@
|
|||||||
// Copyright 2017 Zack Guo <zack.y.guo@gmail.com>. All rights reserved.
|
|
||||||
// Use of this source code is governed by a MIT license that can
|
|
||||||
// be found in the LICENSE file.
|
|
||||||
|
|
||||||
package debug
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"net/http"
|
|
||||||
|
|
||||||
"golang.org/x/net/websocket"
|
|
||||||
)
|
|
||||||
|
|
||||||
type Server struct {
|
|
||||||
Port string
|
|
||||||
Addr string
|
|
||||||
Path string
|
|
||||||
Msg chan string
|
|
||||||
chs []chan string
|
|
||||||
}
|
|
||||||
|
|
||||||
type Client struct {
|
|
||||||
Port string
|
|
||||||
Addr string
|
|
||||||
Path string
|
|
||||||
ws *websocket.Conn
|
|
||||||
}
|
|
||||||
|
|
||||||
var defaultPort = ":8080"
|
|
||||||
|
|
||||||
func NewServer() *Server {
|
|
||||||
return &Server{
|
|
||||||
Port: defaultPort,
|
|
||||||
Addr: "localhost",
|
|
||||||
Path: "/echo",
|
|
||||||
Msg: make(chan string),
|
|
||||||
chs: make([]chan string, 0),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewClient() Client {
|
|
||||||
return Client{
|
|
||||||
Port: defaultPort,
|
|
||||||
Addr: "localhost",
|
|
||||||
Path: "/echo",
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c Client) ConnectAndListen() error {
|
|
||||||
ws, err := websocket.Dial("ws://"+c.Addr+c.Port+c.Path, "", "http://"+c.Addr)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
defer ws.Close()
|
|
||||||
|
|
||||||
var m string
|
|
||||||
for {
|
|
||||||
err := websocket.Message.Receive(ws, &m)
|
|
||||||
if err != nil {
|
|
||||||
fmt.Print(err)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
fmt.Print(m)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *Server) ListenAndServe() error {
|
|
||||||
http.Handle(s.Path, websocket.Handler(func(ws *websocket.Conn) {
|
|
||||||
defer ws.Close()
|
|
||||||
|
|
||||||
mc := make(chan string, 10)
|
|
||||||
s.chs = append(s.chs, mc)
|
|
||||||
|
|
||||||
for m := range mc {
|
|
||||||
websocket.Message.Send(ws, m)
|
|
||||||
}
|
|
||||||
}))
|
|
||||||
|
|
||||||
go func() {
|
|
||||||
for msg := range s.Msg {
|
|
||||||
for _, c := range s.chs {
|
|
||||||
func(a chan string) {
|
|
||||||
a <- msg
|
|
||||||
}(c)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
|
|
||||||
return http.ListenAndServe(s.Port, nil)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *Server) Log(msg string) {
|
|
||||||
go func() { s.Msg <- msg }()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *Server) Logf(format string, a ...interface{}) {
|
|
||||||
s.Log(fmt.Sprintf(format, a...))
|
|
||||||
}
|
|
||||||
|
|
||||||
var DefaultServer = NewServer()
|
|
||||||
var DefaultClient = NewClient()
|
|
||||||
|
|
||||||
func ListenAndServe() error {
|
|
||||||
return DefaultServer.ListenAndServe()
|
|
||||||
}
|
|
||||||
|
|
||||||
func ConnectAndListen() error {
|
|
||||||
return DefaultClient.ConnectAndListen()
|
|
||||||
}
|
|
||||||
|
|
||||||
func Log(msg string) {
|
|
||||||
DefaultServer.Log(msg)
|
|
||||||
}
|
|
||||||
|
|
||||||
func Logf(format string, a ...interface{}) {
|
|
||||||
DefaultServer.Logf(format, a...)
|
|
||||||
}
|
|
30
test/log_events.go
Normal file
30
test/log_events.go
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
// Copyright 2017 Zack Guo <zack.y.guo@gmail.com>. All rights reserved.
|
||||||
|
// Use of this source code is governed by a MIT license that can
|
||||||
|
// be found in the LICENSE file.
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
ui "github.com/gizak/termui"
|
||||||
|
)
|
||||||
|
|
||||||
|
// logs all events to the termui window
|
||||||
|
// stdout can also be redirected to a file and read with `tail -f`
|
||||||
|
func main() {
|
||||||
|
err := ui.Init()
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
defer ui.Close()
|
||||||
|
|
||||||
|
for {
|
||||||
|
e := <-ui.PollEvent()
|
||||||
|
fmt.Printf("%v", e)
|
||||||
|
switch e.ID {
|
||||||
|
case "q", "<C-c>":
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,66 +0,0 @@
|
|||||||
// Copyright 2017 Zack Guo <zack.y.guo@gmail.com>. All rights reserved.
|
|
||||||
// Use of this source code is governed by a MIT license that can
|
|
||||||
// be found in the LICENSE file.
|
|
||||||
|
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"os"
|
|
||||||
|
|
||||||
"github.com/gizak/termui"
|
|
||||||
"github.com/gizak/termui/debug"
|
|
||||||
)
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
// run as client
|
|
||||||
if len(os.Args) > 1 {
|
|
||||||
fmt.Print(debug.ConnectAndListen())
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// run as server
|
|
||||||
go func() { panic(debug.ListenAndServe()) }()
|
|
||||||
|
|
||||||
if err := termui.Init(); err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
defer termui.Close()
|
|
||||||
|
|
||||||
//termui.UseTheme("helloworld")
|
|
||||||
b := termui.NewBlock()
|
|
||||||
b.Width = 20
|
|
||||||
b.Height = 20
|
|
||||||
b.Float = termui.AlignCenter
|
|
||||||
b.BorderLabel = "[HELLO](fg-red,bg-white) [WORLD](fg-blue,bg-green)"
|
|
||||||
|
|
||||||
termui.Render(b)
|
|
||||||
|
|
||||||
termui.Handle("/sys", func(e termui.Event) {
|
|
||||||
k, ok := e.Data.(termui.EvtKbd)
|
|
||||||
debug.Logf("->%v\n", e)
|
|
||||||
if ok && k.KeyStr == "q" {
|
|
||||||
termui.StopLoop()
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
termui.Handle(("/usr"), func(e termui.Event) {
|
|
||||||
debug.Logf("->%v\n", e)
|
|
||||||
})
|
|
||||||
|
|
||||||
termui.Handle("/timer/1s", func(e termui.Event) {
|
|
||||||
t := e.Data.(termui.EvtTimer)
|
|
||||||
termui.SendCustomEvt("/usr/t", t.Count)
|
|
||||||
|
|
||||||
if t.Count%2 == 0 {
|
|
||||||
b.BorderLabel = "[HELLO](fg-red,bg-green) [WORLD](fg-blue,bg-white)"
|
|
||||||
} else {
|
|
||||||
b.BorderLabel = "[HELLO](fg-blue,bg-white) [WORLD](fg-red,bg-green)"
|
|
||||||
}
|
|
||||||
|
|
||||||
termui.Render(b)
|
|
||||||
|
|
||||||
})
|
|
||||||
|
|
||||||
termui.Loop()
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user