mirror of
https://github.com/wisplite/tether.git
synced 2026-05-01 06:22:41 -05:00
basic websocket handling and testing
This commit is contained in:
@@ -2,6 +2,7 @@ package tether
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"log/slog"
|
"log/slog"
|
||||||
|
"net/http"
|
||||||
|
|
||||||
"github.com/wisplite/tether/reactivity"
|
"github.com/wisplite/tether/reactivity"
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
@@ -28,3 +29,12 @@ func (e *Engine) RegisterQuery(name string, query func(ctx *QueryCtx) error) {
|
|||||||
e.queries[name] = query
|
e.queries[name] = query
|
||||||
slog.Debug("Registered query", "name", name)
|
slog.Debug("Registered query", "name", name)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (e *Engine) CreateTable(name string, schema interface{}) {
|
||||||
|
e.db.AutoMigrate(schema)
|
||||||
|
slog.Debug("Created table", "name", name)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *Engine) Handle(w http.ResponseWriter, r *http.Request) {
|
||||||
|
reactivity.Handle(w, r)
|
||||||
|
}
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
function test() {
|
||||||
|
const ws = new WebSocket("ws://localhost:8080/tether");
|
||||||
|
ws.onmessage = (event) => {
|
||||||
|
console.log(event.data);
|
||||||
|
};
|
||||||
|
ws.onopen = () => {
|
||||||
|
console.log("Connected to server");
|
||||||
|
ws.send(JSON.stringify({
|
||||||
|
type: "subscribe",
|
||||||
|
channel: "messages",
|
||||||
|
}));
|
||||||
|
};
|
||||||
|
ws.onclose = () => {
|
||||||
|
console.log("Disconnected from server");
|
||||||
|
};
|
||||||
|
}
|
||||||
|
test();
|
||||||
@@ -1,11 +1,28 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"net/http"
|
||||||
|
|
||||||
"github.com/glebarez/sqlite"
|
"github.com/glebarez/sqlite"
|
||||||
"github.com/wisplite/tether"
|
"github.com/wisplite/tether"
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type User struct {
|
||||||
|
ID string `gorm:"primaryKey"`
|
||||||
|
Name string
|
||||||
|
}
|
||||||
|
|
||||||
|
type Messages struct {
|
||||||
|
ID string `gorm:"primaryKey"`
|
||||||
|
Message string
|
||||||
|
SenderID string
|
||||||
|
ReceiverID string
|
||||||
|
CreatedAt time.Time
|
||||||
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
|
db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -14,6 +31,9 @@ func main() {
|
|||||||
|
|
||||||
engine := tether.NewEngine(db)
|
engine := tether.NewEngine(db)
|
||||||
|
|
||||||
|
engine.CreateTable("users", &User{})
|
||||||
|
engine.CreateTable("messages", &Messages{})
|
||||||
|
|
||||||
engine.RegisterMutation("createUser", func(ctx *tether.MutationCtx) error {
|
engine.RegisterMutation("createUser", func(ctx *tether.MutationCtx) error {
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
@@ -21,4 +41,7 @@ func main() {
|
|||||||
engine.RegisterQuery("getUser", func(ctx *tether.QueryCtx) error {
|
engine.RegisterQuery("getUser", func(ctx *tether.QueryCtx) error {
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
|
|
||||||
|
http.HandleFunc("/tether", engine.Handle)
|
||||||
|
http.ListenAndServe(":8080", nil)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1 +1,28 @@
|
|||||||
package reactivity
|
package reactivity
|
||||||
|
|
||||||
|
import (
|
||||||
|
"log/slog"
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/gorilla/websocket"
|
||||||
|
)
|
||||||
|
|
||||||
|
var upgrader = websocket.Upgrader{}
|
||||||
|
|
||||||
|
func Handle(w http.ResponseWriter, r *http.Request) {
|
||||||
|
ws, err := upgrader.Upgrade(w, r, nil)
|
||||||
|
if err != nil {
|
||||||
|
slog.Error("Failed to upgrade to websocket", "error", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer ws.Close()
|
||||||
|
|
||||||
|
for {
|
||||||
|
_, message, err := ws.ReadMessage()
|
||||||
|
if err != nil {
|
||||||
|
slog.Error("Failed to read message", "error", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
slog.Debug("Received message", "message", string(message))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user