void ProtocolLogin::onConnect() { sendLoginPacket(); }
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; }