Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Pleroma
pleroma
Commits
69f1024b
Commit
69f1024b
authored
Dec 05, 2017
by
lain
Browse files
Add basic channel state.
parent
d01243c1
Changes
2
Hide whitespace changes
Inline
Side-by-side
lib/pleroma/application.ex
View file @
69f1024b
...
...
@@ -20,6 +20,7 @@ def start(_type, _args) do
limit:
2500
]]),
worker
(
Pleroma
.
Web
.
Federator
,
[]),
worker
(
Pleroma
.
Web
.
ChatChannel
.
ChatChannelState
,
[]),
]
++
if
Mix
.
env
==
:test
,
do
:
[],
else
:
[
worker
(
Pleroma
.
Web
.
Streamer
,
[])]
...
...
lib/pleroma/web/chat_channel.ex
View file @
69f1024b
defmodule
Pleroma
.
Web
.
ChatChannel
do
use
Phoenix
.
Channel
alias
Pleroma
.
Web
.
ChatChannel
.
ChatChannelState
def
join
(
"chat:public"
,
_message
,
socket
)
do
send
(
self
(),
:after_join
)
{
:ok
,
socket
}
end
def
handle_info
(
:after_join
,
socket
)
do
push
socket
,
"messages"
,
%{
messages:
ChatChannelState
.
messages
()}
{
:noreply
,
socket
}
end
def
handle_in
(
"new_msg"
,
%{
"text"
=>
text
},
socket
)
do
author
=
socket
.
assigns
[
:user
]
author
=
Pleroma
.
Web
.
MastodonAPI
.
AccountView
.
render
(
"account.json"
,
user:
author
)
broadcast!
socket
,
"new_msg"
,
%{
text:
text
,
author:
author
}
message
=
ChatChannelState
.
add_message
(%{
text:
text
,
author:
author
})
broadcast!
socket
,
"new_msg"
,
message
{
:noreply
,
socket
}
end
end
defmodule
Pleroma
.
Web
.
ChatChannel
.
ChatChannelState
do
use
Agent
@max_messages
20
def
start_link
do
Agent
.
start_link
(
fn
->
%{
max_id:
1
,
messages:
[]}
end
,
name:
__MODULE__
)
end
def
add_message
(
message
)
do
Agent
.
get_and_update
(
__MODULE__
,
fn
state
->
id
=
state
[
:max_id
]
+
1
message
=
Map
.
put
(
message
,
"id"
,
id
)
messages
=
[
message
|
state
[
:messages
]]
|>
Enum
.
take
(
@max_messages
)
{
message
,
%{
max_id:
id
,
messages:
messages
}}
end
)
end
def
messages
()
do
Agent
.
get
(
__MODULE__
,
fn
state
->
state
[
:messages
]
|>
Enum
.
reverse
end
)
end
end
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment