1 // ==============================================================
2 //	This file is part of Glest (www.glest.org)
3 //
4 //	Copyright (C) 2001-2008 Marti�o Figueroa
5 //
6 //	You can redistribute this code and/or modify it under
7 //	the terms of the GNU General Public License as published
8 //	by the Free Software Foundation; either version 2 of the
9 //	License, or (at your option) any later version
10 // ==============================================================
11 
12 #include "network_interface.h"
13 
14 #include <exception>
15 #include <cassert>
16 
17 #include "types.h"
18 #include "conversion.h"
19 #include "platform_util.h"
20 
21 #include "leak_dumper.h"
22 
23 using namespace Shared::Platform;
24 using namespace Shared::Util;
25 using namespace std;
26 
27 namespace Glest{ namespace Game{
28 
29 // =====================================================
30 //	class NetworkInterface
31 // =====================================================
32 
33 const int NetworkInterface::readyWaitTimeout= 60000;	//1 minute
34 
35 
sendMessage(const NetworkMessage * networkMessage)36 void NetworkInterface::sendMessage(const NetworkMessage* networkMessage){
37 	Socket* socket= getSocket();
38 
39 	networkMessage->send(socket);
40 }
41 
getNextMessageType()42 NetworkMessageType NetworkInterface::getNextMessageType(){
43 	Socket* socket= getSocket();
44 	int8 messageType= nmtInvalid;
45 
46 	//peek message type
47 	if(socket->getDataToRead()>=sizeof(messageType)){
48 		socket->peek(&messageType, sizeof(messageType));
49 	}
50 
51 	//sanity check new message type
52 	if(messageType<0 || messageType>=nmtCount){
53 		throw runtime_error("Invalid message type: " + intToStr(messageType));
54 	}
55 
56 	return static_cast<NetworkMessageType>(messageType);
57 }
58 
receiveMessage(NetworkMessage * networkMessage)59 bool NetworkInterface::receiveMessage(NetworkMessage* networkMessage){
60 	Socket* socket= getSocket();
61 
62 	return networkMessage->receive(socket);
63 }
64 
isConnected()65 bool NetworkInterface::isConnected(){
66 	return getSocket()!=NULL && getSocket()->isConnected();
67 }
68 
69 // =====================================================
70 //	class GameNetworkInterface
71 // =====================================================
72 
GameNetworkInterface()73 GameNetworkInterface::GameNetworkInterface(){
74 	quit= false;
75 }
76 
77 }}//end namespace
78