From 0515a080183ba3a36652e5aca73b1ecb1b63117c Mon Sep 17 00:00:00 2001 From: haller Date: Sat, 3 Dec 2005 23:55:02 +0000 Subject: * Codage des Grosses String (compile mais pas debuggué) --- i/simulotron/src/gs/gs_transmitter.cc | 66 +++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 i/simulotron/src/gs/gs_transmitter.cc (limited to 'i/simulotron/src/gs/gs_transmitter.cc') diff --git a/i/simulotron/src/gs/gs_transmitter.cc b/i/simulotron/src/gs/gs_transmitter.cc new file mode 100644 index 0000000..a72f812 --- /dev/null +++ b/i/simulotron/src/gs/gs_transmitter.cc @@ -0,0 +1,66 @@ +/* gs_transmitter.cc - Classe de transmission des grosses string */ +/* Simulotron - Programme de simulation de robot {{{ + * + * Copyright (C) 2005 Nicolas Haller + * + * Robot APB Team/Efrei 2005. + * Web: http://assos.efrei.fr/robot/ + * Email: robot AT efrei DOT fr + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * }}} */ + +#include "gs/gs_transmitter.hh" +#include "gs/gs_message.hh" +#include "socket/socket_client.hh" + +GSTransmitter::GSTransmitter(SocketClient & socket) + :socket_(socket) +{ +} + +/// Renvoie 0 quand un message est récupéré, -1 sinon +int +GSTransmitter::getGS(GSMessage & gsm) +{ + unsigned int size = 0; + std::string strRead (socket_.read ()); + strBrut_ += strRead; + size = static_cast (strRead[0]) << 24 + | static_cast (strRead[1]) << 16 + | static_cast (strRead[2]) << 8 + | static_cast (strRead[3]); + if(size > strBrut_.size() - 4) + return -1; + strRead = strBrut_.substr (4, size -1); + strBrut_.erase (4, size - 1); + gsm.writeGS (strRead.c_str (), size); + return 0; +} + +void +GSTransmitter::putGS(const GSMessage & gsm) +{ + std::string gs(gsm.getGS ()); + char bsize[4]; + int size = gs.size(); + bsize[0] = static_cast (size >> 24); + bsize[1] = static_cast (size >> 16); + bsize[2] = static_cast (size >> 8); + bsize[3] = static_cast (size); + gs.insert(0, bsize); + socket_.write (gsm.getGS ()); +} -- cgit v1.2.3