00001 /* -*- mode: c++; c-basic-offset: 4; indent-tabs-mode: nil -*- 00002 00003 this file is part of rcssserver3D 00004 Fri May 9 2003 00005 Copyright (C) 2002,2003 Koblenz University 00006 Copyright (C) 2003 RoboCup Soccer Server 3D Maintenance Group 00007 $Id: netclient.h,v 1.2 2004/12/31 11:25:05 rollmark Exp $ 00008 00009 This program is free software; you can redistribute it and/or modify 00010 it under the terms of the GNU General Public License as published by 00011 the Free Software Foundation; version 2 of the License. 00012 00013 This program is distributed in the hope that it will be useful, 00014 but WITHOUT ANY WARRANTY; without even the implied warranty of 00015 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00016 GNU General Public License for more details. 00017 00018 You should have received a copy of the GNU General Public License 00019 along with this program; if not, write to the Free Software 00020 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 00021 */ 00022 #ifndef SPARK_NETCLIENT_H 00023 #define SPARK_NETCLIENT_H 00024 00025 #include <zeitgeist/class.h> 00026 #include <oxygen/simulationserver/simcontrolnode.h> 00027 #include <oxygen/simulationserver/netcontrol.h> 00028 #include <oxygen/simulationserver/netmessage.h> 00029 #include <oxygen/simulationserver/netbuffer.h> 00030 #include <rcssnet/tcpsocket.hpp> 00031 #include <rcssnet/socketstreambuf.hpp> 00032 00033 namespace oxygen 00034 { 00035 00036 class NetClient : public oxygen::SimControlNode 00037 { 00038 public: 00039 NetClient(); 00040 virtual ~NetClient(); 00041 00043 void SetServer(const std::string& host); 00044 00046 const std::string& GetServer() const; 00047 00049 void SetPort(int port); 00050 00052 int GetPort() const; 00053 00055 void SetClientType(oxygen::NetControl::ESocketType type); 00056 00058 oxygen::NetControl::ESocketType GetClientType(); 00059 00062 void SendMessage(const std::string& msg); 00063 00064 protected: 00066 bool Connect(); 00067 00071 void ReadFragments(); 00072 00074 void CloseConnection(); 00075 00077 void ParseMessage(const std::string& msg); 00078 00079 protected: 00081 std::string mHost; 00082 00084 int mPort; 00085 00087 oxygen::NetControl::ESocketType mType; 00088 00090 boost::shared_ptr<rcss::net::Socket> mSocket; 00091 00093 boost::shared_ptr<oxygen::NetBuffer> mNetBuffer; 00094 00096 boost::shared_ptr<oxygen::NetMessage> mNetMessage; 00097 00099 int mBufferSize; 00100 00102 boost::shared_array<char> mBuffer; 00103 }; 00104 00105 DECLARE_CLASS(NetClient); 00106 00107 } // namespace oxygen 00108 00109 #endif // NETCLIENT_H