Пример #1
0
DWORD WINAPI readPipeAndSendToSocketThreadLoop(LPVOID lpParam)
{
	SOCKET* ClientSocket = (SOCKET*)lpParam;

	char recvbuf[DEFAULT_BUFLEN];
	int recvbuflen = DEFAULT_BUFLEN;
	int bufSize = 0;
	int iSendResult;
	for (;;) {
		ZeroMemory(&recvbuf, recvbuflen);
		bufSize = readFromPipe(recvbuf);
		iSendResult = send(*ClientSocket, recvbuf, bufSize, 0);
		if (iSendResult == SOCKET_ERROR) {
			printf("send failed with error: %d\n", WSAGetLastError());
			if (isForceQuit) {
				return 0;
			}
			else {
				closeClientSocket();
				WSACleanup();
				return 1;
			}
		}
	}
	return 0;
}
Пример #2
0
int closeServer() {
	int iResult = 0;
	isForceQuit = true;
	if (!isConnectionEstablished) {
		iResult = closesocket(ListenSocket);
		ListenSocket = INVALID_SOCKET;
		WSACleanup();
		return iResult;
	}
	else {
		closePipes();
		closeClientSocket();
		WSACleanup();
		return 0;
	}
	return -1;
}
Пример #3
0
void *Server::recvDataSocket(void *client_sock) {
    cout << "Thread listener created" << endl;
    
    int active = j;
    cout << "recv on :" <<  active << endl;
    int c_sock = *((int*)client_sock);
    int cl_sock = *((int*)c_sock);
    char* buff; buff = new char[MAXBUF];
    bzero(buff,MAXBUF); int len; char *str;
    
    cout << "Client Socket: " << users[active].getID() << endl;
    cout << "status client "<< users[active].getID() << ": "<< users[active].getStatus() << endl;

    /* Main loop */
    while(users[active].getStatus()=="online"){
        
        cout << "lock listener called" << endl;
        users[active].setMessage("");
        bzero(buff,MAXBUF);
        len = recv(users[active].getID(), buff , MAXBUF , 0); //receive message from user
        printf("%s\n",buff);
        buff = strtok(buff,"\n\r");
        users[active].setMessage((string)buff);
        
        if (len>=0){
            string dest = getDestination(users[active].getMessage());
            int id_dest = searchIDbyName(dest);
            
            if(users[active].getMessage()=="logout"){   //if user type "logout"
                cout << "masuk" << endl;
                closeClientSocket(users[active].getID());
                users[active].setStatus("offline");
                cout << "client "<< users[active].getID() << ": "<< users[active].getStatus() << endl;
                break;
            } else if(dest=="--login--"){
                int success = 0;
                listUser();
                string usr=getUsernameFromMessage(users[active].getMessage());
                string pass=getPasswordFromMessage(users[active].getMessage());
                cout << "usr: "******"usr length: " << usr.length() << endl;
                cout << "pass: "******"pass length: " << pass.length() << endl;
                success = login(usr,pass);
                cout << "success: " << success << endl;
                if (success>0){
                    // char * convert; convert = new char[32];
                    string msg = "Welcome to the MESSENGER";
                    write(users[active].getID(),msg.c_str(),strlen(msg.c_str()));
                    users[active].setName(usr);
                }else{
                    users[active].setStatus("offline");
                    logger.loggedIn(usr);
                   	closeClientSocket(users[active].getID());
                }
            } else if (dest=="--register--"){
                string usr=getUsernameFromMessage(users[active].getMessage());
                string pass=getPasswordFromMessage(users[active].getMessage());
                int success = 0;
                success = signup(usr,pass);
                cout <<"success: " << success << endl;
                if (success>0){
                    string msg = "account succesfully created";
                    write(users[active].getID(),msg.c_str(),strlen(msg.c_str()));
                    users[active].setName(usr);
                    logger.terdaftar(usr);
                }
            }else if(dest=="--create--"){
                string grpname = getMessage(users[active].getMessage());
                cout << grpname << endl;
                cout << grpname.length() << endl;
                //Server::group.newGroup(grpname);
                group.newGroup(strdup(grpname.c_str()));
                write(users[active].getID(),"Group succesfully created",25);
            } else if(dest=="--join--"){
                string group=getUsernameFromMessage(users[active].getMessage());
                string name=getPasswordFromMessage(users[active].getMessage());
                cout << group;
                cout << name;
                /*
                char* membername;
                strcpy(membername, name.c_str());
                cout << groupname;
                cout << membername;
                */
                Server::group.addNewMemberGroup(group,name);
                
            }else if(dest=="--leave--"){
                string group=getUsernameFromMessage(users[active].getMessage());
                string name=getPasswordFromMessage(users[active].getMessage());
                char* groupname;
                strcpy(groupname, group.c_str());
                char* membername;
                strcpy(membername, name.c_str());
                Server::group.delMember(groupname,membername);
                logger.left(membername, groupname);
            } else if(dest=="--group--"){
            	string group=getUsernameFromMessage(users[active].getMessage());
                string message=getPasswordFromMessage(users[active].getMessage());
                char* groupname;
                strcpy(groupname, group.c_str());
                cout << "group message: " << message << endl;
                sendToAll(groupname,message);
            }else{
                 cout << "dest: " << dest << endl;
                 cout << "len dest: " << dest.length() << endl;
                 cout << "id_dest" << id_dest << endl;
                 cout << "Message: " << getMessage(users[active].getMessage()) << endl;
                 cout << "Message len: " << getMessage(users[active].getMessage()).length() << endl;
                 cout << "test : " << active << endl;
                 // users[active].setLength(len);
                 if(id_dest!=-1){
                 	string concatmsg = users[active].getName() + " : " + getMessage(users[active].getMessage());
                 	users[id_dest].setMessage(concatmsg);
	                cout << "test lawan: " << users[id_dest].getMessage()<< endl;
	                cout << "status: " << users[active].getStatus() << endl;
	             	users[id_dest].setLength(len);
                 }
            }
        }
        cout << "bufer[" << active << "] : " << users[active].getMessage().length() << endl;
//        cout << "unlock listener called" << endl;
    }
    
    cout << "Thread-listener for sock: " << active << " die..........." << endl;
    pthread_exit(NULL);
}