diff --git a/src/channel.cpp b/src/channel.cpp index 00a17a8..da7bfea 100644 --- a/src/channel.cpp +++ b/src/channel.cpp @@ -23,6 +23,9 @@ std::map channels; +static std::mt19937_64 rand_dev {dht::crypto::random_device{}()}; +static std::uniform_int_distribution rand_id; + int NeoComm_join_channel(const char *channel_name) { if(not node.isRunning()) { @@ -94,3 +97,19 @@ struct message *NeoComm_get_next_message(const char *channel_name) { void NeoComm_free_message(struct message *msg) { free(msg); } + +int NeoComm_send_message(const char *channel_name, const char *message) { + const dht::InfoHash chan_hash = channels[channel_name].hash; + const time_t now = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now()); + + if(channels.find(channel_name) == channels.end()) + { + add_error("Not connected to channel"); + return 0; + } + node.putSigned(chan_hash, dht::ImMessage(rand_id(rand_dev), message, now), [](bool sent) { + // TODO: Figure out what to do here for failed messages. + }); + + return 1; +}