Changeset 777 for code/branches/FICN/src/network/PacketGenerator.cc
- Timestamp:
- Dec 31, 2007, 7:40:23 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/FICN/src/network/PacketGenerator.cc
r636 r777 1 1 /* 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 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 * Dumeni Manatschal, (C) 2007 23 * Co-authors: 24 * ... 25 * 26 */ 27 27 28 28 /* 29 *Class generates packets that can be send by enet30 31 32 33 29 * Class generates packets that can be send by enet 30 * ->don't read this without the class PacketDecoder, since they belong together 31 * 32 * Autor: Dumeni Manatschal 33 * 34 34 */ 35 35 36 #include "PacketManager.h"37 #include <enet/enet.h>38 36 #include <iostream> 39 37 #include <list> … … 41 39 #include <cstring> 42 40 43 using namespace network; 41 #include "PacketTypes.h" 42 #include "PacketManager.h" 44 43 45 PacketGenerator::PacketGenerator() {} 44 namespace network 45 { 46 PacketGenerator::PacketGenerator() { } 46 47 47 //following functions create a packet in form of bytestream48 //following functions create a packet in form of bytestream 48 49 49 ENetPacket* PacketGenerator::acknowledgement( int state, int reliable )50 {50 ENetPacket* PacketGenerator::acknowledgement( int state, int reliable ) 51 { 51 52 std::cout << "generating new acknowledgement, id: " << state << std::endl; 52 53 54 53 ack* ackreq = new ack; 54 ackreq->id = ACK; 55 ackreq->a = state; 55 56 56 57 ENetPacket *packet = enet_packet_create( ackreq , sizeof( *ackreq ), reliable ); 57 58 58 return packet; 59 return packet; 60 } 61 62 /*### mouseupdates */ 63 ENetPacket* PacketGenerator::mousem( double x, double y, int reliable ) 64 { 65 std::cout << "generating new mouse" << std::endl; 66 mouse* mousemove = new mouse; 67 mousemove->id = MOUSE; 68 mousemove->x = x; 69 mousemove->y = y; 70 71 ENetPacket *packet = enet_packet_create( mousemove , sizeof( *mousemove ), reliable ); 72 73 return packet; 74 } 75 76 /*### keystrikes updates */ 77 ENetPacket* PacketGenerator::keystrike( char press, int reliable ) 78 { 79 std::cout << "generating new keyboard" << std::endl; 80 keyboard* key = new keyboard; 81 key->id = KEYBOARD; 82 key->press = press; 83 84 ENetPacket *packet = enet_packet_create( key , sizeof( *key ), reliable ); 85 86 return packet; 87 } 88 89 /*### chat messages packet */ 90 ENetPacket* PacketGenerator::chatMessage( const char* message, int reliable ) 91 { 92 int* trans = new int[sizeof(int) + strlen(message) + 1]; 93 *trans = CHAT; 94 //be carefull here, don't forget to allocate the space before using it ;-) 95 memcpy( &trans[1], (const void*)message, strlen( message ) + 1); 96 ENetPacket *packet = enet_packet_create( trans , sizeof( int ) + strlen( message ) + 1, reliable ); 97 98 return packet; 99 } 100 101 /*### gamestate packet */ 102 ENetPacket* PacketGenerator::gstate( GameStateCompressed* states, int reliable ) 103 { 104 //std::cout << "packetgenerator" << std::endl; 105 //std::cout << "states->normsize " << states->normsize << std::endl; 106 //std::cout << "states->compsize " << states->compsize << std::endl; 107 int gid = GAMESTATE; //first assign the correct enet id 108 int totalLen = 4*sizeof( int ) + sizeof(bool) + states->compsize; //calculate the total size of the datastream memory 109 //std::cout << "totalLen " << totalLen << std::endl; 110 unsigned char *data = (unsigned char*)malloc( totalLen ); //allocate the memory for datastream 111 memcpy( (void*)(data), (const void*)&gid, sizeof( int ) ); //this is the enet id 112 memcpy( (void*)(data+sizeof(int)), (const void*)&(states->id), sizeof(int) ); //the GameStateCompressed id 113 memcpy( (void*)(data+2*sizeof(int)), (const void*)&(states->compsize), sizeof(int)); 114 memcpy( (void*)(data+3*sizeof(int)), (const void*)&(states->normsize), sizeof(int)); 115 memcpy( (void*)(data+4*sizeof(int)), (const void*)&(states->diffed), sizeof(bool)); 116 /*(int)*(data) = gid; 117 (int)*(data+sizeof(int)) = states->id; 118 //this is the compressed size of the GameStateCompressed data, place at 3th position of the enet datastream 119 (int)*(data+2*sizeof(int)) = states->compsize; 120 //this is the uncompressed size of GameStateCompressed data 121 (int)*(data+3*sizeof(int)) = states->normsize; 122 //since there is a new parameter inside GameStateCompressed, change this function to create packet 123 (bool)*(data+4*sizeof(int)) = states->diffed;*/ 124 //place the GameStateCompressed data at the end of the enet datastream 125 memcpy( (void*)(data+4*sizeof( int ) + sizeof(bool)), (const void*)states->data, states->compsize ); 126 //create an enet packet with the generated bytestream 127 ENetPacket *packet = enet_packet_create( data , totalLen, reliable ); 128 //delete data; 129 return packet; 130 } 131 132 ENetPacket* PacketGenerator::clid( int classid, std::string classname, int reliable ) 133 { 134 unsigned char* data = (unsigned char *)malloc(3*sizeof(int)+classname.length()+1); 135 std::cout << "classid: " << classid << ", name: " << classname << std::endl; 136 *(int *)data = CLASSID; 137 *((int *)data+1) = classname.length()+1; 138 *((int *)data+2) = classid; 139 memcpy( (void *)(data+3*sizeof(int)), classname.c_str(), classname.length()+1); 140 ENetPacket *packet = enet_packet_create( data , 3*sizeof(int)+classname.length()+1, reliable ); 141 return packet; 142 } 143 59 144 } 60 /*### mouseupdates */61 ENetPacket* PacketGenerator::mousem( double x, double y, int reliable )62 {63 std::cout << "generating new mouse" << std::endl;64 mouse* mousemove = new mouse;65 mousemove->id = MOUSE;66 mousemove->x = x;67 mousemove->y = y;68 69 ENetPacket *packet = enet_packet_create( mousemove , sizeof( *mousemove ), reliable );70 71 return packet;72 }73 /*### keystrikes updates */74 ENetPacket* PacketGenerator::keystrike( char press, int reliable )75 {76 std::cout << "generating new keyboard" << std::endl;77 keyboard* key = new keyboard;78 key->id = KEYBOARD;79 key->press = press;80 81 ENetPacket *packet = enet_packet_create( key , sizeof( *key ), reliable );82 83 return packet;84 }85 /*### chat messages packet */86 ENetPacket* PacketGenerator::chatMessage( const char* message, int reliable )87 {88 int* trans = new int[sizeof(int) + strlen(message) + 1];89 *trans = CHAT;90 //be carefull here, don't forget to allocate the space before using it ;-)91 memcpy( &trans[1], (const void*)message, strlen( message ) + 1);92 ENetPacket *packet = enet_packet_create( trans , sizeof( int ) + strlen( message ) + 1, reliable );93 94 return packet;95 }96 97 /*### gamestate packet */98 ENetPacket* PacketGenerator::gstate( GameStateCompressed* states, int reliable )99 {100 //std::cout << "packetgenerator" << std::endl;101 //std::cout << "states->normsize " << states->normsize << std::endl;102 //std::cout << "states->compsize " << states->compsize << std::endl;103 int gid = GAMESTATE; //first assign the correct enet id104 int totalLen = 4*sizeof( int ) + sizeof(bool) + states->compsize; //calculate the total size of the datastream memory105 //std::cout << "totalLen " << totalLen << std::endl;106 unsigned char *data = (unsigned char*)malloc( totalLen ); //allocate the memory for datastream107 memcpy( (void*)(data), (const void*)&gid, sizeof( int ) ); //this is the enet id108 memcpy( (void*)(data+sizeof(int)), (const void*)&(states->id), sizeof(int) ); //the GameStateCompressed id109 memcpy( (void*)(data+2*sizeof(int)), (const void*)&(states->compsize), sizeof(int));110 memcpy( (void*)(data+3*sizeof(int)), (const void*)&(states->normsize), sizeof(int));111 memcpy( (void*)(data+4*sizeof(int)), (const void*)&(states->diffed), sizeof(bool));112 /*(int)*(data) = gid;113 (int)*(data+sizeof(int)) = states->id;114 //this is the compressed size of the GameStateCompressed data, place at 3th position of the enet datastream115 (int)*(data+2*sizeof(int)) = states->compsize;116 //this is the uncompressed size of GameStateCompressed data117 (int)*(data+3*sizeof(int)) = states->normsize;118 //since there is a new parameter inside GameStateCompressed, change this function to create packet119 (bool)*(data+4*sizeof(int)) = states->diffed;*/120 //place the GameStateCompressed data at the end of the enet datastream121 memcpy( (void*)(data+4*sizeof( int ) + sizeof(bool)), (const void*)states->data, states->compsize );122 //create an enet packet with the generated bytestream123 ENetPacket *packet = enet_packet_create( data , totalLen, reliable );124 //delete data;125 return packet;126 }127 128 ENetPacket* PacketGenerator::clid( int classid, std::string classname, int reliable ){129 unsigned char* data = (unsigned char *)malloc(3*sizeof(int)+classname.length()+1);130 std::cout << "classid: " << classid << ", name: " << classname << std::endl;131 *(int *)data = CLASSID;132 *((int *)data+1) = classname.length()+1;133 *((int *)data+2) = classid;134 memcpy( (void *)(data+3*sizeof(int)), classname.c_str(), classname.length()+1);135 ENetPacket *packet = enet_packet_create( data , 3*sizeof(int)+classname.length()+1, reliable );136 return packet;137 }138 139
Note: See TracChangeset
for help on using the changeset viewer.