summaryrefslogtreecommitdiff
path: root/desk/lib/chat.hoon
blob: 9390c3547d5bbe9953ee54226ea10b5ddbff9e5d (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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
/-  chat
|%
+$  eyre-id  @ta
+$  card  card:agent:gall
::  cards
++  watch-chat
  |=  [our=ship =term]
  ^-  card
  :*  %pass
      /listen/[term]
      %agent
      [our %chat]
      %watch
      /chat/(scot %p our)/[term]/ui/writs
  ==
++  leave-chat
  |=  [our=ship =term]
  ^-  card
  [%pass /listen/[term] %agent [our %chat] %leave ~]
++  handle-msg
  |=  [=wire =sign:agent:gall]
  ^-  (quip card _this)
  ?.  ?=(%fact -.sign)  `this
  =*  mark  p.cage.sign
  =*  vase  q.cage.sign
  ?.  ?=(%writ-diff p.cage.sign)  `this
    =^  cards  state
      (handle-chat-update:do source !<(diff:writs:chat vase))
    [cards this]
  ==
==
++  handle-chat-update
|=  =diff:writs:chat  ^-  (list card)
:: TODO other stuff
?.  ?=(%add -.q.diff)  `this
(send-to-viewers p.q.diff)
++  send-to-viewers
|=  =memo:chat
=/  ids=(set eyre-id)  (sy ~['lol'])
:_  ~
:*  %give
    %fact
  ::
    %+  turn  ~(tap in ids)
    |=  =eyre-id
    /http-response/[eyre-id]
  ::
    %http-response-data
    !>  ^-  (unit octs)
    %-  some
    (make-stream-data (scot %uw (jam memo)))
==
+$  channel-event
  $%  $>(%poke-ack sign:agent:gall)
      $>(%watch-ack sign:agent:gall)
      $>(%kick sign:agent:gall)
      [%fact =desk =mark =noun]
  ==
++  channel-event-to-tape
|=  [request-id=@ud =channel-event]
=+  [request-id channel-event]
(scow %uw (jam -))
++  make-stream-data
  |=  =cord
  ^-  octs
  %-  as-octs:mimes:html
  (rap 3 'data:' cord '\0a\0a' ~)

::  user management

:: ++  ban-comet
::   |=  who=ship
::   ^-  (quip card _state)
::   :-  ~
::   %_  state
::     guests  (~(del by guests) who)
::     banned  (~(uni in banned) (~(get ju guests) who))
::   ==
:: ::
:: ++  unban-ip
::   |=  =address:eyre
::   ^-  (quip card _state)
::   :-  ~
::   %_  state
::     banned  (~(del in banned) address.action)
::   ==

--