Avatar billede bjering Nybegynder
09. september 2004 - 11:53 Der er 3 kommentarer og
1 løsning

min std multimap virker, men ikke som den skal.

vel ikke nogen der kan sige hvad der er galt her ?

// holds users known objects
struct knownobjects
{
    unsigned int socketid;
    unsigned long objectid;
};

// all our objects
multimap<int, struct knownobjects> ko;

// adds known object
void addknownobject(unsigned int cp, unsigned long objid)
{
    Log2File(TRUE, "ADD KNOWN OBJECT\n");
    struct knownobjects test;

    test.socketid = cp;
    test.objectid = objid;

    pair<int ,struct knownobjects> p(cp,test);
    ko.insert(p);
};

// checks if it is known to the user already
void checkknownobject(DWORD ptr, unsigned long objid, char * charname)
{
    CConnection* c = reinterpret_cast <CConnection*> (ptr);
    char            cip[15];
    unsigned int    cp = 0;
    c->PeerInfo (&cip[0], 15, &cp);
   
    Log2File(TRUE, "Checking : %s on IP %s:%i, Object ID: %d\n", charname, cip, cp, objid);

    bool found;

    if (ko.empty() == true)
    {
        // have to put something in at first time run, since its empty. no need to do any checking
        addknownobject(cp, objid);
        senduserobjnewpack(charname, ptr);
    }
    else
    {
        multimap<int, struct knownobjects>::iterator it;
        for (it = ko.begin(); it != ko.end(); ++it)
        {
            unsigned int id = (*it).first;
            unsigned long thisobjid = (*it).second.objectid;

            if (cp == id && objid == thisobjid)
            {
                // didnt find object need to add it.
                found = true;
            }
            else
            {   
                // found a object, so no need to add one.
                found = false;
            }

        if(found == true)
        {
            Log2File(TRUE, "No need to add anything\n");
            // object is already known
            gsmm.sendmovepacket(charname, ptr);
        }
        if(found == false)
        {
            Log2File(TRUE, "Adding ID\n");
            // object is not known, we add it.
            addknownobject(cp, objid);
            senduserobjnewpack(charname, ptr);
        }

        }
    }
    return;
}

----

det den skulle gøre er tjekke om cp har object kendt med objid, hvis den har skal den ikke adde den, ellers skal den adde den.

f.eks socketid (2201) kender objectid (12030111) så ingen grund til at ligge den ind igen

men det virker bare ikke, den gemmer den flere gange nogle gange, som i kan se her fra min log fil:

[02:43:35] Sending Move packet to socket 3221 object id 20378780
[02:43:35] No need to add anything
[02:43:35] Admin is moving - and not added.
[02:43:35] Sending Move packet to socket 3221 object id 20378780
[02:43:35] No need to add anything
[02:43:35] Admin is moving - and not added.
[02:43:35] Sending Move packet to socket 3221 object id 20378780
[02:43:35] No need to add anything
[02:43:35] Admin is moving - and not added.
[02:43:35] Sending Move packet to socket 3221 object id 20378780
[02:43:35] No need to add anything
[02:43:35] Admin is moving - and not added.
[02:43:35] Sending Move packet to socket 3221 object id 20378780
[02:43:35] Adding ID : 3221, Object ID: 20378780
[02:43:35] ADD KNOWN OBJECT
[02:43:35] Adding ID : 3221, Object ID: 20378780
[02:43:35] ADD KNOWN OBJECT
[02:43:35] Adding ID : 3221, Object ID: 20378780
[02:43:35] ADD KNOWN OBJECT
[02:43:35] Adding ID : 3221, Object ID: 20378780
[02:43:35] ADD KNOWN OBJECT
[02:43:35] Adding ID : 3221, Object ID: 20378780
[02:43:35] ADD KNOWN OBJECT
[02:43:35] Adding ID : 3221, Object ID: 20378780
[02:43:35] ADD KNOWN OBJECT
[02:43:35] Adding ID : 3221, Object ID: 20378780

som i kan se er det samme id + object id, så der er noget galt et eller andet sted...

nogen ide'er ?
Avatar billede erikjacobsen Ekspert
09. september 2004 - 12:12 #1
Du kan med fordel stoppe din forløkke når du finder noget, fx.

if (cp == id && objid == thisobjid)
{
  // didnt find object need to add it.
  found = true; break;
}

Ellers vil found sættes til false ved næste element.
Avatar billede bjering Nybegynder
09. september 2004 - 14:23 #2
ser ud somom det virker efter jeg rykkede lidt rundt på tingene og addede en break...

pointsne er dine hvis du adder et svar
Avatar billede erikjacobsen Ekspert
09. september 2004 - 14:33 #3
Ellers tak, jeg samler slet ikke på point. Svar selv, accepter eget svar.
Avatar billede bjering Nybegynder
09. september 2004 - 16:25 #4
okay takker alligevel for hjælpen
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester





White paper
Tidsbegrænset kampagne: Overvejer du at udskifte eller tilføje printere i din forretning? Vi kan tilbyde én eller flere maskiner gratis