diff --git a/indexedDb/channels/handlers.go b/indexedDb/channels/handlers.go index 9a1ee66351b4c08c2af02fb685bbd6b3e22dbbda..ca9a4f4873427d32d9f7c3c52844cd79a305d3d1 100644 --- a/indexedDb/channels/handlers.go +++ b/indexedDb/channels/handlers.go @@ -27,6 +27,8 @@ import ( "time" ) +var zeroUUID = []byte{0, 0, 0, 0, 0, 0, 0, 0} + // manager handles the event model and the message handler, which is used to // send information between the event model and the main thread. type manager struct { @@ -49,13 +51,13 @@ func (m *manager) RegisterHandlers() { m.mh.RegisterHandler(worker.DeleteMessageTag, m.deleteMessageHandler) } -// newWASMEventModelHandler is the handler for NewWASMEventModel. Returns nil on -// success or an error message on failure. +// newWASMEventModelHandler is the handler for NewWASMEventModel. Returns an +// empty slice on success or an error message on failure. func (m *manager) newWASMEventModelHandler(data []byte) ([]byte, error) { var msg mChannels.NewWASMEventModelMessage err := json.Unmarshal(data, &msg) if err != nil { - return nil, errors.Errorf( + return []byte{}, errors.Errorf( "failed to JSON unmarshal %T from main thread: %+v", msg, err) } @@ -64,7 +66,7 @@ func (m *manager) newWASMEventModelHandler(data []byte) ([]byte, error) { encryption, err := cryptoChannel.NewCipherFromJSON( []byte(msg.EncryptionJSON), rng.GetStream()) if err != nil { - return nil, errors.Errorf( + return []byte{}, errors.Errorf( "failed to JSON unmarshal Cipher from main thread: %+v", err) } @@ -73,7 +75,7 @@ func (m *manager) newWASMEventModelHandler(data []byte) ([]byte, error) { if err != nil { return []byte(err.Error()), nil } - return nil, nil + return []byte{}, nil } // messageReceivedCallback sends calls to the MessageReceivedCallback in the @@ -178,13 +180,13 @@ func (m *manager) leaveChannelHandler(data []byte) ([]byte, error) { return nil, nil } -// receiveMessageHandler is the handler for wasmModel.ReceiveMessage. Returns -// nil on error or the JSON marshalled UUID (uint64) on success. +// receiveMessageHandler is the handler for wasmModel.ReceiveMessage. Returns a +// UUID of 0 on error or the JSON marshalled UUID (uint64) on success. func (m *manager) receiveMessageHandler(data []byte) ([]byte, error) { var msg channels.ModelMessage err := json.Unmarshal(data, &msg) if err != nil { - return nil, errors.Errorf( + return zeroUUID, errors.Errorf( "failed to JSON unmarshal %T from main thread: %+v", msg, err) } @@ -195,18 +197,18 @@ func (m *manager) receiveMessageHandler(data []byte) ([]byte, error) { uuidData, err := json.Marshal(uuid) if err != nil { - return nil, errors.Errorf("failed to JSON marshal UUID : %+v", err) + return zeroUUID, errors.Errorf("failed to JSON marshal UUID : %+v", err) } return uuidData, nil } -// receiveReplyHandler is the handler for wasmModel.ReceiveReply. Returns -// nil on error or the JSON marshalled UUID (uint64) on success. +// receiveReplyHandler is the handler for wasmModel.ReceiveReply. Returns a UUID +// of 0 on error or the JSON marshalled UUID (uint64) on success. func (m *manager) receiveReplyHandler(data []byte) ([]byte, error) { var msg mChannels.ReceiveReplyMessage err := json.Unmarshal(data, &msg) if err != nil { - return nil, errors.Errorf( + return zeroUUID, errors.Errorf( "failed to JSON unmarshal %T from main thread: %+v", msg, err) } @@ -217,18 +219,18 @@ func (m *manager) receiveReplyHandler(data []byte) ([]byte, error) { uuidData, err := json.Marshal(uuid) if err != nil { - return nil, errors.Errorf("failed to JSON marshal UUID : %+v", err) + return zeroUUID, errors.Errorf("failed to JSON marshal UUID : %+v", err) } return uuidData, nil } // receiveReactionHandler is the handler for wasmModel.ReceiveReaction. Returns -// nil on error or the JSON marshalled UUID (uint64) on success. +// a UUID of 0 on error or the JSON marshalled UUID (uint64) on success. func (m *manager) receiveReactionHandler(data []byte) ([]byte, error) { var msg mChannels.ReceiveReplyMessage err := json.Unmarshal(data, &msg) if err != nil { - return nil, errors.Errorf( + return zeroUUID, errors.Errorf( "failed to JSON unmarshal %T from main thread: %+v", msg, err) } @@ -239,7 +241,7 @@ func (m *manager) receiveReactionHandler(data []byte) ([]byte, error) { uuidData, err := json.Marshal(uuid) if err != nil { - return nil, errors.Errorf("failed to JSON marshal UUID : %+v", err) + return zeroUUID, errors.Errorf("failed to JSON marshal UUID : %+v", err) } return uuidData, nil } diff --git a/indexedDb/channels/init.go b/indexedDb/channels/init.go index 801d861313655aabefe66e6349e6708d15f48359..da730d7a206bc266e86cad7ccd67aa4d4b4d72ae 100644 --- a/indexedDb/channels/init.go +++ b/indexedDb/channels/init.go @@ -61,8 +61,7 @@ func newWASMModel(databaseName string, encryption cryptoChannel.Cipher, openRequest, err := idb.Global().Open(ctx, databaseName, currentVersion, func(db *idb.Database, oldVersion, newVersion uint) error { if oldVersion == newVersion { - jww.INFO.Printf("IndexDb version is current: v%d", - newVersion) + jww.INFO.Printf("IndexDb version is current: v%d", newVersion) return nil } @@ -208,7 +207,7 @@ func RegisterDatabaseNameStore(m *manager) { return errors.New(string(response)) } case <-time.After(indexedDbWorker.ResponseTimeout): - return errors.Errorf("timed out after %s waiting for "+ + return errors.Errorf("[WW] Timed out after %s waiting for "+ "response about storing the database name in local "+ "storage in the main thread", indexedDbWorker.ResponseTimeout) } diff --git a/indexedDb/channels/main.go b/indexedDb/channels/main.go index 2f19a6488a183cb2e537873e433ee683aa7e1109..5a950b922f0791f6b316aee42547566e12434b22 100644 --- a/indexedDb/channels/main.go +++ b/indexedDb/channels/main.go @@ -11,15 +11,19 @@ package main import ( "fmt" + jww "github.com/spf13/jwalterweatherman" "gitlab.com/elixxir/xxdk-wasm/indexedDb" ) func main() { - fmt.Println("Starting xxDK WebAssembly Channels Database Worker.") + fmt.Println("[WW] Starting xxDK WebAssembly Channels Database Worker.") + jww.SetStdoutThreshold(jww.LevelDebug) + jww.INFO.Print("[WW] Starting xxDK WebAssembly Channels Database Worker.") m := &manager{mh: indexedDb.NewMessageHandler("ChannelsIndexedDbWorker")} RegisterDatabaseNameStore(m) m.RegisterHandlers() m.mh.SignalReady() <-make(chan bool) + fmt.Println("[WW] Closing xxDK WebAssembly Channels Database Worker.") } diff --git a/indexedDb/dm/handlers.go b/indexedDb/dm/handlers.go index 95ed73edbc896b166e546a5c615df65ba54c32a3..a49783c67ff1af6c97cda3f0119cb0720497f0bc 100644 --- a/indexedDb/dm/handlers.go +++ b/indexedDb/dm/handlers.go @@ -25,6 +25,8 @@ import ( "time" ) +var zeroUUID = []byte{0, 0, 0, 0, 0, 0, 0, 0} + // manager handles the event model and the message handler, which is used to // send information between the event model and the main thread. type manager struct { @@ -43,13 +45,13 @@ func (m *manager) RegisterHandlers() { m.mh.RegisterHandler(worker.UpdateSentStatusTag, m.updateSentStatusHandler) } -// newWASMEventModelHandler is the handler for NewWASMEventModel. Returns nil on -// success or an error message on failure. +// newWASMEventModelHandler is the handler for NewWASMEventModel. Returns an +// empty slice on success or an error message on failure. func (m *manager) newWASMEventModelHandler(data []byte) ([]byte, error) { var msg mChannels.NewWASMEventModelMessage err := json.Unmarshal(data, &msg) if err != nil { - return nil, errors.Errorf( + return []byte{}, errors.Errorf( "failed to JSON unmarshal %T from main thread: %+v", msg, err) } @@ -58,8 +60,8 @@ func (m *manager) newWASMEventModelHandler(data []byte) ([]byte, error) { encryption, err := cryptoChannel.NewCipherFromJSON( []byte(msg.EncryptionJSON), rng.GetStream()) if err != nil { - return nil, errors.Errorf("failed to JSON unmarshal channel cipher "+ - "from main thread: %+v", err) + return []byte{}, errors.Errorf("failed to JSON unmarshal channel "+ + "cipher from main thread: %+v", err) } m.model, err = NewWASMEventModel(msg.Path, encryption, @@ -67,7 +69,7 @@ func (m *manager) newWASMEventModelHandler(data []byte) ([]byte, error) { if err != nil { return []byte(err.Error()), nil } - return nil, nil + return []byte{}, nil } // messageReceivedCallback sends calls to the MessageReceivedCallback in the @@ -145,13 +147,13 @@ func (m *manager) storeEncryptionStatus( return response.EncryptionStatus, nil } -// receiveHandler is the handler for wasmModel.Receive. Returns nil on error or -// the JSON marshalled UUID (uint64) on success. +// receiveHandler is the handler for wasmModel.Receive. Returns a UUID of 0 on +// error or the JSON marshalled UUID (uint64) on success. func (m *manager) receiveHandler(data []byte) ([]byte, error) { var msg mDm.TransferMessage err := json.Unmarshal(data, &msg) if err != nil { - return nil, errors.Errorf( + return zeroUUID, errors.Errorf( "failed to JSON unmarshal %T from main thread: %+v", msg, err) } @@ -161,18 +163,18 @@ func (m *manager) receiveHandler(data []byte) ([]byte, error) { uuidData, err := json.Marshal(uuid) if err != nil { - return nil, errors.Errorf("failed to JSON marshal UUID : %+v", err) + return zeroUUID, errors.Errorf("failed to JSON marshal UUID : %+v", err) } return uuidData, nil } -// receiveTextHandler is the handler for wasmModel.ReceiveText. Returns nil on -// error or the JSON marshalled UUID (uint64) on success. +// receiveTextHandler is the handler for wasmModel.ReceiveText. Returns a UUID +// of 0 on error or the JSON marshalled UUID (uint64) on success. func (m *manager) receiveTextHandler(data []byte) ([]byte, error) { var msg mDm.TransferMessage err := json.Unmarshal(data, &msg) if err != nil { - return nil, errors.Errorf( + return []byte{}, errors.Errorf( "failed to JSON unmarshal %T from main thread: %+v", msg, err) } @@ -182,19 +184,19 @@ func (m *manager) receiveTextHandler(data []byte) ([]byte, error) { uuidData, err := json.Marshal(uuid) if err != nil { - return nil, errors.Errorf("failed to JSON marshal UUID : %+v", err) + return []byte{}, errors.Errorf("failed to JSON marshal UUID : %+v", err) } return uuidData, nil } -// receiveReplyHandler is the handler for wasmModel.ReceiveReply. Returns nil on -// error or the JSON marshalled UUID (uint64) on success. +// receiveReplyHandler is the handler for wasmModel.ReceiveReply. Returns a UUID +// of 0 on error or the JSON marshalled UUID (uint64) on success. func (m *manager) receiveReplyHandler(data []byte) ([]byte, error) { var msg mDm.TransferMessage err := json.Unmarshal(data, &msg) if err != nil { - return nil, errors.Errorf( + return zeroUUID, errors.Errorf( "failed to JSON unmarshal %T from main thread: %+v", msg, err) } @@ -204,19 +206,19 @@ func (m *manager) receiveReplyHandler(data []byte) ([]byte, error) { uuidData, err := json.Marshal(uuid) if err != nil { - return nil, errors.Errorf("failed to JSON marshal UUID : %+v", err) + return zeroUUID, errors.Errorf("failed to JSON marshal UUID : %+v", err) } return uuidData, nil } // receiveReactionHandler is the handler for wasmModel.ReceiveReaction. Returns -// nil on error or the JSON marshalled UUID (uint64) on success. +// a UUID of 0 on error or the JSON marshalled UUID (uint64) on success. func (m *manager) receiveReactionHandler(data []byte) ([]byte, error) { var msg mDm.TransferMessage err := json.Unmarshal(data, &msg) if err != nil { - return nil, errors.Errorf( + return zeroUUID, errors.Errorf( "failed to JSON unmarshal %T from main thread: %+v", msg, err) } @@ -226,7 +228,7 @@ func (m *manager) receiveReactionHandler(data []byte) ([]byte, error) { uuidData, err := json.Marshal(uuid) if err != nil { - return nil, errors.Errorf("failed to JSON marshal UUID : %+v", err) + return zeroUUID, errors.Errorf("failed to JSON marshal UUID : %+v", err) } return uuidData, nil diff --git a/indexedDb/dm/main.go b/indexedDb/dm/main.go index 71494d8f38ac8fa4fa332cff2ca6921fd01a2238..138504f4ceea0ce678fd59ab5f4fc53b320f2c1d 100644 --- a/indexedDb/dm/main.go +++ b/indexedDb/dm/main.go @@ -11,15 +11,19 @@ package main import ( "fmt" + jww "github.com/spf13/jwalterweatherman" "gitlab.com/elixxir/xxdk-wasm/indexedDb" ) func main() { - fmt.Println("Starting xxDK WebAssembly DM Database Worker.") + fmt.Println("[WW] Starting xxDK WebAssembly DM Database Worker.") + jww.SetStdoutThreshold(jww.LevelDebug) + jww.INFO.Print("[WW] Starting xxDK WebAssembly DM Database Worker.") m := &manager{mh: indexedDb.NewMessageHandler("DmIndexedDbWorker")} m.RegisterHandlers() RegisterDatabaseNameStore(m) m.mh.SignalReady() <-make(chan bool) + fmt.Println("[WW] Closing xxDK WebAssembly Channels Database Worker.") } diff --git a/indexedDb/messageHandler.go b/indexedDb/messageHandler.go index 1e20061673119cca38a40f4a8e0e399dc4976fc6..aae293acb4ef1c163a8e23f78d52daa07c33e93f 100644 --- a/indexedDb/messageHandler.go +++ b/indexedDb/messageHandler.go @@ -13,7 +13,7 @@ import ( "encoding/json" "github.com/pkg/errors" jww "github.com/spf13/jwalterweatherman" - "gitlab.com/elixxir/xxdk-wasm/indexedDbWorker" + worker "gitlab.com/elixxir/xxdk-wasm/indexedDbWorker" "gitlab.com/elixxir/xxdk-wasm/utils" "sync" "syscall/js" @@ -30,7 +30,7 @@ type MessageHandler struct { // handlers is a list of functions to handle messages that come from the // main thread keyed on the handler tag. - handlers map[indexedDbWorker.Tag]HandlerFn + handlers map[worker.Tag]HandlerFn // name describes the worker. It is used for debugging and logging purposes. name string @@ -42,7 +42,7 @@ type MessageHandler struct { func NewMessageHandler(name string) *MessageHandler { mh := &MessageHandler{ messages: make(chan js.Value, 100), - handlers: make(map[indexedDbWorker.Tag]HandlerFn), + handlers: make(map[worker.Tag]HandlerFn), name: name, } @@ -55,13 +55,13 @@ func NewMessageHandler(name string) *MessageHandler { // ready. Once the main thread receives this, it will initiate communication. // Therefore, this should only be run once all listeners are ready. func (mh *MessageHandler) SignalReady() { - mh.SendResponse(indexedDbWorker.ReadyTag, indexedDbWorker.InitID, nil) + mh.SendResponse(worker.ReadyTag, worker.InitID, nil) } // SendResponse sends a reply to the main thread with the given tag and ID, func (mh *MessageHandler) SendResponse( - tag indexedDbWorker.Tag, id uint64, data []byte) { - msg := indexedDbWorker.WorkerMessage{ + tag worker.Tag, id uint64, data []byte) { + msg := worker.WorkerMessage{ Tag: tag, ID: id, Data: data, @@ -82,7 +82,7 @@ func (mh *MessageHandler) SendResponse( // everytime a message from the main thread is received. If the registered // handler returns a response, it is sent to the main thread. func (mh *MessageHandler) receiveMessage(data []byte) error { - var msg indexedDbWorker.WorkerMessage + var msg worker.WorkerMessage err := json.Unmarshal(data, &msg) if err != nil { return err @@ -101,7 +101,7 @@ func (mh *MessageHandler) receiveMessage(data []byte) error { go func() { response, err2 := handler(msg.Data) if err2 != nil { - jww.FATAL.Panicf("[WW] [%s] Handler for for %q and ID %d returned "+ + jww.ERROR.Printf("[WW] [%s] Handler for for %q and ID %d returned "+ "an error: %+v", mh.name, msg.Tag, msg.ID, err) } if response != nil { @@ -116,7 +116,7 @@ func (mh *MessageHandler) receiveMessage(data []byte) error { // previous registered handler with the same tag. This function is thread safe. // // If the handler returns anything but nil, it will be returned as a response. -func (mh *MessageHandler) RegisterHandler(tag indexedDbWorker.Tag, handler HandlerFn) { +func (mh *MessageHandler) RegisterHandler(tag worker.Tag, handler HandlerFn) { jww.DEBUG.Printf( "[WW] [%s] Worker registering handler for tag %q", mh.name, tag) mh.mux.Lock() diff --git a/indexedDbWorker/worker.go b/indexedDbWorker/worker.go index 98bcf656e1e957fa9b898ad081faff30eede9a2b..0937a6ee5cacb49c254928fbf30b2f40680a65ba 100644 --- a/indexedDbWorker/worker.go +++ b/indexedDbWorker/worker.go @@ -99,8 +99,9 @@ func NewWorkerHandler(aURL, name string) (*WorkerHandler, error) { select { case <-ready: case <-time.After(workerInitialConnectionTimeout): - return nil, errors.Errorf("timed out after %s waiting for initial "+ - "message from worker", workerInitialConnectionTimeout) + return nil, errors.Errorf("[WW] [%s] timed out after %s waiting for "+ + "initial message from worker", + wh.name, workerInitialConnectionTimeout) } return wh, nil