[Ante-cvs] SF.net SVN: ante: [488] trunk/ant/newcore
Brought to you by:
roguestar191
|
From: <rog...@us...> - 2007-02-08 22:30:37
|
Revision: 488
http://svn.sourceforge.net/ante/?rev=488&view=rev
Author: roguestar191
Date: 2007-02-08 14:30:37 -0800 (Thu, 08 Feb 2007)
Log Message:
-----------
Added preliminary udp support to newcore
Modified Paths:
--------------
trunk/ant/newcore/servercore/core.cpp
trunk/ant/newcore/sockets/socket.h
trunk/ant/newcore/sockets/sockets.cpp
Modified: trunk/ant/newcore/servercore/core.cpp
===================================================================
--- trunk/ant/newcore/servercore/core.cpp 2007-01-25 10:19:15 UTC (rev 487)
+++ trunk/ant/newcore/servercore/core.cpp 2007-02-08 22:30:37 UTC (rev 488)
@@ -2,19 +2,20 @@
#include <string>
#include <vector>
#include <iostream>
+#include <arpa/inet.h>
void outputAll(std::string output, Socket_Handler&socks) {
std::vector<Sock_Holder>::iterator iter = socks.sockets.begin(), end = socks.sockets.end();
while(iter!=end) {
- std::cout << "Writing: " << (*(iter)).socket << " " << output.size() << " "<< output ;
- write((*(iter)).socket,output.c_str(), output.size());
+ std::cout << "Writing: " << inet_ntoa( (*(struct sockaddr_in*)&(*(iter)).socket).sin_addr) << " " << output.size() << " "<< output ;
+ sendto(socks.ssd ,output.c_str(), output.size(),0, &(*(iter)).socket, sizeof(struct sockaddr));
iter++;
}
}
int main() {
- Socket_Handler s ("9393"); // binds the port, set by the global value char *DEFAULT_SERVER_PORT
+ Socket_Handler s ("4420"); // binds the port, set by the global value char *DEFAULT_SERVER_PORT
// s short for server
while(1) {
std::vector<Packet_>*o = s.Listen();
Modified: trunk/ant/newcore/sockets/socket.h
===================================================================
--- trunk/ant/newcore/sockets/socket.h 2007-01-25 10:19:15 UTC (rev 487)
+++ trunk/ant/newcore/sockets/socket.h 2007-02-08 22:30:37 UTC (rev 488)
@@ -9,8 +9,8 @@
class Sock_Holder
{
public:
- Sock_Holder(int);
- int socket;
+ Sock_Holder(struct sockaddr);
+ struct sockaddr socket;
bool playerOrFCGI;
void *ptr;
};
Modified: trunk/ant/newcore/sockets/sockets.cpp
===================================================================
--- trunk/ant/newcore/sockets/sockets.cpp 2007-01-25 10:19:15 UTC (rev 487)
+++ trunk/ant/newcore/sockets/sockets.cpp 2007-02-08 22:30:37 UTC (rev 488)
@@ -30,9 +30,9 @@
{
port = p;
sa.sin_family = AF_INET;
- sa.sin_addr.s_addr = INADDR_ANY;
sa.sin_port = htons((u_short) atoi(port) );
- if ((ssd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)
+ sa.sin_addr.s_addr = INADDR_ANY;
+ if ((ssd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
ERROR ("socket");
int opt = 1;
// {{{ set some options on the server socket
@@ -56,27 +56,45 @@
exit(0);
ERROR ("bind");
}
- listen(ssd,5);
-};
+// listen(ssd,5);
+}
Socket_Handler::~Socket_Handler() {
- std::vector<Sock_Holder>::iterator iter = sockets.begin(), end = sockets.end();
- for(;iter!=end;iter++) close((*(iter)).socket);
+ close(ssd);
}
int maxfd = 0;
+void* sockets_contains(std::vector<Sock_Holder>&s, Sock_Holder&l) {
+ std::vector<Sock_Holder>::iterator iter = s.begin(), end = s.end();
+ while(iter !=end) if( memcmp( &(*(iter)).socket, &l, sizeof(struct sockaddr) ) == 0) return &(*(iter));
+ return NULL;
+}
+#define MAXBUFLEN 100
std::vector<Packet_>* Socket_Handler::Listen()
{
- FD_ZERO(&mask);
- std::vector<Sock_Holder>::iterator iter =sockets.begin();
- for(;iter != sockets.end();iter++){
- FD_SET((*iter).socket, &mask);
- if(maxfd < (*(iter)).socket) { maxfd = (*(iter)).socket;}
-
- }
- FD_SET(ssd, &mask);
- if(maxfd < ssd) maxfd = ssd;
- int numfound = select(maxfd+1,&mask,NULL, NULL, NULL);
- if(numfound == 0) return NULL;
+// FD_ZERO(&mask);
+// std::vector<Sock_Holder>::iterator iter =sockets.begin();
+// for(;iter != sockets.end();iter++){
+// FD_SET((*iter).socket, &mask);
+// if(maxfd < (*(iter)).socket) { maxfd = (*(iter)).socket;}
+//
+// }
+// FD_SET(ssd, &mask);
+// if(maxfd < ssd) maxfd = ssd;
+ struct sockaddr_in their_addr;
+ socklen_t addr_len = sizeof(struct sockaddr);
+ char buf[MAXBUFLEN];
+ memset(buf, 0, MAXBUFLEN-1);
+ int numread = recvfrom(ssd,buf, MAXBUFLEN-1, 0,(struct sockaddr*)&their_addr, &addr_len);
+
+ if(numread == 0) return NULL;
std::vector<Packet_>*ret = new std::vector<Packet_>;
+ Packet_ apack;
+ Sock_Holder s( *(struct sockaddr*)&their_addr);
+ void *ptr;
+ if(!(ptr = sockets_contains(sockets, s)) ) { sockets.push_back(s); ptr= &sockets[sockets.size()-1]; };
+ apack.socket = (Sock_Holder*) ptr;
+ return ret;
+};
+/*
int newsocket = 0;
if(FD_ISSET(ssd, &mask)) {
struct sockaddr_in caller;
@@ -112,8 +130,8 @@
}
return ret; // for now
}
-
-Sock_Holder::Sock_Holder(int sock)
+*/
+Sock_Holder::Sock_Holder(struct sockaddr sock)
{
socket = sock;
ptr = NULL;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|