Start a permissioned web socket server to allow decentralized application communication
(endpoint string)
| 3426 | |
| 3427 | // Start a permissioned web socket server to allow decentralized application communication |
| 3428 | func toggleXSWD(endpoint string) { |
| 3429 | if engram.Disk == nil { |
| 3430 | return |
| 3431 | } |
| 3432 | |
| 3433 | if cyberdeck.WS.server != nil { |
| 3434 | cyberdeck.WS.server.Stop() |
| 3435 | cyberdeck.WS.server = nil |
| 3436 | cyberdeck.WS.status.Text = "Blocked" |
| 3437 | cyberdeck.WS.status.Color = colors.Gray |
| 3438 | cyberdeck.WS.status.Refresh() |
| 3439 | cyberdeck.WS.toggle.Text = "Turn On" |
| 3440 | cyberdeck.WS.toggle.Refresh() |
| 3441 | status.Cyberdeck.FillColor = colors.Gray |
| 3442 | status.Cyberdeck.StrokeColor = colors.Gray |
| 3443 | status.Cyberdeck.Refresh() |
| 3444 | cyberdeck.WS.advanced = false |
| 3445 | cyberdeck.WS.global.enabled = false |
| 3446 | cyberdeck.WS.global.connect = false |
| 3447 | cyberdeck.WS.apps = []xswd.ApplicationData{} |
| 3448 | if cyberdeck.WS.list != nil { |
| 3449 | cyberdeck.WS.list.Refresh() |
| 3450 | } |
| 3451 | logger.Printf("[Engram] XSWD server closed\n") |
| 3452 | } else { |
| 3453 | _, portNum, err := net.SplitHostPort(endpoint) |
| 3454 | if err != nil { |
| 3455 | logger.Errorf("[Engram] Invalid XSWD server endpoint: %s\n", err) |
| 3456 | return |
| 3457 | } |
| 3458 | |
| 3459 | portInt, err := strconv.Atoi(portNum) |
| 3460 | if err != nil { |
| 3461 | logger.Errorf("[Engram] Invalid XSWD server port: %s\n", err) |
| 3462 | return |
| 3463 | } |
| 3464 | |
| 3465 | logger.Printf("[Engram] Starting XSWD server %s\n", endpoint) |
| 3466 | |
| 3467 | noStoreMethods := engramNoStoreMethods() |
| 3468 | |
| 3469 | cyberdeck.WS.server = xswd.NewXSWDServerWithPort(portInt, engram.Disk, false, noStoreMethods, func(ad *xswd.ApplicationData) bool { |
| 3470 | return XSWDPrompt(ad) |
| 3471 | }, func(ad *xswd.ApplicationData, r *jrpc2.Request) xswd.Permission { |
| 3472 | return AskPermissionForRequest(ad, r) |
| 3473 | }) |
| 3474 | |
| 3475 | cyberdeck.WS.toggle.Disable() |
| 3476 | cyberdeck.WS.toggle.Text = "Initializing" |
| 3477 | cyberdeck.WS.toggle.Refresh() |
| 3478 | time.Sleep(time.Second) |
| 3479 | if !cyberdeck.WS.server.IsRunning() { |
| 3480 | cyberdeck.WS.server = nil |
| 3481 | logger.Errorf("[Engram] Error starting XSWD server\n") |
| 3482 | cyberdeck.WS.toggle.Text = "Error starting web sockets" |
| 3483 | cyberdeck.WS.toggle.Refresh() |
| 3484 | go func() { |
| 3485 | time.Sleep(time.Second * 2) |
no test coverage detected