-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathBaseUI.cpp
More file actions
97 lines (88 loc) · 2.42 KB
/
BaseUI.cpp
File metadata and controls
97 lines (88 loc) · 2.42 KB
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
89
90
91
92
93
94
95
96
97
#include "BaseUI.h"
#include "TerminalColors.h"
BaseUI::BaseUI(SignalingManager &manager) : signalingManager(manager)
{
}
BaseUI::~BaseUI() {}
void BaseUI::showHeader()
{
std::cout << MAGENTA << "\nWelcome to the Signaling Quickstart demo.\n";
}
void BaseUI::showCommandList()
{
std::cout << WHITE << "Choose from the following commands:\n"
<< YELLOW << "login" << GREEN << " Log in to Signaling\n"
<< YELLOW << "subscribe <channelName>" << GREEN << " Subscribe to a Messaging channel\n"
<< YELLOW << "unsubscribe <channelName>" << GREEN << " Unsubscribe from a Messaging channel\n"
<< YELLOW << "send <channelName> <message>" << GREEN << " Send a <message> to a <channelName> \n"
<< YELLOW << "logout" << GREEN << " Log out of Signaling\n"
<< YELLOW << "quit" << GREEN << " Exit this demo\n";
}
void BaseUI::processCommand(std::string input)
{
std::istringstream iss(input);
std::vector<std::string> tokens(std::istream_iterator<std::string>{iss},
std::istream_iterator<std::string>());
if (tokens.empty())
{
std::cout << "Invalid command. Please enter a valid command.\n";
return;
}
const std::string &command = tokens[0];
if (command == "login")
{
if (signalingManager.isLoggedIn())
{
std::cout << RED << "You are already logged in.\n";
}
else
{
signalingManager.login();
}
}
else if (command == "subscribe" && tokens.size() > 1)
{
if (signalingManager.isLoggedIn())
{
signalingManager.subscribeChannel(tokens[1]);
}
else
{
std::cout << RED << "You need to log in first.\n";
}
}
else if (command == "unsubscribe" && tokens.size() > 1)
{
signalingManager.unsubscribeChannel(tokens[1]);
}
else if (command == "send" && tokens.size() > 2)
{
std::string message = input.substr(input.find(tokens[1]) + tokens[1].length());
signalingManager.publishMessage(tokens[1], message);
}
else if (command == "logout")
{
signalingManager.logout();
}
else if (command == "quit")
{
std::cout << "Exiting the demo.\n";
exit(0);
}
else
{
std::cout << RED << "Invalid command. Please enter a valid command.\n";
}
}
void BaseUI::run()
{
showHeader();
showCommandList();
while (true)
{
std::cout << WHITE << "> ";
std::string input;
std::getline(std::cin, input);
processCommand(input);
}
}