~singpolyma/biboumi

ref: bb596582bd2d8b9aab3fe08e76a7d24d82bf614a biboumi/src/irc/irc_channel.hpp -rw-r--r-- 1.2 KiB
bb596582 — louiz’ Add a <item/> node in the presence of a leaving participant 5 years ago
                                                                                
81f8f45b louiz’
bf7b05ef Florent Le Coz
acf769d8 Florent Le Coz
bf7b05ef Florent Le Coz
3620d533 louiz’
bf7b05ef Florent Le Coz
af420738 louiz’
3620d533 louiz’
3079c38d louiz’
bf7b05ef Florent Le Coz
acf769d8 Florent Le Coz
720e31a5 Florent Le Coz
e840704b Florent Le Coz
5739d418 Florent Le Coz
bb596582 louiz’
507d0c2c louiz’
bf7b05ef Florent Le Coz
020325db Florent Le Coz
3079c38d louiz’
3620d533 louiz’
bf7b05ef Florent Le Coz
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
#pragma once


#include <irc/irc_user.hpp>
#include <memory>
#include <string>
#include <vector>
#include <map>

/**
 * Keep the state of a joined channel (the list of occupants with their
 * informations (mode, etc), the modes, etc)
 */
class IrcChannel
{
public:
  IrcChannel() = default;

  IrcChannel(const IrcChannel&) = delete;
  IrcChannel(IrcChannel&&) = delete;
  IrcChannel& operator=(const IrcChannel&) = delete;
  IrcChannel& operator=(IrcChannel&&) = delete;

  bool joined{false};
  // Set to true if we sent a PART but didn’t yet receive the PART ack from
  // the server
  bool parting{false};
  std::string topic{};
  std::string topic_author{};
  void set_self(IrcUser* user);
  IrcUser* get_self() const;
  IrcUser* add_user(const std::string& name,
                    const std::map<char, char>& prefix_to_mode);
  IrcUser* find_user(const std::string& name) const;
  void remove_all_users();
  std::unique_ptr<IrcUser> remove_user(const IrcUser* user);
  const std::vector<std::unique_ptr<IrcUser>>& get_users() const
  { return this->users; }

protected:
  // Pointer to one IrcUser stored in users
  IrcUser* self{nullptr};
  std::vector<std::unique_ptr<IrcUser>> users{};
};