[PHP] Plugin Systeem voor bot refreshen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • PaulEm
  • Registratie: Januari 2008
  • Laatst online: 03-02 07:52
Ik ben van plan een MSN Bot te gaan schrijven met daarin een plugin systeem om bepaalde events te beheren (Bijvoorbeeld wanneer iemand zicht aanmeld, of wanneer er een bericht wordt verstuurd).
Dit idee is er gekomen omdat MSN Plus ook met zelfgemaakte script werkt waarbij je functies aan events koppeld.

Nu dacht ik dus zelf een PHP file te maken met daarin:
code:
1
function OnEvent_Signin ( $sEmail ) { }


Het probleem is echter dat wanneer je een 2e plugin maakt met daarin ook dit event je de zelfde functie twee keer aan roept.
Nu zat ik eraan te denken om per event alle plugins elke keer te includen, het probleem is alleen dat je alsnog een bestaande functie opnieuw wilt aanmaken.

Dit kan opzich opgelost worden door elke Plugin in een class te zetten, en vervolgens die class aan te roepen.
Echter moet je dan wel elke keer je Bot uit en aan zetten om alle classes opnieuw te loaden

Mijn vraag luidt daarom als volgd:
Hoe kan ik ervoor zorgen dat ik niet elke keer mijn Bot uit en aan hoef te zetten, maar dat wel elke keer de plugin opnieuw geladen wordt?

Zo beter?...

Acties:
  • 0 Henk 'm!

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

ditis uit 2002, maar ik denk niet dat er in die tussentijd veel veranderd is aan de PHP structuur. kijk anders eens naar Blobsy hoe ze dit oplossen?

http://bugs.php.net/bug.php?id=17900&edit=1

Ik zou denk ik zelf een base class maken van die bot event, die weer gewoon alle plugins uit een map include.

Alle plugins zouden dan dit moeten gaan doen:

PHP:
1
2
3
4
5
6
7
8
9
10
switch($_BOT['event'])
{
   case 'onSignin':

   break;
   case 'onStatusChange':

   break;

}


Zo hou je de structuur licht, sim-pel en dynamisch volgens mij aangezien je die files telkens opnieuw kan includen :)

[ Voor 51% gewijzigd door SchizoDuckie op 12-06-2008 14:24 ]

Stop uploading passwords to Github!


Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Misschien is het handig om je eens in te lezen in design patterns?

Observer pattern is namelijk wat jij wilt.

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

LuCarD schreef op donderdag 12 juni 2008 @ 14:24:
Misschien is het handig om je eens in te lezen in design patterns?

Observer pattern is namelijk wat jij wilt.
Hij heeft niet veel aan een observer pattern als ie telkens ge-update code wil inladen...

Stop uploading passwords to Github!


Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

SchizoDuckie schreef op donderdag 12 juni 2008 @ 14:25:
[...]

Hij heeft niet veel aan een observer pattern als ie telkens ge-update code wil inladen...
ahh oke.. ik heb het denk ik niet goed gelezen.... :X

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 18-09 14:42
Laat de plugins zich bij je bot-framework registreren, waardoor je in je bot kunt bijhouden welke functies wanneer aangeroepen moeten worden?

Acties:
  • 0 Henk 'm!

  • PaulEm
  • Registratie: Januari 2008
  • Laatst online: 03-02 07:52
frickY schreef op donderdag 12 juni 2008 @ 14:31:
Laat de plugins zich bij je bot-framework registreren, waardoor je in je bot kunt bijhouden welke functies wanneer aangeroepen moeten worden?
Dit gaat niet werken, aangezien ik dus graag wil dat de plugins up-to-date blijven zonder dat de bot uit en aan hoeft.. ;)
SchizoDuckie schreef op donderdag 12 juni 2008 @ 14:20:
Ik zou denk ik zelf een base class maken van die bot event, die weer gewoon alle plugins uit een map include.

Alle plugins zouden dan dit moeten gaan doen:

PHP:
1
2
3
4
5
6
7
8
9
10
switch($_BOT['event'])
{
   case 'onSignin':

   break;
   case 'onStatusChange':

   break;

}


Zo hou je de structuur licht, sim-pel en dynamisch volgens mij aangezien je die files telkens opnieuw kan includen :)
Dit is inderdaad een mogelijkheid, al zie ik zelf liever iets met functies/classes.
Daarnaast is dit niet echt een lekkere oplossing, als iemand in zijn/haar eerste plugin $_BOT['event'] aanpast gaat het hele systeem al overhoop ;)

[ Voor 50% gewijzigd door PaulEm op 12-06-2008 14:34 ]


Acties:
  • 0 Henk 'm!

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

PaulEm schreef op donderdag 12 juni 2008 @ 14:32:
[...]
Dit gaat niet werken, aangezien ik dus graag wil dat de plugins up-to-date blijven zonder dat de bot uit en aan hoeft.. ;)


[...]
Dit is inderdaad een mogelijkheid, al zie ik zelf liever iets met functies/classes.
Daarnaast is dit niet echt een lekkere oplossing, als iemand in zijn/haar eerste plugin $_BOT['event'] aanpast gaat het hele systeem al overhoop ;)
Je kúnt natuurlijk ook alleen de public interface van je bot beschikbaar maken binnen je plugins, een global $bot object met een stuk of wat public functies die je kan gebruiken om aan te hooken (switch $bot->getEvent() ofzo) Het ging mij hier even om het voorbeeld van dynamisch code inladen d.m.v. een include / switch om telkens op het juiste punt uit te komen :)

Stop uploading passwords to Github!


Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • PaulEm
  • Registratie: Januari 2008
  • Laatst online: 03-02 07:52
Ziet er naar uit dat dat inderdaad is wat ik bedoel, jammer genoeg moet je host dat dan wel geinstalleerd hebben ;)

Acties:
  • 0 Henk 'm!

  • ikke007
  • Registratie: Juni 2001
  • Laatst online: 18-09 14:10
Ik weet niet hoe groot zulke plugins zijn, eventueel kun je naar de volgende mogelijkheid kijken:

http://nl3.php.net/create_function

Hiermee kun je zelf een anonymous function (runtime) aanmaken. Het opnieuw inladen van je module betekend dan eigenlijk 'creer een nieuwe functie en koppel deze aan event x in de bot.

Goede topicstart trouwens d:)b

Lets remove all security labels and let the problem of stupidity solve itself

Pagina: 1