Created
September 24, 2011 08:01
-
-
Save r2p2/1239094 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class AbstractSocket | |
{ | |
public: | |
AbstractSocket() | |
:m_i(0) | |
{ | |
} | |
virtual void connect_to_host() | |
{ | |
} | |
virtual void listen_on_socket(int i) | |
{ | |
m_i = i; | |
} | |
int m_i; | |
}; | |
class AbstractSocketClient : private AbstractSocket | |
{ | |
public: | |
AbstractSocketClient() | |
:AbstractSocket() | |
{ | |
} | |
virtual void listen_on_socket(int i) | |
{ | |
AbstractSocket::listen_on_socket(i); | |
} | |
private: | |
// void connect_to_host(); // nicht für client sockets!!! braucht nicht | |
// private gesetzt werden, da ASC privat von AS erbt | |
}; | |
class TcpSocket : AbstractSocket | |
{ | |
public: | |
TcpSocket() | |
:AbstractSocket() | |
{ | |
} | |
}; | |
class TcpSocketClient : public AbstractSocketClient, public TcpSocket | |
{ | |
public: | |
TcpSocketClient() | |
: AbstractSocketClient() | |
, TcpSocket() | |
{ | |
} | |
}; | |
/* | |
Ziel ist die Erstellung einer ServerSocket-Klasse, welche, wenn sich Clients mit dem Server | |
verbinden, ClientSocket-Klassen start. Was für ein Client-Socket benötigt wird, wird über | |
ein Template festgelegt. | |
Der Endanwender muss von TcpSocketClient erben und seine Aktion auf eingehende Nachrichten | |
implementieren. Um sicher zu stellen, dass nicht irgendetwas als Template übergeben wird, | |
wollte ich Polymorphie mit Templates verheiraten. Da man ja leider keine Referenzen auf | |
Klassennamen erzeugen kann. | |
Würde man ohne Template arbeiten wollen, müsste man zusätzlich noch von ServerSocket erben | |
und den gewünschten ClientSocket selbst erzeugen. | |
ServerSocket<TimeServerClient> timeserver; | |
timeserver.listen(1409); | |
*/ | |
template<class ClientSocketType> | |
class ServerSocket | |
{ | |
public: | |
ServerSocket() | |
{ | |
} | |
void new_asc() | |
{ | |
m_asc = new ClientSocketType(); | |
} | |
// nur für den test | |
AbstractSocketClient* getASC() | |
{ | |
return m_asc; | |
} | |
AbstractSocketClient *m_asc; | |
}; | |
int main() | |
{ | |
ServerSocket<TcpSocketClient> ss; | |
ss.new_asc(); | |
//ss.getASC()->connect_to_host(); funktioniert nicht (gewünscht!) | |
ss.getASC()->listen_on_socket(1234); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment