Commit 0cad7d0312fbb714182d9e15ab7dcee9d9622b63
1 parent
b23cc15d
git-svn-id: svn://imanolbarba.net/PAD@45 c2ee353e-ed0d-4329-bf56-03aec153487f
Showing
8 changed files
with
45 additions
and
11 deletions
JChatServerV2/bin/pad/prac2/JChat$1.class
No preview for this file type
JChatServerV2/bin/pad/prac2/JChat.class
No preview for this file type
JChatServerV2/src/pad/prac2/JChat.java
@@ -8,14 +8,19 @@ public class JChat | @@ -8,14 +8,19 @@ public class JChat | ||
8 | { | 8 | { |
9 | String ip; | 9 | String ip; |
10 | int port, roomSize; | 10 | int port, roomSize; |
11 | - Scanner in = new Scanner(System.in); | 11 | + /*Scanner in = new Scanner(System.in); |
12 | System.out.print("IP: "); | 12 | System.out.print("IP: "); |
13 | ip = in.nextLine(); | 13 | ip = in.nextLine(); |
14 | System.out.print("Port: "); | 14 | System.out.print("Port: "); |
15 | port = in.nextInt(); | 15 | port = in.nextInt(); |
16 | System.out.print("Size of chatroom: "); | 16 | System.out.print("Size of chatroom: "); |
17 | roomSize = in.nextInt(); | 17 | roomSize = in.nextInt(); |
18 | - in.close(); | 18 | + in.close();*/ |
19 | + | ||
20 | + ip = "localhost"; | ||
21 | + port = 3001; | ||
22 | + roomSize = 5; | ||
23 | + | ||
19 | final Server serv = new Server(ip,port,roomSize); | 24 | final Server serv = new Server(ip,port,roomSize); |
20 | Runtime.getRuntime().addShutdownHook(new Thread() | 25 | Runtime.getRuntime().addShutdownHook(new Thread() |
21 | { | 26 | { |
QChatClient/chatroom.cpp
@@ -241,6 +241,7 @@ void Chatroom::relayMsg(string msg) | @@ -241,6 +241,7 @@ void Chatroom::relayMsg(string msg) | ||
241 | 241 | ||
242 | void Chatroom::newChat(QString peerNick) | 242 | void Chatroom::newChat(QString peerNick) |
243 | { | 243 | { |
244 | + freeChats(false); | ||
244 | ChatWindow* newchat = new ChatWindow(peerNick,this); | 245 | ChatWindow* newchat = new ChatWindow(peerNick,this); |
245 | activeChats.insert(std::pair<string,ChatWindow*>(peerNick.toStdString(),newchat)); | 246 | activeChats.insert(std::pair<string,ChatWindow*>(peerNick.toStdString(),newchat)); |
246 | newchat->show(); | 247 | newchat->show(); |
@@ -249,8 +250,8 @@ void Chatroom::newChat(QString peerNick) | @@ -249,8 +250,8 @@ void Chatroom::newChat(QString peerNick) | ||
249 | 250 | ||
250 | void Chatroom::removeChat(QString &nickname) | 251 | void Chatroom::removeChat(QString &nickname) |
251 | { | 252 | { |
252 | - ChatWindow* chat = (ChatWindow*)activeChats.find(nickname.toStdString())->second; | ||
253 | - delete chat; | 253 | + ChatWindow* chat = (ChatWindow*) activeChats.find(nickname.toStdString())->second; |
254 | + inactiveChats.insert(std::pair<string,ChatWindow*>(nickname.toStdString(),chat)); | ||
254 | activeChats.erase(nickname.toStdString()); | 255 | activeChats.erase(nickname.toStdString()); |
255 | } | 256 | } |
256 | 257 | ||
@@ -259,7 +260,7 @@ void Chatroom::launchChatWindow(QModelIndex index) | @@ -259,7 +260,7 @@ void Chatroom::launchChatWindow(QModelIndex index) | ||
259 | QString peerNick = ui->userList->model()->data(index).toString(); | 260 | QString peerNick = ui->userList->model()->data(index).toString(); |
260 | if(activeChats.find(peerNick.toStdString()) == activeChats.end()) | 261 | if(activeChats.find(peerNick.toStdString()) == activeChats.end()) |
261 | { | 262 | { |
262 | - emit newChat(peerNick); | 263 | + emit createChat(peerNick); |
263 | } | 264 | } |
264 | } | 265 | } |
265 | 266 | ||
@@ -385,18 +386,44 @@ void Chatroom::startSession() | @@ -385,18 +386,44 @@ void Chatroom::startSession() | ||
385 | send = new std::thread(sendThread,&s,this); | 386 | send = new std::thread(sendThread,&s,this); |
386 | } | 387 | } |
387 | 388 | ||
389 | +void Chatroom::freeChats(bool active) | ||
390 | +{ | ||
391 | + int count = 0; | ||
392 | + if(active) | ||
393 | + { | ||
394 | + cout << "FREE ACTIVE" << endl; | ||
395 | + map<string,void*>::iterator it; | ||
396 | + for(it = activeChats.begin(); it != activeChats.end(); it++) | ||
397 | + { | ||
398 | + count++; | ||
399 | + ChatWindow* chat = (ChatWindow*) it->second; | ||
400 | + activeChats.erase(it); | ||
401 | + delete chat; | ||
402 | + } | ||
403 | + } | ||
404 | + else | ||
405 | + { | ||
406 | + cout << "FREE INACTIVE" << endl; | ||
407 | + map<string,void*>::iterator it; | ||
408 | + for(it = inactiveChats.begin(); it != inactiveChats.end(); it++) | ||
409 | + { | ||
410 | + count++; | ||
411 | + ChatWindow* chat = (ChatWindow*) it->second; | ||
412 | + inactiveChats.erase(it); | ||
413 | + delete chat; | ||
414 | + } | ||
415 | + } | ||
416 | + cout << "DELETED " << count << endl << "REMAINING" << endl << activeChats.size() << " ACTIVE" << endl << inactiveChats.size() << " INACTIVE" << endl; | ||
417 | +} | ||
418 | + | ||
388 | Chatroom::~Chatroom() | 419 | Chatroom::~Chatroom() |
389 | { | 420 | { |
390 | delete msgLock; | 421 | delete msgLock; |
391 | delete chatLock; | 422 | delete chatLock; |
392 | delete recv; | 423 | delete recv; |
393 | delete send; | 424 | delete send; |
394 | - map<string,void*>::iterator it; | ||
395 | - for(it = activeChats.begin(); it != activeChats.end(); it++) | ||
396 | - { | ||
397 | - ChatWindow* chat = (ChatWindow*) it->second; | ||
398 | - delete chat; | ||
399 | - } | 425 | + freeChats(false); |
426 | + freeChats(true); | ||
400 | delete ui; | 427 | delete ui; |
401 | } | 428 | } |
402 | 429 |
QChatClient/chatroom.h
@@ -46,10 +46,12 @@ private: | @@ -46,10 +46,12 @@ private: | ||
46 | list<string> printServerQueue; | 46 | list<string> printServerQueue; |
47 | list<string> printStatusQueue; | 47 | list<string> printStatusQueue; |
48 | map<string,void*> activeChats; | 48 | map<string,void*> activeChats; |
49 | + map<string,void*> inactiveChats; | ||
49 | std::mutex chatMutex; | 50 | std::mutex chatMutex; |
50 | unique_lock<std::mutex>* chatLock; | 51 | unique_lock<std::mutex>* chatLock; |
51 | std::condition_variable chatCreated; | 52 | std::condition_variable chatCreated; |
52 | string getSender(string msg); | 53 | string getSender(string msg); |
54 | + void freeChats(bool active); | ||
53 | 55 | ||
54 | protected: | 56 | protected: |
55 | void closeEvent(QCloseEvent *event); | 57 | void closeEvent(QCloseEvent *event); |
build-QChatClient-Desktop-Debug/QChatClient
No preview for this file type
build-QChatClient-Desktop-Debug/main.o
No preview for this file type
build-QChatClient-Desktop-Debug/moc_chatroom.o
No preview for this file type