Add packaging for TIZEN
[platform/upstream/VK-GL-CTS.git] / execserver / xsTcpServer.hpp
1 #ifndef _XSTCPSERVER_HPP
2 #define _XSTCPSERVER_HPP
3 /*-------------------------------------------------------------------------
4  * drawElements Quality Program Execution Server
5  * ---------------------------------------------
6  *
7  * Copyright 2014 The Android Open Source Project
8  *
9  * Licensed under the Apache License, Version 2.0 (the "License");
10  * you may not use this file except in compliance with the License.
11  * You may obtain a copy of the License at
12  *
13  *      http://www.apache.org/licenses/LICENSE-2.0
14  *
15  * Unless required by applicable law or agreed to in writing, software
16  * distributed under the License is distributed on an "AS IS" BASIS,
17  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18  * See the License for the specific language governing permissions and
19  * limitations under the License.
20  *
21  *//*!
22  * \file
23  * \brief TCP Server.
24  *//*--------------------------------------------------------------------*/
25
26 #include "xsDefs.hpp"
27 #include "deSocket.hpp"
28 #include "deThread.hpp"
29 #include "deMutex.hpp"
30
31 #include <vector>
32
33 namespace xs
34 {
35
36 class ConnectionHandler;
37
38 class TcpServer
39 {
40 public:
41                                                                         TcpServer                               (deSocketFamily family, int port);
42         virtual                                                 ~TcpServer                              (void);
43
44         virtual ConnectionHandler*              createHandler                   (de::Socket* socket, const de::SocketAddress& clientAddress) = DE_NULL;
45
46         virtual void                                    runServer                               (void);
47         void                                                    stopServer                              (void);
48
49         virtual void                                    connectionDone                  (ConnectionHandler* handler);
50
51 protected:
52         de::Socket                                              m_socket;
53
54 private:
55                                                                         TcpServer                               (const TcpServer& other);
56         TcpServer&                                              operator=                               (const TcpServer& other);
57
58         void                                                    addLiveConnection               (ConnectionHandler* handler);
59         void                                                    deleteDoneConnections   (void);
60
61         de::Mutex                                               m_connectionListLock;
62         std::vector<ConnectionHandler*> m_liveConnections;
63         std::vector<ConnectionHandler*> m_doneConnections;
64 };
65
66 class ConnectionHandler : public de::Thread
67 {
68 public:
69                                                 ConnectionHandler               (TcpServer* server, de::Socket* socket) : m_server(server), m_socket(socket) {}
70         virtual                         ~ConnectionHandler              (void);
71
72         void                            run                                             (void);
73
74 protected:
75         virtual void            handle                                  (void) = DE_NULL;
76
77 protected:
78         TcpServer*                      m_server;
79         de::Socket*                     m_socket;
80 };
81
82 } // xs
83
84 #endif // _XSTCPSERVER_HPP