summaryrefslogtreecommitdiff
path: root/app/ted/ws.hoon
blob: ac8a672018d8c67cd12741783796564cef4bd220 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
/-  spider, nsur=nostr
/+  strandio
=,  strand=strand:spider
^-  thread:spider
|=  arg=vase
=/  m  (strand ,vase)
|^
^-  form:m
:: =/  [url=@t req=client-msg:nsur]  (need !<((unit [@t client-msg:nsur]) arg))
=/  ujon  !<((unit json) arg)
:: ~&  ujon=ujon
?~  ujon  (pure:m !>(bail))
:: =/  req  (ui:de:jsonlib u.ujon)
=/  jstring  (en:json:html u.ujon)
~&  >>  jstring=jstring
:: ;<  =bowl:spider  bind:m  get-bowl:strandio
:: =/  desk  q.byk.bowl
:: =/  =task:iris  [%websocket-connect desk url]
:: =/  =card:agent:gall  [%pass /ws-req/nostrill %arvo %i task]
:: ;<  ~  bind:m  (send-raw-card:strandio card)
:: ;<  res=(pair wire sign-arvo)  bind:m  take-sign-arvo:strandio
:: ~&  >  res=res
:: :: confirm connection was established
:: ?.  ?=([%iris %websocket-response id=@ud websocket-event:eyre] q.res)
::       (strand-fail:strand %bad-sign ~)
:: ~&  >  ted-ws-res=+>+<.q.res
:: ?.  ?=(%accept +>+<.q.res)
::   (pure:m !>([%ng '']))
::       :: (strand-fail:strand %bad-sign ~)

:: ~&  "ws connection accepted, sending ws msg"
:: ~&  >>>  "sleeping"
:: ;<  ~  bind:m  (sleep:strandio ~s3)
:: ~&  >>>  "slept"
:: =/  card2=card:agent:gall
::   [%pass /ws/proxy %agent [our.bowl desk] %poke %websocket-thread !>([id.q.res wmsg])]
:: ;<  ~  bind:m  (send-raw-card:strandio card2)
:: ;<  res2=(pair wire sign-arvo)  bind:m  take-sign-arvo:strandio


:: :: =/  subwire=path  /websocket-server/(scot %ud id.q.res)
:: :: =/  =cage  [%websocket-response !>(+>.q.res)]
:: :: =/  gf=gift:agent:gall  [%fact :~(subwire) cage]
:: :: =/  =card:agent:gall  [%give gf]
:: :: ~&  >>  ws-ted-ok-sending-msg=id.q.res
:: :: ;<  ~  bind:m  (send-raw-card:strandio card)
:: :: ;<  res2=(pair wire sign-arvo)  bind:m  take-sign-arvo:strandio
:: :: ?.  ?=([%iris %websocket-response id=@ud %message wm=websocket-message:eyre] q.res2)
:: ::       (strand-fail:strand %bad-sign ~)
:: :: =/  wm=websocket-message:eyre  +>+>.q.res2
  :: (pure:m !>([%ok id.q.res]))
  ++  bail  ^-  json
  %+  frond:enjs:format  %error
  s+'error'
--