From: <at...@us...> - 2007-08-21 16:14:16
|
Revision: 481 http://cadcdev.svn.sourceforge.net/cadcdev/?rev=481&view=rev Author: atani Date: 2007-08-21 09:14:06 -0700 (Tue, 21 Aug 2007) Log Message: ----------- code cleanup and fixes for chat[d] on linux Modified Paths: -------------- tiki/examples/net/chat/Makefile tiki/examples/net/chat/src/main.cpp tiki/examples/net/chatd/Makefile tiki/examples/net/chatd/src/main.cpp tiki/include/Tiki/net/tcpsocket.h tiki/sdl/src/platnet.cpp tiki/src/net/tcpserversocket.cpp tiki/src/net/tcpsocket.cpp Modified: tiki/examples/net/chat/Makefile =================================================================== --- tiki/examples/net/chat/Makefile 2007-08-21 08:33:49 UTC (rev 480) +++ tiki/examples/net/chat/Makefile 2007-08-21 16:14:06 UTC (rev 481) @@ -4,10 +4,10 @@ OBJS = $(patsubst %.cpp,%.o,$(wildcard src/*.cpp)) all: $(OBJS) - $(CXX) $(LDFLAGS) -L$(TIKI_DIR)$(TIKI_PLAT) -L$(TIKI_DIR)$(TIKI_PLAT)/lib $(OBJS) $(TIKI_BASE_LIBS) -o basic + $(CXX) $(LDFLAGS) -L$(TIKI_DIR)$(TIKI_PLAT) -L$(TIKI_DIR)$(TIKI_PLAT)/lib $(OBJS) $(TIKI_BASE_LIBS) -o chat clean: - -rm -f $(OBJS) basic + -rm -f $(OBJS) chat DEPSDIR=$(CURDIR) include $(TIKI_DIR)$(TIKI_PLAT)/Makefile.rules Modified: tiki/examples/net/chat/src/main.cpp =================================================================== --- tiki/examples/net/chat/src/main.cpp 2007-08-21 08:33:49 UTC (rev 480) +++ tiki/examples/net/chat/src/main.cpp 2007-08-21 16:14:06 UTC (rev 481) @@ -8,6 +8,7 @@ #include <Tiki/tiki.h> #include <Tiki/refcnt.h> +#include <Tiki/hid.h> #include <Tiki/tikitime.h> #include <Tiki/net.h> @@ -17,11 +18,48 @@ using namespace Tiki::Net::TCP; using namespace Tiki::Time; +RefPtr<TCPSocket> g_remoteconn; +std::string g_tmpbuf; + +volatile bool g_quitting = false; +void tkCallback( const Hid::Event & evt, void * data ) { + if ( evt.type == Hid::Event::EvtQuit ) { + g_quitting = true; + } + else if ( evt.type == Hid::Event::EvtKeyDown) { + g_tmpbuf.push_back((char)evt.key); + if(evt.key == '\n' || evt.key == '\r') { + RefPtr<Buffer> buf = new Buffer(g_tmpbuf.size()); + buf->setData((uint8 *)g_tmpbuf.c_str(), g_tmpbuf.size()); + g_remoteconn->send(buf); + g_tmpbuf = ""; + } + } +} + extern "C" int tiki_main( int argc, char **argv) { - Tiki::init(argc, argv); Tiki::Net::init(); + Hid::callbackReg( tkCallback, NULL ); + RefPtr<Address> remote = new Address(); + remote->setHostName("localhost"); + remote->setPort(5555); + g_remoteconn = new TCPSocket(remote); + + g_remoteconn->open(); + RefPtr<Buffer> buf = new Buffer(1024); + while(g_remoteconn->isOpen() && !g_quitting) { + buf->reset(); + g_remoteconn->recv(buf); + if(buf->getUsedDataLen() > 0) + { + Tiki::Debug::printf("%s", buf->getData()); + } + } + + g_remoteconn->close(); + Tiki::Net::shutdown(); return 0; } Modified: tiki/examples/net/chatd/Makefile =================================================================== --- tiki/examples/net/chatd/Makefile 2007-08-21 08:33:49 UTC (rev 480) +++ tiki/examples/net/chatd/Makefile 2007-08-21 16:14:06 UTC (rev 481) @@ -4,10 +4,10 @@ OBJS = $(patsubst %.cpp,%.o,$(wildcard src/*.cpp)) all: $(OBJS) - $(CXX) $(LDFLAGS) -L$(TIKI_DIR)$(TIKI_PLAT) -L$(TIKI_DIR)$(TIKI_PLAT)/lib $(OBJS) $(TIKI_BASE_LIBS) -o basic + $(CXX) $(LDFLAGS) -L$(TIKI_DIR)$(TIKI_PLAT) -L$(TIKI_DIR)$(TIKI_PLAT)/lib $(OBJS) $(TIKI_BASE_LIBS) -o chatd clean: - -rm -f $(OBJS) basic + -rm -f $(OBJS) chatd DEPSDIR=$(CURDIR) include $(TIKI_DIR)$(TIKI_PLAT)/Makefile.rules Modified: tiki/examples/net/chatd/src/main.cpp =================================================================== --- tiki/examples/net/chatd/src/main.cpp 2007-08-21 08:33:49 UTC (rev 480) +++ tiki/examples/net/chatd/src/main.cpp 2007-08-21 16:14:06 UTC (rev 481) @@ -72,24 +72,23 @@ { socket->send(line); } - else + else if(line->getUsedDataLen() < 0) { + Tiki::Debug::printf("socket error, closing connection\n"); socket->close(); return NULL; } if(line->getData()[0] == '/') { uint8 *data = line->getData(); - data[line->getUsedDataLen() - 1] = '\0'; - data[line->getUsedDataLen() - 2] = '\0'; string cmd = ""; - for(int i = 1; i < line->getUsedDataLen() - 2; i++) + for(int i = 0; i < line->getUsedDataLen(); i++) { cmd.push_back(data[i]); } Tiki::Debug::printf("cmd: %s\n", cmd.c_str()); - std::map<std::string, void (*)( TCPSocket * )>::const_iterator i = - g_commandHandlers.find( cmd ); + std::map<std::string, void (*)( TCPSocket * )>::const_iterator i = + g_commandHandlers.find( cmd ); if( i != g_commandHandlers.end() ){ i->second(socket); } @@ -101,6 +100,9 @@ } } } + Tiki::Debug::printf("isOpen: %s\n", socket->isOpen() ? "true" : "false"); + Tiki::Debug::printf("quitting: %s\n", quitting ? "true" : "false"); + Tiki::Debug::printf("Closing connection from: %s\n", socket->getPeerAddress()->getIPAddressString().c_str()); socket->close(); @@ -108,6 +110,7 @@ } extern "C" int tiki_main( int argc, char **argv) { + Tiki::init(argc, argv); Tiki::Net::init(); Hid::callbackReg( tkCallback, NULL ); Modified: tiki/include/Tiki/net/tcpsocket.h =================================================================== --- tiki/include/Tiki/net/tcpsocket.h 2007-08-21 08:33:49 UTC (rev 480) +++ tiki/include/Tiki/net/tcpsocket.h 2007-08-21 16:14:06 UTC (rev 481) @@ -35,7 +35,7 @@ #if TIKI_PLAT == TIKI_WIN32 TCPSocket(RefPtr<Address> address, SOCKET socket) : Socket(address), m_socket(socket), m_open(true) {setNonBlocking(false);}; #else - TCPSocket(RefPtr<Address> address, int socket) : Socket(address), m_socket(socket) {setNonBlocking(false);}; + TCPSocket(RefPtr<Address> address, int socket) : Socket(address), m_socket(socket), m_open(true) {setNonBlocking(false);}; #endif virtual void send(RefPtr<Buffer> data); Modified: tiki/sdl/src/platnet.cpp =================================================================== --- tiki/sdl/src/platnet.cpp 2007-08-21 08:33:49 UTC (rev 480) +++ tiki/sdl/src/platnet.cpp 2007-08-21 16:14:06 UTC (rev 481) @@ -7,7 +7,7 @@ */ #include "Tiki/tiki.h" -#include "Tiki/net/net.h" +#include "Tiki/net.h" namespace Tiki { Modified: tiki/src/net/tcpserversocket.cpp =================================================================== --- tiki/src/net/tcpserversocket.cpp 2007-08-21 08:33:49 UTC (rev 480) +++ tiki/src/net/tcpserversocket.cpp 2007-08-21 16:14:06 UTC (rev 481) @@ -1,28 +1,28 @@ -/* - Tiki - - tcpserversocket.cpp - - Copyright (C)2007 Atani Software -*/ - -#include "pch.h" -#include "Tiki/tiki.h" -#include "Tiki/net.h" - -namespace Tiki { - -namespace Net { - -namespace TCP { - -void TCPServerSocket::bind(size_t maxwaiting) -{ - struct sockaddr_in sock_addr; - - memset(&sock_addr, 0, sizeof(sock_addr)); - sock_addr.sin_family = AF_INET; - sock_addr.sin_addr.s_addr = INADDR_ANY; +/* + Tiki + + tcpserversocket.cpp + + Copyright (C)2007 Atani Software +*/ + +#include "pch.h" +#include "Tiki/tiki.h" +#include "Tiki/net.h" + +namespace Tiki { + +namespace Net { + +namespace TCP { + +void TCPServerSocket::bind(size_t maxwaiting) +{ + struct sockaddr_in sock_addr; + + memset(&sock_addr, 0, sizeof(sock_addr)); + sock_addr.sin_family = AF_INET; + sock_addr.sin_addr.s_addr = INADDR_ANY; sock_addr.sin_port = htons(getPort()); if(isNonBlocking()) { @@ -34,44 +34,48 @@ fcntl(m_socket, F_SETFL, O_NONBLOCK); #endif } - - - /* Bind the socket for listening */ - if ( ::bind(m_socket, (struct sockaddr *)&sock_addr, - sizeof(sock_addr)) == SOCKET_ERROR ) { - Tiki::Debug::printf("Couldn't bind to local port\n"); - close(); - return; - } - if ( listen(m_socket, (int)maxwaiting) == SOCKET_ERROR ) { - Tiki::Debug::printf("Couldn't listen to local port\n"); - close(); - return; - } -} - -RefPtr<TCPSocket> TCPServerSocket::accept() -{ - struct sockaddr_in sock_addr; -#if TIKI_PLAT == TIKI_WIN32 - SOCKET socket; -#else - int socket; -#endif - - size_t addrlen = sizeof(struct sockaddr_in); - socket = ::accept(m_socket, (sockaddr *)&sock_addr, (int *)&addrlen); - - if(socket != INVALID_SOCKET) { - RefPtr<Address> remote = new Address(); - remote->setIPAddress(sock_addr.sin_addr.s_addr); - return new TCPSocket(remote, socket); - } - return NULL; -} - -} // namespace TCP - -} // namespace Net - -} // namespace Tiki + + + /* Bind the socket for listening */ + if ( ::bind(m_socket, (struct sockaddr *)&sock_addr, + sizeof(sock_addr)) == SOCKET_ERROR ) { + Tiki::Debug::printf("Couldn't bind to local port\n"); + close(); + return; + } + if ( listen(m_socket, (int)maxwaiting) == SOCKET_ERROR ) { + Tiki::Debug::printf("Couldn't listen to local port\n"); + close(); + return; + } +} + +RefPtr<TCPSocket> TCPServerSocket::accept() +{ + struct sockaddr_in sock_addr; +#if TIKI_PLAT == TIKI_WIN32 + SOCKET socket; +#else + int socket; +#endif + + size_t addrlen = sizeof(struct sockaddr_in); +#if TIKI_PLAT == TIKI_SDL + socket = ::accept(m_socket, (sockaddr *)&sock_addr, (socklen_t *)&addrlen); +#else + socket = ::accept(m_socket, (sockaddr *)&sock_addr, (int *)&addrlen); +#endif + + if(socket != INVALID_SOCKET) { + RefPtr<Address> remote = new Address(); + remote->setIPAddress(sock_addr.sin_addr.s_addr); + return new TCPSocket(remote, socket); + } + return NULL; +} + +} // namespace TCP + +} // namespace Net + +} // namespace Tiki Modified: tiki/src/net/tcpsocket.cpp =================================================================== --- tiki/src/net/tcpsocket.cpp 2007-08-21 08:33:49 UTC (rev 480) +++ tiki/src/net/tcpsocket.cpp 2007-08-21 16:14:06 UTC (rev 481) @@ -31,11 +31,7 @@ dataLen -= len; data += len; } - else { - Tiki::Debug::printf("sent %d bytes\n", len); - } } while(dataLen > 0 && (len > 0 || errno == EINTR)); - Tiki::Debug::printf("errno: %d [%x]\n", errno, errno); } void TCPSocket::recv(RefPtr<Buffer> data) { @@ -43,7 +39,7 @@ memset(tmp, 0, data->getDataLen()); int recvlen = 0; errno = 0; - Tiki::Debug::printf("receiving %d bytes\n", data->getDataLen()); + //Tiki::Debug::printf("receiving %d bytes\n", data->getDataLen()); do { recvlen = ::recv(m_socket, (char *)tmp, (int)data->getDataLen(), 0); #if TIKI_PLAT == TIKI_WIN32 @@ -51,12 +47,12 @@ #else } while(errno == EINTR); #endif - Tiki::Debug::printf("received %d bytes\nerrno %d\n", recvlen, errno); if(recvlen > 0) { + //Tiki::Debug::printf("received %d bytes\nerrno %d\n", recvlen, errno); data->setData(tmp, recvlen); } - else - { + else if(recvlen < 0) { + Tiki::Debug::printf("socket error, closing socket"); close(); } @@ -122,19 +118,19 @@ { Tiki::Debug::printf("%sabling blocking\n", blocking ? "dis" : "en" ); Socket::setNonBlocking(blocking); -#if TIKI_PLAT == TIKI_WIN32 - unsigned long mode = (!blocking); - ioctlsocket(m_socket, FIONBIO, &mode); -#else - int flags = fcntl(m_socket, F_GETFL, 0); - if(!blocking) - { - fcntl(m_socket, F_SETFL, flags & ~O_NONBLOCK); - } - else - { - fcntl(m_socket, F_SETFL, flags & ~O_NONBLOCK); - } +#if TIKI_PLAT == TIKI_WIN32 + unsigned long mode = (!blocking); + ioctlsocket(m_socket, FIONBIO, &mode); +#else + int flags = fcntl(m_socket, F_GETFL, 0); + if(!blocking) + { + fcntl(m_socket, F_SETFL, flags & ~O_NONBLOCK); + } + else + { + fcntl(m_socket, F_SETFL, flags | O_NONBLOCK); + } #endif } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |