0
0
Fork 0
mirror of https://github.com/matrix-construct/construct synced 2024-06-10 22:18:54 +02:00

ircd:Ⓜ️ Room interface related.

This commit is contained in:
Jason Volk 2018-01-26 12:23:28 -08:00
parent 74657fa197
commit ed5b4d0641
2 changed files with 47 additions and 88 deletions

View file

@ -38,17 +38,27 @@ namespace ircd::m
bool my(const room &);
bool exists(const id::room &);
event::id::buf send(room, const m::id::user &sender, const string_view &type, const json::iov &content);
event::id::buf send(room, const m::id::user &sender, const string_view &type, const json::members &content);
event::id::buf send(room, const m::id::user &sender, const string_view &type, const string_view &state_key, const json::iov &content);
event::id::buf send(room, const m::id::user &sender, const string_view &type, const string_view &state_key, const json::members &content);
// Lowest-level
event::id::buf commit(const room &, json::iov &event, const json::iov &content);
event::id::buf message(room, const m::id::user &sender, const json::members &content);
event::id::buf message(room, const m::id::user &sender, const string_view &body, const string_view &msgtype = "m.text");
event::id::buf membership(room, const m::id::user &, const string_view &membership);
event::id::buf leave(room, const m::id::user &);
event::id::buf join(room, const m::id::user &);
// Send state to room
event::id::buf send(const room &, const m::id::user &sender, const string_view &type, const string_view &state_key, const json::iov &content);
event::id::buf send(const room &, const m::id::user &sender, const string_view &type, const string_view &state_key, const json::members &content);
event::id::buf send(const room &, const m::id::user &sender, const string_view &type, const string_view &state_key, const json::object &content);
// Send non-state to room
event::id::buf send(const room &, const m::id::user &sender, const string_view &type, const json::iov &content);
event::id::buf send(const room &, const m::id::user &sender, const string_view &type, const json::members &content);
event::id::buf send(const room &, const m::id::user &sender, const string_view &type, const json::object &content);
// Convenience sends
event::id::buf message(const room &, const m::id::user &sender, const json::members &content);
event::id::buf message(const room &, const m::id::user &sender, const string_view &body, const string_view &msgtype = "m.text");
event::id::buf membership(const room &, const m::id::user &, const string_view &membership);
event::id::buf leave(const room &, const m::id::user &);
event::id::buf join(const room &, const m::id::user &);
// Create new room
room create(const id::room &, const id::user &creator, const id::room &parent, const string_view &type);
room create(const id::room &, const id::user &creator, const string_view &type = {});
}
@ -104,10 +114,6 @@ struct ircd::m::room
uint64_t maxdepth() const;
// modify
event::id::buf send(json::iov &event);
event::id::buf send(json::iov &event, const json::iov &content);
event::id::buf message(json::iov &event, const json::iov &content);
room(const alias &, const event::id &event_id = {});
room(const id &room_id, const event::id &event_id = {})
:room_id{room_id}

View file

@ -77,26 +77,26 @@ ircd::m::create(const id::room &room_id,
room_id
};
room.send(event, content);
commit(room, event, content);
return room;
}
ircd::m::event::id::buf
ircd::m::join(m::room room,
ircd::m::join(const room &room,
const m::id::user &user_id)
{
return membership(room, user_id, "join");
}
ircd::m::event::id::buf
ircd::m::leave(m::room room,
ircd::m::leave(const room &room,
const m::id::user &user_id)
{
return membership(room, user_id, "leave");
}
ircd::m::event::id::buf
ircd::m::membership(m::room room,
ircd::m::membership(const room &room,
const m::id::user &user_id,
const string_view &membership)
{
@ -118,11 +118,11 @@ ircd::m::membership(m::room room,
"Member '%s' is already '%s'.", string_view{user_id}, membership
};
*/
return room.send(event, content);
return commit(room, event, content);
}
ircd::m::event::id::buf
ircd::m::message(m::room room,
ircd::m::message(const room &room,
const m::id::user &sender,
const string_view &body,
const string_view &msgtype)
@ -135,7 +135,7 @@ ircd::m::message(m::room room,
}
ircd::m::event::id::buf
ircd::m::message(m::room room,
ircd::m::message(const room &room,
const m::id::user &sender,
const json::members &contents)
{
@ -143,7 +143,7 @@ ircd::m::message(m::room room,
}
ircd::m::event::id::buf
ircd::m::send(m::room room,
ircd::m::send(const room &room,
const m::id::user &sender,
const string_view &type,
const string_view &state_key,
@ -154,7 +154,7 @@ ircd::m::send(m::room room,
}
ircd::m::event::id::buf
ircd::m::send(m::room room,
ircd::m::send(const room &room,
const m::id::user &sender,
const string_view &type,
const string_view &state_key,
@ -165,7 +165,7 @@ ircd::m::send(m::room room,
}
ircd::m::event::id::buf
ircd::m::send(m::room room,
ircd::m::send(const room &room,
const m::id::user &sender,
const string_view &type,
const string_view &state_key,
@ -179,11 +179,11 @@ ircd::m::send(m::room room,
{ event, { "state_key", state_key }},
};
return room.send(event, content);
return commit(room, event, content);
}
ircd::m::event::id::buf
ircd::m::send(m::room room,
ircd::m::send(const room &room,
const m::id::user &sender,
const string_view &type,
const json::members &contents)
@ -193,7 +193,7 @@ ircd::m::send(m::room room,
}
ircd::m::event::id::buf
ircd::m::send(m::room room,
ircd::m::send(const room &room,
const m::id::user &sender,
const string_view &type,
const json::object &contents)
@ -203,7 +203,7 @@ ircd::m::send(m::room room,
}
ircd::m::event::id::buf
ircd::m::send(m::room room,
ircd::m::send(const room &room,
const m::id::user &sender,
const string_view &type,
const json::iov &content)
@ -215,7 +215,20 @@ ircd::m::send(m::room room,
{ event, { "type", type }},
};
return room.send(event, content);
return commit(room, event, content);
}
ircd::m::event::id::buf
ircd::m::commit(const room &room,
json::iov &event,
const json::iov &contents)
{
const json::iov::set set[]
{
{ event, { "room_id", room.room_id }},
};
return m::vm::commit(event, contents);
}
bool
@ -247,66 +260,6 @@ ircd::m::room::room(const alias &alias,
assert(0); //TODO: translate
}
ircd::m::event::id::buf
ircd::m::room::message(json::iov &event,
const json::iov &content)
{
const json::iov::set _type[]
{
{ event, { "type", "m.room.message" }},
};
const json::strung c //TODO: child iov
{
content
};
const json::iov::set_if _content[]
{
{ event, !content.empty(), { "content", string_view{c} }},
};
return send(event);
}
ircd::m::event::id::buf
ircd::m::room::send(json::iov &event,
const json::iov &content)
{
const json::strung c //TODO: child iov
{
content
};
const json::iov::set_if _content[]
{
{ event, !content.empty(), { "content", string_view{c} }},
};
return send(event);
}
ircd::m::event::id::buf
ircd::m::room::send(json::iov &event)
{
const json::iov::set room_id
{
event, { "room_id", this->room_id }
};
//std::cout << this->room_id << " at " << this->maxdepth() << std::endl;
// TODO: XXX
// commitment to room here @ exclusive acquisition of depth
const json::iov::defaults depth
{
event, { "depth", int64_t(this->maxdepth()) + 1 }
};
return m::vm::commit(event);
}
bool
ircd::m::room::membership(const m::id::user &user_id,
const string_view &membership)