00001 00002 #ifdef WIN32 00003 #pragma warning (disable:4786) 00004 #endif 00005 00006 #include "browse_master_generic.h" 00007 #include "API/Core/System/event_listener.h" 00008 00010 // CL_BrowseMaster_Generic construction: 00011 00012 CL_BrowseMaster_Generic::CL_BrowseMaster_Generic(const CL_IPAddress &bind_address) 00013 : accept_socket(CL_Socket::tcp) 00014 { 00015 accept_socket.bind(bind_address); 00016 accept_socket.listen(5); 00017 } 00018 00019 CL_BrowseMaster_Generic::~CL_BrowseMaster_Generic() 00020 { 00021 } 00022 00024 // CL_BrowseMaster_Generic attributes: 00025 00027 // CL_BrowseMaster_Generic operations: 00028 00029 void CL_BrowseMaster_Generic::run() 00030 { 00031 while (true) 00032 { 00033 wait_for_data(); 00034 00035 // todo: accept, read and write! 00036 } 00037 } 00038 00040 // CL_BrowseMaster_Generic implementation: 00041 00042 void CL_BrowseMaster_Generic::wait_for_data() 00043 { 00044 std::list<CL_Socket>::iterator it; 00045 CL_EventListener listener; 00046 00047 // listen for incoming servers and clients. 00048 listener.add_trigger(accept_socket.get_read_trigger()); 00049 00050 // listen for client output data: 00051 for (it = clients.begin(); it != clients.end(); it++) 00052 { 00053 CL_Socket &socket = *it; 00054 listener.add_trigger(socket.get_write_trigger()); 00055 } 00056 00057 // listen for server input data. 00058 for (it = servers.begin(); it != servers.end(); it++) 00059 { 00060 CL_Socket &socket = *it; 00061 listener.add_trigger(socket.get_read_trigger()); 00062 } 00063 00064 listener.wait(); 00065 }
1.2.6 written by Dimitri van Heesch,
© 1997-2001