06. september 2004 - 16:20Der er
40 kommentarer og 1 løsning
Sidste for idag, det lover jeg, omkring pointer og instance.
Hejsa igen igen (gemmer sig)...
jeg har lige modtaget den nye rutine jeg skal bruge til min server (encrypt, decrypt) og har et problem for ham der lavede den til mig er ikke lige tilgængelig lige nu.
sætter den her til MAX points da uden at det her virker sidder jeg med et stort problem.
problemet er, jeg skal have lavet en pointer til min encryption rutine, ala encryptionserver enc; så jeg har adgang til eg: enc.decrypt( ... )
men da den kører med en default constructor, kan jeg ikke bare init den sådan.
jeg kan da lige smide encrypt.h filen her og så min constructor i source filen
encrypt.h
#pragma warning ( disable: 4786 )
#include "session.h" #include <map>
template <class ID> class encryptionserver {
public: encryptionserver( unsigned long seed ) { encryptionsession::initkeys( seed, first ); }
// returns true only for new connections bool connect( ID client ) { Sessions::_Pairib ib = sessions.insert( Sessions::value_type(client, encryptionsession(first.encodekey, first.decodekey)) ); return ib.second; }
// returns true only if client was connected bool disconnect( ID client ) { return (sessions.erase( client ) == 1); }
bool encrypt( ID client, void* buffer, int size ) { Sessions::iterator it = sessions.find( client ); if ( it == sessions.end() ) return false; it->second.encode( buffer, size ); return true; }
bool decrypt( ID client, void* buffer, int size ) { Sessions::iterator it = sessions.find( client ); if ( it == sessions.end() ) return false; it->second.decode( buffer, size ); return true; }
unsigned long seed = 0x12345678; encryptionserver<char*> ks( seed );
så kunne man altid bruge f.eks
ks.decrypt( .... )
osv...
men da den har en default constuctor er det bare ikke så ment (min gamle system havde IKKE det).
jeg fik at vide det ville være noget med:
You can take the address of the server instance with the usual & operator. and then you can declare your server as a pointer 'keyserver* ks', then istantiate it when you need. Its constructor will be called only at that moment.
after that you can access it just declaring it with an 'extern' clause where you need.
men det siger mig ikke lige noget, da jeg har aldrig rigtig brugt en constructor til noget endnu.
lidt oplysninger omkring hvad jeg skal gøre for at få den til at funke ville være mega nice.
jeg VED den virker hvis det hele er i en f.eks som over
int encrypts() { unsigned long seed = 0x12345678; encryptionserver<char*> ks( seed );
ks.decrypt( ... ); ks.encrypt( ... );
return 0; }
så det må være i den init key den er galt
ks = new encryptionserver<char *>(seed); crasher ikke some den eneste, den init'er et eller andet (hvis jeg skifter key så skifter value, så den tager noget fra key)
den skal oxo inits per connection, hver connection får senere en automatisk genereret key, og den skulle også virke på den måde.
din key bliver regenereret hver gang den er løbet igennem din key bliver aktiveret med key.connect( cip );
den bliver så gemt i en map med ip:keyd:keye
derfor må key kun init en gang, jeg prøvede begge overfor, ingen af dem virkede (den crashede ikke), men det vil ikke virke på den måde.
har prøvet at ligge en besked ved ham der lavede den for mig.
btw, key systemet han har lavet virker, der var nemlig et testprogram med, problemet er bare at i den kører den bare igennem en gang.. dvs den ikke skal bruges flere steder.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.