Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Dec 31, 2007, 7:40:23 PM (17 years ago)
Author:
rgrieder
Message:
  • added dll support to the network library
  • improved header file dependency in network
File:
1 edited

Legend:

Unmodified
Added
Removed
  • code/branches/FICN/src/network/PacketGenerator.cc

    r636 r777  
    11/*
    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  */
     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*/
    2727
    2828/*
    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  *
     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*
    3434*/
    3535
    36 #include "PacketManager.h"
    37 #include <enet/enet.h>
    3836#include <iostream>
    3937#include <list>
     
    4139#include <cstring>
    4240
    43 using namespace network;
     41#include "PacketTypes.h"
     42#include "PacketManager.h"
    4443
    45 PacketGenerator::PacketGenerator() {}
     44namespace network
     45{
     46  PacketGenerator::PacketGenerator() { }
    4647
    47 //following functions create a packet in form of bytestream
     48  //following functions create a packet in form of bytestream
    4849
    49 ENetPacket* PacketGenerator::acknowledgement( int state, int reliable )
    50 {
     50  ENetPacket* PacketGenerator::acknowledgement( int state, int reliable )
     51  {
    5152    std::cout << "generating new acknowledgement, id: " << state << std::endl;
    52         ack* ackreq = new ack;
    53         ackreq->id = ACK;
    54         ackreq->a = state;
     53    ack* ackreq = new ack;
     54    ackreq->id = ACK;
     55    ackreq->a = state;
    5556
    56         ENetPacket *packet = enet_packet_create( ackreq , sizeof( *ackreq ), reliable );
     57    ENetPacket *packet = enet_packet_create( ackreq , sizeof( *ackreq ), reliable );
    5758
    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
    59144}
    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 id
    104   int totalLen = 4*sizeof( int ) + sizeof(bool) + states->compsize; //calculate the total size of the datastream memory
    105   //std::cout << "totalLen " << totalLen << std::endl;
    106   unsigned char *data = (unsigned char*)malloc( totalLen ); //allocate the memory for datastream
    107   memcpy( (void*)(data), (const void*)&gid, sizeof( int ) ); //this is the enet id
    108   memcpy( (void*)(data+sizeof(int)), (const void*)&(states->id), sizeof(int) ); //the GameStateCompressed id
    109   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 datastream
    115   (int)*(data+2*sizeof(int)) = states->compsize;
    116   //this is the uncompressed size of GameStateCompressed data
    117   (int)*(data+3*sizeof(int)) = states->normsize;
    118   //since there is a new parameter inside GameStateCompressed, change this function to create packet
    119   (bool)*(data+4*sizeof(int)) = states->diffed;*/
    120   //place the GameStateCompressed data at the end of the enet datastream
    121   memcpy( (void*)(data+4*sizeof( int ) + sizeof(bool)), (const void*)states->data, states->compsize );
    122   //create an enet packet with the generated bytestream
    123   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.