|
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.
|