Server commands
This commit is contained in:
parent
bad69bf6f2
commit
55f00b902c
1 changed files with 65 additions and 1 deletions
|
@ -3,6 +3,9 @@
|
||||||
#include <WS2tcpip.h>
|
#include <WS2tcpip.h>
|
||||||
#include <ctime>
|
#include <ctime>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
#include <map>
|
||||||
|
#include <vector>
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
#pragma warning(disable : 4996) //_CRT_SECURE_NO_WARNINGS
|
#pragma warning(disable : 4996) //_CRT_SECURE_NO_WARNINGS
|
||||||
#pragma comment(lib,"ws2_32.lib")
|
#pragma comment(lib,"ws2_32.lib")
|
||||||
|
@ -15,6 +18,24 @@ SOCKET listener = INVALID_SOCKET;
|
||||||
SOCKET client = INVALID_SOCKET;
|
SOCKET client = INVALID_SOCKET;
|
||||||
char recvbuf[DEFAULT_BUFLEN];
|
char recvbuf[DEFAULT_BUFLEN];
|
||||||
int recvbuflen = DEFAULT_BUFLEN;
|
int recvbuflen = DEFAULT_BUFLEN;
|
||||||
|
std::map<SOCKET, std::string> names;
|
||||||
|
|
||||||
|
std::vector<std::string> split(std::string txt) {
|
||||||
|
std::string buf = "";
|
||||||
|
std::vector<std::string> v;
|
||||||
|
bool first = true;
|
||||||
|
for (int i = 0; i < txt.length();i++) {
|
||||||
|
if (txt[i] == ' ') {
|
||||||
|
v.push_back(buf);
|
||||||
|
buf = "";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
buf += txt[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
v.push_back(buf);
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
wsRes = WSAStartup(MAKEWORD(2, 2), &wsaData);
|
wsRes = WSAStartup(MAKEWORD(2, 2), &wsaData);
|
||||||
|
@ -112,12 +133,55 @@ int main() {
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
std::cout << "Bytes recived: " << inBytes << std::endl;
|
std::cout << "Bytes recived: " << inBytes << std::endl;
|
||||||
|
if (buf[1] == '\\') {
|
||||||
|
|
||||||
|
std::string cmd = std::string(buf, inBytes);
|
||||||
|
std::vector<std::string> args = split(cmd);
|
||||||
|
if (args[0] == "\\\\help") {
|
||||||
|
std::string resp = "\\\\name - Set nickname\r\n";
|
||||||
|
send(s, resp.c_str(), resp.size(), 0);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (args[0] == "\\\\name") {
|
||||||
|
std::cout << args.size();
|
||||||
|
if (args.size() == 1) {
|
||||||
|
std::string resp = "Too few arguments!\r\n";
|
||||||
|
send(s, resp.c_str(), resp.size(),0);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (args.size() > 2) {
|
||||||
|
std::string resp = "Too many arguments!\r\n";
|
||||||
|
send(s, resp.c_str(), resp.size(), 0);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (names.find(s) == names.end()) {
|
||||||
|
names.insert(std::make_pair(s, args[1]));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
names[s] = args[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
std::cout << "Socket #" << s << " set it's name to " << args[1] << std::endl;
|
||||||
|
std::string resp = "Name change successful!\r\n";
|
||||||
|
send(s, resp.c_str(), resp.size(), 0);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Unknown command!
|
||||||
|
std::string resp = "Unknown command!\r\n";
|
||||||
|
resp += args[0];
|
||||||
|
send(s, resp.c_str(), resp.size(), 0);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else std::cout << buf[0];
|
||||||
for (int j = 0; j < master.fd_count;j++) {
|
for (int j = 0; j < master.fd_count;j++) {
|
||||||
SOCKET outSock = master.fd_array[j];
|
SOCKET outSock = master.fd_array[j];
|
||||||
if (outSock != listener && outSock != s)
|
if (outSock != listener && outSock != s)
|
||||||
{
|
{
|
||||||
std::ostringstream sst;
|
std::ostringstream sst;
|
||||||
sst << "SOCKET #" << s << " : " << buf << std::endl;
|
std::ostringstream k;
|
||||||
|
k << "SOCKET #"<< s;
|
||||||
|
sst << ( ( names.find(s) != names.end()) ? names[s] : k.str()) << " : " << buf << std::endl;
|
||||||
std::string msg = sst.str();
|
std::string msg = sst.str();
|
||||||
std::cout << msg;
|
std::cout << msg;
|
||||||
send(outSock, msg.c_str(), msg.size() + 1, 0);
|
send(outSock, msg.c_str(), msg.size() + 1, 0);
|
||||||
|
|
Loading…
Reference in a new issue