コード例 #1
0
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;
		 }
	   }
   }
}
コード例 #2
0
ファイル: ChatBoxServer.cpp プロジェクト: nitul1991/ChatBox
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());
}
コード例 #3
0
ファイル: ChatBoxServer.cpp プロジェクト: nitul1991/ChatBox
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;
        }
    }
}
コード例 #4
0
ファイル: user.cpp プロジェクト: suratovvlad/videostream
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;
    }
}