void Dispatcher::run() { while(1) { TCPSocket* speaker = multiListener->listenToSocket(10); if(speaker!=NULL) { int cmd; speaker->recv((char*)&cmd,4); cmd = ntohl(cmd); switch(cmd) { case SESSION_ESTABLISHED: cout<<"connected"; break; case OPEN_SESSION_WITH_PEER: {string dest = ReceiveMsg(speaker); ConnectRequest(speaker->destIpAndPort(),dest);} break; case USER_LIST: sendUserList(speaker); break; case ROOM_LIST: sendRoomList(speaker); break; case MEMBERS_LIST: {string room = ReceiveMsg(speaker); sendMembersList(speaker,room);} break; case CREATE_CHAT: SetActiveChat(speaker->destIpAndPort()); break; case CLOSE_CHAT: CloseUserChat(speaker->destIpAndPort()); break; case CLOSE_SESSION_WITH_PEER: closePeer(speaker->destIpAndPort()); break; default: break; } } } }
void ChatBoxServer::disconnected() { QTcpSocket *client = (QTcpSocket*)sender(); qDebug() << "Client disconnected:" << client->peerAddress().toString(); clients.remove(client); QString user = users[client]; users.remove(client); sendUserList(); foreach(QTcpSocket *client, clients) client->write(QString("Server:" + user + " has left.\n").toUtf8()); }
void ChatBoxServer::readyRead() { // Used to retrieve a pointer to the client QTcpSocket *client = (QTcpSocket*)sender(); while(client->canReadLine()) { QString line = QString::fromUtf8(client->readLine()).trimmed(); qDebug() << "Read line:" << line; QRegExp meRegex("^/me:(.*)$"); if(meRegex.indexIn(line) != -1) { QString user = meRegex.cap(1); // Insert username into QMap users[client] = user; foreach(QTcpSocket *client, clients) client->write(QString("Server:" + user + " has joined.\n").toUtf8()); sendUserList(); } else if(users.contains(client)) { QString message = line; QString user = users[client]; qDebug() << "User:"******"Message:" << message; foreach(QTcpSocket *otherClient, clients) otherClient->write(QString(user + ":" + message + "\n").toUtf8()); } else { qWarning() << "Got bad message from client:" << client->peerAddress().toString() << line; } } }
void User::slotReadyClient() { QDataStream in(_socketUser); in.setVersion(QDataStream::Qt_4_8); for (;;) { if (!_nextBlockSize) { if (_socketUser->bytesAvailable() < sizeof(quint16)) break; in >> _nextBlockSize; } if (_socketUser->bytesAvailable() < _nextBlockSize) { _nextBlockSize = 0; break; } quint8 recievedActionCode; in >> recievedActionCode; if(!_isAuthorized && recievedActionCode != _action_Authentification) return; QString recievedMessage; QString recipientName; switch (recievedActionCode) { case _action_MessageToAll: in >> recievedMessage; _serverUser->sendToAll(recievedMessage, _nameUser); break; case _action_MessageToUser: in >> recipientName >> recievedMessage; _serverUser->sendToUser(recievedMessage, _nameUser, recipientName); if (recipientName != _nameUser) sendSender(recievedMessage, recipientName); break; case _action_Authentification: in >> recievedMessage; //name if (!_serverUser->isNameValid(recievedMessage)) { sendError(this->_error_NameIsNotValid); return; } if (_serverUser->isNameUsed(recievedMessage)) { sendError(this->_error_NameIsUsed); return; } addUser(recievedMessage); sendUserList(); _serverUser->sendUserJoin(_nameUser); break; case _action_StartVideoStream: in >> recievedMessage; StartVideoStream(recievedMessage); break; } _nextBlockSize = 0; } }