summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/client_clui/Makefile (renamed from src/client/Makefile)0
-rw-r--r--src/client_clui/client.cpp (renamed from src/client/client.cpp)12
-rw-r--r--src/client_clui/clui.cpp (renamed from src/client/clui.cpp)0
-rw-r--r--src/client_clui/clui.hpp (renamed from src/client/clui.hpp)0
-rw-r--r--src/client_clui/user.cpp (renamed from src/client/user.cpp)17
-rw-r--r--src/client_clui/user.hpp (renamed from src/client/user.hpp)5
-rw-r--r--src/server/ChatRoom.cpp144
-rw-r--r--src/server/ChatRoom.hpp1
-rw-r--r--src/server/ChatRoom_cmd.cpp54
-rw-r--r--src/server/ChatServer.cpp4
10 files changed, 100 insertions, 137 deletions
diff --git a/src/client/Makefile b/src/client_clui/Makefile
index 071462b..071462b 100644
--- a/src/client/Makefile
+++ b/src/client_clui/Makefile
diff --git a/src/client/client.cpp b/src/client_clui/client.cpp
index 8143b9e..83f8ef0 100644
--- a/src/client/client.cpp
+++ b/src/client_clui/client.cpp
@@ -3,20 +3,12 @@
#include <string.h>
#include <unistd.h>
+#include "../config.hpp"
#include "user.hpp"
-#define SERVER_IP "127.0.0.1"
-static int port = 3030;
-
int main(int argc, char *argv[])
{
- if(argc < 2) {
- printf("Usage: client *name*\n");
- return 1;
- }
-
initscr();
- //raw();
noecho();
int rows, columns;
@@ -27,7 +19,7 @@ int main(int argc, char *argv[])
return 1;
}
- Client *user = Client::Start(SERVER_IP, port, argv[1]);
+ Client *user = Client::Start(SERVER_IP, SERVER_PORT);
if(!user) {
endwin();
perror("server");
diff --git a/src/client/clui.cpp b/src/client_clui/clui.cpp
index 78fd226..78fd226 100644
--- a/src/client/clui.cpp
+++ b/src/client_clui/clui.cpp
diff --git a/src/client/clui.hpp b/src/client_clui/clui.hpp
index 0373f95..0373f95 100644
--- a/src/client/clui.hpp
+++ b/src/client_clui/clui.hpp
diff --git a/src/client/user.cpp b/src/client_clui/user.cpp
index 31cb5e5..d075751 100644
--- a/src/client/user.cpp
+++ b/src/client_clui/user.cpp
@@ -14,20 +14,7 @@ const int key_enter = 10;
const int key_escape = 27;
const int key_backspace = 127;
-//
-
-Client::Client(int i_fd, char *username) : fd(i_fd), in_buf_used(0),
- out_buf_used(0)
-{
- int len = strlen(username);
- char *name = new char[len+2];
- sprintf(name, "%s\n", username);
-
- write(i_fd, name, strlen(name));
- delete[] name;
-}
-
-Client *Client::Start(const char* ip, int port, char *username)
+Client *Client::Start(const char* ip, int port)
{
int client;
client = socket(AF_INET, SOCK_STREAM, 0);
@@ -49,7 +36,7 @@ Client *Client::Start(const char* ip, int port, char *username)
sizeof(server_adress));
if(res == -1) return 0;
- return new Client(client, username);
+ return new Client(client);
}
void Client::Run(ChatRoom *room)
diff --git a/src/client/user.hpp b/src/client_clui/user.hpp
index 1ae8427..a203320 100644
--- a/src/client/user.hpp
+++ b/src/client_clui/user.hpp
@@ -14,11 +14,12 @@ class Client {
bool exit_flag;
- Client(int i_fd, char *username);
+ Client(int i_fd) : fd(i_fd), in_buf_used(0),
+ out_buf_used(0), exit_flag(false) {}
public:
~Client() { close(fd); }
- static Client *Start(const char* ip, int port, char *username);
+ static Client *Start(const char* ip, int port);
void Run(ChatRoom *room);
void BreakLoop() { exit_flag = true; }
void HandleButton(ChatRoom *room);
diff --git a/src/server/ChatRoom.cpp b/src/server/ChatRoom.cpp
index 50c364c..9d99251 100644
--- a/src/server/ChatRoom.cpp
+++ b/src/server/ChatRoom.cpp
@@ -25,58 +25,8 @@ ChatRoom::~ChatRoom()
void ChatRoom::HandleMessage(UserInfo *u, const char *str)
{
- int status = u->GetStatus();
- if(status == wait_name) {
- if(!CheckEnterNickname(u, str)) {
- CloseSession(u);
- return;
- }
- u->SetName(str);
-
- // query to server
- char *msg = new char[DB_BUFFER_SIZE];
- sprintf(msg, "SELECT password FROM users WHERE name = '%s' LIMIT 1", str);
- AnswerDB *ans = the_server->QuerySelect(msg);
- if(ans) {
- DB_ROW *row = ans->GetNextRow();
-
- sprintf(msg, "Welcome to WantChat, %s!", u->GetName());
- u->Send(msg);
- u->Send(" ");
- u->Send("Welcome to anonymous chat in retro-style 80s.");
- u->Send("Use our chat-client for more immersed.");
- u->Send(" ");
- u->Send("This project is open source :)");
- u->Send("Github: github.com/Joursoir/want-chat");
- u->Send(" ");
- u->Send("To join to room using /join room_id");
- u->Send("You can find rooms using /rooms");
- u->Send(" ");
- u->Send("For more detailed info: /help. Good chatting!");
- u->Send(" ");
-
- if(row) {
- u->SetPassword((*row)[0]);
- u->SetStatus(wait_login);
-
- u->Send("Please, log in using /login");
- }
- else {
- u->SetStatus(wait_reg);
- u->Send("Please, create account using /reg");
- }
- }
- else {
- // handling error
- CloseSession(u);
- return;
- }
- // query to server
-
- delete[] msg;
- delete ans;
- return;
- }
+ if(u->GetStatus() != no_wait)
+ return Identification(u, str);
if(str[0] == '/') { // if user sent a command
int argc = 0;
@@ -95,11 +45,7 @@ void ChatRoom::HandleMessage(UserInfo *u, const char *str)
delete[] msg;
}
- else {
- if(status == wait_reg) u->Send(first_reg);
- else if(status == wait_login) u->Send(first_login);
- else u->Send("In the lobby you can write only commands");
- }
+ else u->Send("In the lobby you can write only commands");
}
const char *ChatRoom::GetSecretPass()
@@ -157,6 +103,90 @@ void ChatRoom::CloseSession(UserInfo *u)
serv->CloseConnection(u);
}
+void ChatRoom::Identification(UserInfo *u, const char *str)
+{
+ int status = u->GetStatus();
+ if(status == wait_name) {
+ if(!CheckEnterNickname(u, str)) {
+ CloseSession(u);
+ return;
+ }
+ u->SetName(str);
+
+ // query to server
+ char *msg = new char[DB_BUFFER_SIZE];
+ sprintf(msg, "SELECT password FROM users WHERE name = '%s' LIMIT 1", str);
+ AnswerDB *ans = the_server->QuerySelect(msg);
+ if(ans) {
+ DB_ROW *row = ans->GetNextRow();
+
+ if(row) {
+ u->SetPassword((*row)[0]);
+ u->SetStatus(wait_login);
+
+ sprintf(msg, "Hello, %s! Please, type your password:", u->GetName());
+ u->Send(msg);
+ }
+ else {
+ u->SetStatus(wait_reg);
+ sprintf(msg, "First time here, %s? Please, come up and write password:", u->GetName());
+ u->Send(msg);
+ }
+ }
+ else {
+ // handling error
+ CloseSession(u);
+ return;
+ }
+ // query to server
+
+ delete[] msg;
+ delete ans;
+ }
+ else if(status == wait_reg) {
+ if(!CheckEnterPassword(u, str))
+ return;
+
+ // query to server (add to database)
+ char *msg = new char[DB_BUFFER_SIZE];
+ sprintf(msg, "INSERT INTO users (name, password) VALUES ('%s', '%s')", u->GetName(), str);
+ if(the_server->QueryInsert(msg) != 0) {
+ perror("mariadb insert");
+ }
+ // query to server
+
+ sprintf(msg, "Congratulations, %s! You have registered successfully.", u->GetName());
+ u->Send(msg);
+ delete[] msg;
+
+ u->SetStatus(no_wait);
+ }
+ else if(status == wait_login) {
+ const char *right_pass = u->GetPassword();
+
+ if(strcmp(str, right_pass) != 0)
+ return u->Send("Password are not right, try again.");
+
+ u->Send("Yeh, right password! Glad you came back to WhatChat.");
+ u->SetStatus(no_wait);
+ }
+
+ if(u->GetStatus() == no_wait) {
+ u->Send(" ");
+ u->Send("Welcome to anonymous chat in retro-style 80s.");
+ u->Send("Use our chat-client for more immersed.");
+ u->Send(" ");
+ u->Send("This project is open source :)");
+ u->Send("Github: github.com/Joursoir/want-chat");
+ u->Send(" ");
+ u->Send("To join to room using /join room_id");
+ u->Send("You can find rooms using /rooms");
+ u->Send(" ");
+ u->Send("For more detailed info: /help. Good chatting!");
+ u->Send(" ");
+ }
+}
+
bool ChatRoom::CheckEnterNickname(UserInfo *u, const char *name)
{
int len = strlen(name);
diff --git a/src/server/ChatRoom.hpp b/src/server/ChatRoom.hpp
index 183dcc1..fa56fb2 100644
--- a/src/server/ChatRoom.hpp
+++ b/src/server/ChatRoom.hpp
@@ -39,6 +39,7 @@ private:
static char **ParseToArg(const char *input, int &arrc); // in _cmd
static bool CheckForbiddenSymbols(const char *str); // in _cmd
+ void Identification(UserInfo *u, const char *str);
bool CheckEnterNickname(UserInfo *u, const char *name);
bool CheckEnterPassword(UserInfo *u, const char *pass);
diff --git a/src/server/ChatRoom_cmd.cpp b/src/server/ChatRoom_cmd.cpp
index d37ad5e..8b1f6e9 100644
--- a/src/server/ChatRoom_cmd.cpp
+++ b/src/server/ChatRoom_cmd.cpp
@@ -23,18 +23,14 @@ const int cmd_id_create = 1;
const int cmd_id_join = 2;
const int cmd_id_exit = 3;
const int cmd_id_rooms = 4;
-const int cmd_id_reg = 5;
-const int cmd_id_login = 6;
-const int cmd_count = 7;
+const int cmd_count = 5;
const struct cmd_info cmd[cmd_count] = {
{cmd_id_help, "/help", ChatRoom::Hash("/help"), USE_ANYWHERE, 0, "Usage: /help"},
{cmd_id_create, "/create", ChatRoom::Hash("/create"), USE_IN_LOBBY, 0, "Usage: /create [pass-key]"},
{cmd_id_join, "/join", ChatRoom::Hash("/join"), USE_IN_LOBBY, 1, "Usage: /join *id* [pass-key]"},
{cmd_id_exit, "/exit", ChatRoom::Hash("/exit"), USE_IN_ROOM, 0, "Usage: /exit"},
- {cmd_id_rooms, "/rooms", ChatRoom::Hash("/rooms"), USE_IN_LOBBY, 0, "Usage: /rooms"}, // print all public rooms
- {cmd_id_reg, "/reg", ChatRoom::Hash("/reg"), USE_IN_LOBBY, 2, "Usage: /reg *pass* *pass*"},
- {cmd_id_login, "/login", ChatRoom::Hash("/login"), USE_IN_LOBBY, 1, "Usage: /login *pass*"}
+ {cmd_id_rooms, "/rooms", ChatRoom::Hash("/rooms"), USE_IN_LOBBY, 0, "Usage: /rooms"} // print all public rooms
// IDEA: /clear - clear screen
};
@@ -56,12 +52,6 @@ void ChatRoom::HandleCommand(UserInfo *u, int count,
if(what_command == -1)
return u->Send("Unknown command. Use: /help");
- enum_status status = u->GetStatus();
- if(status == wait_reg && what_command != cmd_id_reg)
- return u->Send(first_reg);
- if(status == wait_login && what_command != cmd_id_login)
- return u->Send(first_login);
-
// scope of command:
if(cmd[what_command].lobby_cmd == USE_IN_ROOM && code == std_id_lobby)
return u->Send("You can use this command only in rooms!");
@@ -127,46 +117,6 @@ void ChatRoom::HandleCommand(UserInfo *u, int count,
// in development
break;
}
-
- case cmd_id_reg: {
- char *pass_one = argvar[1];
- char *pass_two = argvar[2];
-
- if(!CheckEnterPassword(u, pass_one))
- return;
- if(strcmp(pass_one, pass_two) != 0)
- return u->Send("Passwords are not match, try again");
-
- // query to server (add to database)
- char *msg = new char[DB_BUFFER_SIZE];
- sprintf(msg, "INSERT INTO users (name, password) VALUES ('%s', '%s')", u->GetName(), pass_one);
- if(the_server->QueryInsert(msg) != 0) {
- perror("mariadb insert");
- }
- // query to server
-
- sprintf(msg, "Congratulations, %s. You registered in WhatChat.", u->GetName());
- u->Send(msg);
- delete[] msg;
- u->SetStatus(no_wait);
- break;
- }
- case cmd_id_login: {
- CONSOLE_LOG("[!] pass\n");
- char *enter_pass = argvar[1];
- const char *right_pass = u->GetPassword();
-
- if(strcmp(enter_pass, right_pass) != 0)
- return u->Send("Password are not right, try again");
-
- int msg_len = strlen("Hello, ! Glad you came back to WhatChat.");
- char *msg = new char[msg_len + max_name_len];
- sprintf(msg, "Hello, %s! Glad you came back to WhatChat.", u->GetName());
- u->Send(msg);
- delete[] msg;
- u->SetStatus(no_wait);
- break;
- }
default: break;
}
}
diff --git a/src/server/ChatServer.cpp b/src/server/ChatServer.cpp
index 2d700e9..7b6a9ea 100644
--- a/src/server/ChatServer.cpp
+++ b/src/server/ChatServer.cpp
@@ -12,7 +12,7 @@
const int qlen_for_listen = 6;
ChatServer::ChatServer(EventSelector *sel, DatabaseManager *db, int fd)
- : FdHandler(fd), the_selector(sel), dbase(db)
+ : FdHandler(fd), the_selector(sel), dbase(db), room(0)
{
the_selector->Add(this);
lobby = new ChatRoom(this, std_id_lobby, 0);
@@ -163,6 +163,8 @@ void ChatServer::Handle(bool r, bool w)
talkers->AddUser(u);
lobby->AddSession(u);
the_selector->Add(u);
+
+ u->Send("Welcome to WantChat! What is your name?");
}
///////////////////////////////////////////////////////////////