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