ITunes RPC Email

From Second Life Wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

I made this a long time ago, before HTTP, how l33t is that? >.>

string NOTIFY_EMAIL = "email@domain.tld";

integer USER_ID = 0; // Fox

// I always set constants for different idata commands sent through RPC. Then I just make sure they match the constants
// that I set in my PHP file, and everything works great.
integer RPC_ERROR = 0;
integer SEND_SONG = 1;
integer SEND_LINK = 2;

// Always reamins 99
integer RPC_SUCCESS = 99;

// This will be used as a reference later in case we need to know it.
key rpc_chan;
string rgn_name;

default {
    
    state_entry()
    {
        rgn_name = llGetRegionName();
        llOpenRemoteDataChannel();
        llListen(1, "Fox Diller", "", "");
        llSetTimerEvent(13);
    }
    
    timer()
    {
        if (llGetRegionName() != rgn_name)
        {
            llOwnerSay("Changing Sims");
            rgn_name = llGetRegionName();
            llOpenRemoteDataChannel();
        }
    }
    
    
    listen(integer chan, string name, key id, string msg)
    {
        if (llDetectedKey(0) == llGetOwner()) {
            
            if (msg == "key")
            {
                llOwnerSay((string)rpc_chan);
            }
            
            if (msg == "timeron")
            {
                llSetTimerEvent(13);
                llOwnerSay("Timer Turned On!");
            }
            
            if (msg == "timeroff")
            {
                llSetTimerEvent(0);
                llOwnerSay("Timer Turned Off!");
            }
            if (msg == "reset") llResetScript();
        }
    }
        
    remote_data(integer event_type, key channel, key message_id, string sender, integer idata, string sdata)
    {
        // If the RPC channel has just been opened, then we need to send off a notice to the webserver.
        if (event_type == REMOTE_DATA_CHANNEL)
        {
            // We should keep a reference to the RPC channel that has been opened.
            rpc_chan = channel;
            
            // Here, we can specify extra parameters in the email that we need the webserver to know, such as the RPC channel.
            string msg;
            msg = "Command: updatekey\n";
            msg += "RPC-Chan: "+(string)rpc_chan+"\n";
            msg += "UserID: "+(string)USER_ID+"\n";
            llEmail(NOTIFY_EMAIL, "RPC Chan Updated", msg);
            
            llOwnerSay("Sent Object ID string to MySQL server.");
        }
        
        // If an RPC request has been sent from the webserver.
        else if (event_type == REMOTE_DATA_REQUEST)
        {
            // We can check what command is coming through here, and handle them as needed.
            if (idata == SEND_SONG)
            {
                list songData;
                songData = llCSV2List(sdata);
                llSetText("iTunes <-> SecondLife\n-----------------------------------\nAlbum: "+llList2String(songData, 0)+"\nArtist: "+llList2String(songData, 1)+"\nSong: "+llList2String(songData,2), <1,1,1>, 1.0);
                llSay(0, "Fox is currently listening to: "+llList2String(songData, 1)+" - "+llList2String(songData, 2));
                llRemoteDataReply(channel, message_id, "success", RPC_SUCCESS);
            
            // Just checking for another command.
            } 
            else if (idata == SEND_LINK)
            {
                llOwnerSay("Th5s Feat4re Broken");
//                llRemoteDataReply(channel, message_id, "success", RPC_COMMAND2);
             // If it was an unrecognized command, we still have to send some sort of reply back.
            } 
            else 
            {
                llOwnerSay("WARNING!!!!!!!!!!!!!!!!!!!");
                // llRemoteDataReply(channel, message_id, "", RPC_ERROR);
            }
        }
    }
}