Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/script/src/network/Client.cc @ 999

Last change on this file since 999 was 913, checked in by scheusso, 17 years ago

another dead bug

File size: 5.4 KB
Line 
1/*
2*   ORXONOX - the hottest 3D action shooter ever to exist
3*
4*
5*   License notice:
6*
7*   This program is free software; you can redistribute it and/or
8*   modify it under the terms of the GNU General Public License
9*   as published by the Free Software Foundation; either version 2
10*   of the License, or (at your option) any later version.
11*
12*   This program is distributed in the hope that it will be useful,
13*   but WITHOUT ANY WARRANTY; without even the implied warranty of
14*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15*   GNU General Public License for more details.
16*
17*   You should have received a copy of the GNU General Public License
18*   along with this program; if not, write to the Free Software
19*   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
20*
21*   Author:
22*      Oliver Scheuss, (C) 2007
23*   Co-authors:
24*      ...
25*
26*/
27
28//
29// C++ Implementation: Client
30//
31// Description:
32//
33//
34// Author:  Oliver Scheuss, (C) 2007
35//
36// Copyright: See COPYING file that comes with this distribution
37//
38//
39
40#include "core/CoreIncludes.h"
41#include "Client.h"
42
43namespace network
44{
45  /**
46  * Constructor for the Client class
47  * initializes the address and the port to default localhost:NETWORK_PORT
48  */
49  Client::Client(): client_connection(NETWORK_PORT,"127.0.0.1"){
50    // set server address to localhost
51    isConnected=false;
52  }
53
54  /**
55  * Constructor for the Client class
56  * @param address the server address
57  * @param port port of the application on the server
58  */
59  Client::Client(std::string address, int port) : client_connection(port, address){
60    isConnected=false;
61  }
62
63  /**
64  * Constructor for the Client class
65  * @param address the server address
66  * @param port port of the application on the server
67  */
68  Client::Client(const char *address, int port) : client_connection(port, address){
69    isConnected=false;
70  }
71
72  /**
73  * Establish the Connection to the Server
74  * @return true/false
75  */
76  bool Client::establishConnection(){
77    isConnected=client_connection.createConnection();
78    return isConnected;
79  }
80
81  /**
82  * closes the Connection to the Server
83  * @return true/false
84  */
85  bool Client::closeConnection(){
86    isConnected=false;
87    return client_connection.closeConnection();
88  }
89
90  /**
91  * submits a MouseAction to the server
92  * @param x x Coordinate
93  * @param y y Coordinate
94  * @return true/false
95  */
96  bool Client::sendMouse(double x, double y){
97    // generate packet and add it to the queue
98    if(!isConnected)
99      return false;
100    if(!client_connection.addPacket(pck_gen.mousem(x, y)))
101      return false;
102    // send packets
103    return client_connection.sendPackets();
104  }
105
106  /**
107  * submits a Keystrike to the server
108  * @param key_code code to submit
109  * @return true/false
110  */
111  bool Client::sendKeyboard(char key_code){
112    // generate packet and add it to queue
113    if(!isConnected)
114      return false;
115    if(!client_connection.addPacket(pck_gen.keystrike(key_code)))
116      return false;
117    // send packets
118    return client_connection.sendPackets();
119  }
120
121  /**
122  * submits a chat message to the server
123  * @param message message to send
124  * @return true/false
125  */
126  bool Client::sendChat( std::string message ){
127    // generate packet and add it to queue
128    if(!isConnected)
129      return false;
130    if(client_connection.addPacket(pck_gen.chatMessage( message.c_str() )))
131      return client_connection.sendPackets();
132    // send packets
133    return false;
134  }
135
136  /**
137  * Adds a MouseAction to the PacketQueue
138  * @param x x Coordinate
139  * @param y y Coordinate
140  * @return true/false
141  */
142  bool Client::addMouse(double x, double y){
143    // generate packet and add it to the queue
144    if(client_connection.addPacket(pck_gen.mousem(x, y)))
145      return true;
146    else
147      return false;
148  }
149
150  /**
151  * Adds a Keystrike to the PacketQueue
152  * @param key_code
153  * @return true/false
154  */
155  bool Client::addKeyboard(char key_code){
156    // generate packet and add it to queue
157    if(client_connection.addPacket(pck_gen.keystrike(key_code)))
158      return true;
159    else
160      return false;
161  }
162
163  /**
164  * Sends out all the packets queued by addXXX
165  */
166  bool Client::sendPackets(){
167    if(!isConnected)
168      return false;
169    ENetEvent event;
170    // send packets
171    client_connection.sendPackets(&event);
172    if(event.type==ENET_EVENT_TYPE_NONE)
173      return true;
174    else
175      return false;
176  }
177
178  /**
179  * Performs a GameState update
180  */
181  void Client::tick(float time){
182    ENetPacket *packet;
183    // stop if the packet queue is empty
184    while(!(client_connection.queueEmpty())){
185      packet = client_connection.getPacket();
186      COUT(5) << "tick packet size " << packet->dataLength << std::endl;
187      elaborate(packet, 0); // ================= i guess we got to change this .... (client_ID is always same = server)
188    }
189    return;
190  }
191
192  void Client::processGamestate( GameStateCompressed *data){
193    int id = data->id;
194    COUT(5) << "received gamestate id: " << data->id << std::endl;
195    gamestate.pushGameState(data);
196    client_connection.addPacket(pck_gen.acknowledgement(id));
197    client_connection.sendPackets();
198    return;
199  }
200
201  void Client::processClassid(classid *clid){
202    orxonox::Identifier *id;
203    id=ID(std::string(clid->message));
204    if(id!=NULL)
205      id->setNetworkID(clid->clid);
206    COUT(4) << "received and set network id: " << clid->clid << "; classname: " << clid->message << std::endl;
207    return;
208  }
209
210  void Client::processChat( chat *data){
211    COUT(0) << "Server: " << data->message << std::endl;
212  }
213
214}
Note: See TracBrowser for help on using the repository browser.