[crossfire] Moving server towards a modularized system?
David Delbecq
delbd at oma.be
Tue Jan 17 04:28:41 CST 2006
Le Mardi 17 Janvier 2006 08:00, Mark Wedel a écrit :
> Yann Chachkoff wrote:
>
> >
> > Well, it really depends on what the C code requires as dependencies - the
> > Python plugin has one with the python libs for example. But stuff that was
> > initially in the server code would have no such external dependencies
indeed.
>
> True. I imagine dependencies to be fairly standard C dependencies. But I
> could imagine someone writing a plugin in C++ with appropriate wrappers.
>
> >
> > On the other hand, I think splitting the code in "logical entities", more
or
> > less independent of the others, would be a path of thinking to try. As
such,
> > random maps would appear as a good target for modularization, since it
> > doesn't really depend on anything else, apart from very basical
operations,
> > and is called only at a few places. Alchemy would be another good
candidate -
> > both are very important in the game, yet are working very much like "black
> > boxes" - complex code with relatively limited interactions with the rest
of
> > the code.
>
> Agree. And in fact, any object that does something 'interesting' when
applied
> could be a plugin, since most such objects are also very well self
contained.
>
> However, I'd counter that if it is just 20 lines of C code to do that
> 'whatever', it could be more convenient to just add that 20 lines to apply.c
>
> I say this because I imagine plugins would probably be organized by
> plugin/C/<plugin_name>. Maybe have one directory for basic plugins (one in
> which the entier plugin is in one file). But if plugin grows to the extent
that
> there are 50 'trivial' plugins, one could say finding the code there isn't
any
> more convenient than having it sit in apply.c
Nothing would prevent all those 'basic plugins' to be gathered together.
eg all kind of current exit in a module along with walls, grounds, name this
module 'basicLayout'
anotherone for movment stuffs
another module regrouping monster stuffs
anotherone for all kind of traps
...
Common lifecycle is 'add new feature in existing code, when it becomes lots of
line, move it to it's own module', unless of course you know from the start
it will contain lots of code ;)
>
> >
> >> I'd think that if there is a C plugin, aside from the different passing
in
> >> of the values, and using appropriate callbacks for functions instead of
> >> calling
> > them directly, it could access the function data directly? Eg, it should
need
> > to do a plugin callback to set the dam of an object, it could just set
> > ob->dam?
> >
> > Theorically, yes: there's nothing preventing such a thing. Wrapping such
> > access behind functions was basically to allow checking that the values
> > passed were in the correct range, and to provide encapsulation of the data
> > (so that a plugin wouldn't get tempted to directly change fields it wasn't
> > supposed to change without a high risk)
>
> I'd imagine it is more important for the plugin wrapper to provide a
> consistent interface to the various functions, so that if a function
handling
> changes in the C code (say a function now takes another argument), that all
the
> plugins don't have to be rewritten - they can keep using the existing code,
with
> the wrapper just passing in some default value.
principles of methods polymorphism in object oriented programming ;)
>
> >
> > Sure ! But I think such changes would be easier to make if the code was,
in a
> > way or another, "split" into smaller entities, so that they affect only a
> > limited part of it. And indeed, a lot of functions would benefit from some
> > in-depth rebuilding. Also, part of the problems of code
debugging/maintenance
> > come to how things are distributed all around the code - finding where to
> > add/change things is a rather complex task. Making small changes to make
the
> > code more "readable" and "editable" would thus be another important point
to
> > achieve, IMHO.
>
> True - some functions have grown a bit in complexity and could certainly
use a
> rewrite. And I could envision doing some things as plugins would make some
> things easier/more modular (Going back to what someone said, objects that
the
> player uses are complicated - need to update the apply code, but depending
on
> the object, may also need to update the code that actually describes the
item -
> I could see with appropriate plugin support, all that could be done in the
> plugin, so all code related to that object is in one place)
Well you put the finger on it. Adding a new object is generally adding a 2
lines code to apply which calls myObjectType_apply(). and same to describe,
sometimes, also for some same to move_object(). Damn this looks to me like
the pattern of registering listeners to some events :D
>
>
>
> _______________________________________________
> crossfire mailing list
> crossfire at metalforge.org
> http://mailman.metalforge.org/mailman/listinfo/crossfire
>
>
--
David Delbecq
Royal Meteorological Institute of Belgium
-
Pingouins dans les champs, hiver méchant
More information about the crossfire
mailing list