Stap 10: Uitgebreid Ping - Pong
Het script heeft de typische ping-ping-pong-functie al is geïnstalleerd, dat betekent dat als u ping naar de client wordt uitgevoerd op het script te sturen, stuurt u een pong terug. U kunt dit doen voor uur... :-)
Als u wilt dat een reactie op verschillende woorden die je moet toevoegen sommige if-statements.
Dit kan heel verwarrend krijgen met een aantal paar woorden meer. En kunt u niet combineren woorden of opdrachten. De opdracht moet worden verstuurd als geprogrammeerd. Wanneer u zenden zou "Ping" in plaats van 'pingen' niets zou gebeuren, want dit niet hetzelfde woord is en tekst van het bericht wordt vergeleken met == op de tekenreeks 'ping'.
Een andere mogelijkheid opdracht-om woorden te vinden in het bericht is om dit te doen:
functionsnamen = { "help", "time" , "clock", "pid", "temp", "ping", "start", "stop", "uptime" } functionen = { sendhelp, sendtime, sendtime, sendpid, sendtemperature, sendping, startsecuritycam , stopsecuritycam, senduptime } function checkforcommand( TOID, FROMID ) for i, name in pairs(functionsnamen) do --print( i.." "..name) if ( string.find(string.lower(commandstringarray[1]) , name ) ) then --print("Command: "..name.." found.") functionen[i]( TOID, FROMID, commandstringarray ) return end end end
--in lua betekent commentaar. Voor de twee regels boven je kunnen verwijderen van de opmerkingen en zien wat er gebeurt binnen de functie.
De checkforcommand wordt vanuit de on_msg_receive daarmee aangeroepen:
if (msg.to.id == our_id) then checkforcommand( msg.from.print_name , msg.from.id ) end
Er zijn twee matrices, een voor de opdracht verzenden genaamd "functionsnamen" en de andere voor de functies in de lua-script die worden genoemd in het geval een opdracht is gevonden.
Met de string.lower() wij de commandstringarray [1] omzetten in kleine letters en te vergelijken met functionsnamen. Op deze manier het maakt geen verschil als we "Ping" of "pINg" of "PiNG" of iets dergelijks schrijven.
U misschien opgevallen dat er de commandstringarray is. Dit heeft de volgende functie: na overhandigen een bericht, de volledige tekst in deze array wordt geparseerd. Op deze manier kan ik controleren of het eerste woord van het bericht "ping" en de tweede was was iets anders en zo verder. De commandstringarray is een matrix van tekenreeksen. Lua is vrij eenvoudig met de variabele-types en matrix-types.
Om de boodschap in deze array schreef ik deze functie, die natuurlijk wordt aangeroepen voordat de checkforcommand:
commandstringarray = {} function messagetextinstringarray(msg) commandstringarray = {} leerzeichen = 1 count = 1 completestring = msg.text -- print( "checkfunction called: msg.text ist: "..completestring ) leerzeichen = ( string.find(completestring, "%s" ) ) while leerzeichen ~= nil do commandstringarray[count] = string.sub(completestring, 1, leerzeichen ) -- print("a space found. Partstring: "..commandstringarray[count]) completestring = string.sub(completestring, leerzeichen + 1 ) count = count + 1 leerzeichen = ( string.find(completestring, "%s" ) ) end commandstringarray[count] = completestring end
de lus is op zoek naar een ruimte "" scheiden twee woorden en schrijft de partstrings naar volgende indexen van de matrix.