mirror of
https://github.com/taigrr/wasm-experiments
synced 2025-01-18 04:03:21 -08:00
Add jsgo.io example
This commit is contained in:
103
vendor/github.com/dave/jsgo/server/wasm/messages/messages.go
generated
vendored
Normal file
103
vendor/github.com/dave/jsgo/server/wasm/messages/messages.go
generated
vendored
Normal file
@@ -0,0 +1,103 @@
|
||||
package messages
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"compress/gzip"
|
||||
"encoding/gob"
|
||||
|
||||
"github.com/dave/jsgo/server/servermsg"
|
||||
"github.com/dave/services"
|
||||
"github.com/dave/services/constor/constormsg"
|
||||
"github.com/gorilla/websocket"
|
||||
)
|
||||
|
||||
type Payload struct {
|
||||
Message services.Message
|
||||
}
|
||||
|
||||
func init() {
|
||||
|
||||
// Commands:
|
||||
gob.Register(DeployQuery{})
|
||||
|
||||
// Data messages:
|
||||
gob.Register(DeployQueryResponse{})
|
||||
gob.Register(DeployFileKey{})
|
||||
gob.Register(DeployFile{})
|
||||
gob.Register(DeployPayload{})
|
||||
gob.Register(DeployDone{})
|
||||
gob.Register(DeployClientVersionNotSupported{})
|
||||
|
||||
// Initialise types in servermsg
|
||||
servermsg.RegisterTypes()
|
||||
|
||||
// Initialise types in constormsg
|
||||
constormsg.RegisterTypes()
|
||||
}
|
||||
|
||||
// Client sends a DeployQuery with all offered files.
|
||||
// Server responds with DeployQueryResponse, with all required files listed.
|
||||
// Client sends a DeployFile for each required file.
|
||||
|
||||
type DeployQuery struct {
|
||||
Version string
|
||||
Files []DeployFileKey
|
||||
}
|
||||
|
||||
type DeployQueryResponse struct {
|
||||
Required []DeployFileKey
|
||||
}
|
||||
|
||||
type DeployPayload struct {
|
||||
Files []DeployFile
|
||||
}
|
||||
|
||||
type DeployClientVersionNotSupported struct{}
|
||||
|
||||
type DeployFileKey struct {
|
||||
Type DeployFileType
|
||||
Hash string // sha1 hash of contents
|
||||
}
|
||||
|
||||
type DeployFile struct {
|
||||
DeployFileKey
|
||||
Contents []byte // in the initial CommandDeploy, this is nil
|
||||
}
|
||||
|
||||
type DeployDone struct{}
|
||||
|
||||
type DeployFileType string
|
||||
|
||||
const (
|
||||
DeployFileTypeIndex DeployFileType = "index"
|
||||
DeployFileTypeLoader = "loader"
|
||||
DeployFileTypeWasm = "wasm"
|
||||
)
|
||||
|
||||
func Marshal(in services.Message) ([]byte, int, error) {
|
||||
p := Payload{in}
|
||||
buf := &bytes.Buffer{}
|
||||
gzw := gzip.NewWriter(buf)
|
||||
if err := gob.NewEncoder(gzw).Encode(p); err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
if err := gzw.Close(); err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
return buf.Bytes(), websocket.BinaryMessage, nil
|
||||
}
|
||||
|
||||
func Unmarshal(in []byte) (services.Message, error) {
|
||||
var p Payload
|
||||
gzr, err := gzip.NewReader(bytes.NewBuffer(in))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err := gob.NewDecoder(gzr).Decode(&p); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err := gzr.Close(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return p.Message, nil
|
||||
}
|
||||
Reference in New Issue
Block a user