コード例 #1
0
void ProtocolLogin::onConnect()
{
    sendLoginPacket();
}
コード例 #2
0
ファイル: client.cpp プロジェクト: nchaimov/cis532-duckchat
int main(int argc, char ** argv) {
    if(argc != 4) {
        std::cerr << "usage: " << argv[0] << " server_name port user_name" << std::endl;
        exit(-1);
    }
    char * hostName = argv[1];
    int portNum = atoi(argv[2]);
    char * portNumStr = argv[2];
    char * userName = argv[3];

    if(portNum < 0 || portNum > 65535) {
        std::cerr << "error: port number must be between 0 and 65535" << std::endl;
        exit(-2);
    } 

    if(strnlen(userName, USERNAME_MAX+1) > USERNAME_MAX) {
        std::cerr << "error: username can be no longer than " << USERNAME_MAX << " characters" << std::endl;
        exit(-3);
    }

    struct addrinfo hints, *servinfo, *p;
    int status;
    int numbytes;
    memset(&hints, 0, sizeof(hints));
    hints.ai_family = AF_INET;
    hints.ai_socktype = SOCK_DGRAM;
    status = getaddrinfo(hostName, portNumStr, &hints, &servinfo);

    if(status != 0) {
        std::cerr << "error: unable to resolve address: " << gai_strerror(status) << std::endl;
        exit(-4);
    }

    for(p = servinfo; p != NULL; p = p->ai_next) {
        sock = socket(p->ai_family, p->ai_socktype, p->ai_protocol);
        if(sock == -1) {
            std::cerr << "warning: could not connect to socket" << std::endl;
            continue;
        }
        break;
    }

    if(p == NULL) {
        std::cerr << "error: all sockets failed to connect" << std::endl;
        exit(-5);
    }
	
	memset(curChannel, 0, CHANNEL_MAX);
	strncpy(curChannel, "Common", CHANNEL_MAX);
	channelsJoined.insert(curChannel);
	
	buf = (text *) malloc(MAX_BUFFER_SIZE);

    fcntl(sock, F_SETFL, O_NONBLOCK);

    sendLoginPacket(sock, p, userName);
    sendJoinPacket(sock, p, "Common");

    atexit(restoreTerminal);
    setupTerminal();

    line = new char[MAXLINE+1];
	memset(line, '\0', MAXLINE+1);

	clearInput();
    refreshAll();

	signal(SIGALRM, timerExpired);
	alarm(KEEP_ALIVE_FREQ);

    while(handleInput(sock, p)) {
    }

    sendLogoutPacket(sock, p);

    delete [] line; 
	free(buf);

    return 0;
}