00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 #ifndef MDWTCPSERVER_H
00021 #define MDWTCPSERVER_H
00022 #include <vector>
00023 
00024 #include "ObjectPool.h"
00025 #include "Stream.h"
00026 #include "StreamServerApi.h"
00027 
00028 namespace mdw
00029 {
00033 class TcpServer : public StreamServer
00034 {
00035 public:
00036     TcpServer (short port);
00037     TcpServer (short port, ObjectPool<std::vector<char> > &pool);
00038 
00039     virtual void accept (StreamServerVisitor &visitor, int timeOutSec, int timeOutMicro);
00040     virtual void write (const char * buffer, int size, int streamId);
00041     virtual Stream &outStream (int streamId);
00042     virtual void close (int sockedId);
00043 
00044     ~TcpServer();
00045 private:
00046     int _servSock;
00047     int _maxSelectFd;
00048     void init (short port);
00049 
00050 class TcpStream : public Stream
00051     {
00052     public:
00053         void reset (TcpServer &t, int streamId);
00054         virtual void output (const char *buffer, int size);
00055     private:
00056         TcpServer *_t;
00057         int _id;
00058     };
00059 
00060     struct TcpSoc
00061     {
00062         TcpStream stream;
00063         StreamInfo info;
00064         bool connected;
00065     };
00066 
00067     std::vector<TcpSoc> _connectedSocket;
00068     ObjectPool<std::vector<char> > *_pool;
00069 };
00070 
00071 }
00072 
00073 #endif