Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Nov 9, 2008, 4:28:42 AM (16 years ago)
Author:
landauf
Message:
  • added more exceptions to handle problems while loading a level or single objects
  • dedicated server runs and clients may join, but there are still some heavy problems
File:
1 edited

Legend:

Unmodified
Added
Removed
  • code/branches/objecthierarchy/src/core/XMLPort.h

    r2114 r2161  
    4444
    4545#include "util/Debug.h"
     46#include "util/Exception.h"
    4647#include "util/MultiType.h"
    4748#include "tinyxml/ticpp.h"
     
    495496                                            if (this->identifierIsIncludedInLoaderMask(identifier))
    496497                                            {
    497                                                 COUT(4) << ((BaseObject*)object)->getLoaderIndentation() << "fabricating " << child->Value() << "..." << std::endl;
    498 
    499                                                 BaseObject* newObject = identifier->fabricate((BaseObject*)object);
    500                                                 assert(newObject);
    501                                                 newObject->setLoaderIndentation(((BaseObject*)object)->getLoaderIndentation() + "  ");
    502 
    503                                                 O* castedObject = dynamic_cast<O*>(newObject);
    504                                                 assert(castedObject);
    505 
    506                                                 if (this->bLoadBefore_)
     498                                                try
    507499                                                {
    508                                                     newObject->XMLPort(*child, XMLPort::LoadObject);
    509                                                     COUT(4) << ((BaseObject*)object)->getLoaderIndentation() << "assigning " << child->Value() << " (objectname " << newObject->getName() << ") to " << this->identifier_->getName() << " (objectname " << ((BaseObject*)object)->getName() << ")" << std::endl;
     500                                                    COUT(4) << ((BaseObject*)object)->getLoaderIndentation() << "fabricating " << child->Value() << "..." << std::endl;
     501
     502                                                    BaseObject* newObject = identifier->fabricate((BaseObject*)object);
     503                                                    assert(newObject);
     504                                                    newObject->setLoaderIndentation(((BaseObject*)object)->getLoaderIndentation() + "  ");
     505
     506                                                    O* castedObject = dynamic_cast<O*>(newObject);
     507                                                    assert(castedObject);
     508
     509                                                    if (this->bLoadBefore_)
     510                                                    {
     511                                                        newObject->XMLPort(*child, XMLPort::LoadObject);
     512                                                        COUT(4) << ((BaseObject*)object)->getLoaderIndentation() << "assigning " << child->Value() << " (objectname " << newObject->getName() << ") to " << this->identifier_->getName() << " (objectname " << ((BaseObject*)object)->getName() << ")" << std::endl;
     513                                                    }
     514                                                    else
     515                                                    {
     516                                                        COUT(4) << ((BaseObject*)object)->getLoaderIndentation() << "assigning " << child->Value() << " (object not yet loaded) to " << this->identifier_->getName() << " (objectname " << ((BaseObject*)object)->getName() << ")" << std::endl;
     517                                                    }
     518
     519                                                    COUT(5) << ((BaseObject*)object)->getLoaderIndentation();
     520                                                    (*this->loadexecutor_)(object, castedObject);
     521
     522                                                    if (!this->bLoadBefore_)
     523                                                        newObject->XMLPort(*child, XMLPort::LoadObject);
     524
     525                                                    COUT(5) << ((BaseObject*)object)->getLoaderIndentation() << "...fabricated " << child->Value() << " (objectname " << newObject->getName() << ")." << std::endl;
    510526                                                }
    511                                                 else
     527                                                catch (AbortLoadingException& ex)
    512528                                                {
    513                                                     COUT(4) << ((BaseObject*)object)->getLoaderIndentation() << "assigning " << child->Value() << " (object not yet loaded) to " << this->identifier_->getName() << " (objectname " << ((BaseObject*)object)->getName() << ")" << std::endl;
     529                                                    COUT(1) << "An error occurred while loading object, abort loading..." << std::endl;
     530                                                    throw ex;
    514531                                                }
    515 
    516                                                 COUT(5) << ((BaseObject*)object)->getLoaderIndentation();
    517                                                 (*this->loadexecutor_)(object, castedObject);
    518 
    519                                                 if (!this->bLoadBefore_)
    520                                                     newObject->XMLPort(*child, XMLPort::LoadObject);
    521 
    522                                                 COUT(5) << ((BaseObject*)object)->getLoaderIndentation() << "...fabricated " << child->Value() << " (objectname " << newObject->getName() << ")." << std::endl;
     532                                                catch (std::exception& ex)
     533                                                {
     534                                                    COUT(1) << "An error occurred while loading object:" << std::endl;
     535                                                    COUT(1) << ex.what() << std::endl;
     536                                                }
     537                                                catch (...)
     538                                                {
     539                                                    COUT(1) << "An unknown error occurred while loading object." << std::endl;
     540                                                }
    523541                                            }
    524542                                        }
Note: See TracChangeset for help on using the changeset viewer.