How-to for Plugin Developers with Code Examples (1 Viewer)

Was it useful?


  • Total voters
    11

regeszter

Retired Team Member
  • Premium Supporter
  • October 29, 2005
    5,335
    4,954
    Home Country
    Hungary Hungary
    Using Wake On Lan in plugins.

    Extract the server IP from the UNC path ("\\server\share") and store the MAC address in MediaPortal.xml
    Use it in configure.exe or setting screen of your plugin.

    Code:
        private void SaveMAC(string uncPath)
        {
          String macAddress;
          byte[] hwAddress;
    
          WakeOnLanManager wakeOnLanManager = new WakeOnLanManager();
    
          IPAddress ipAddress = null;
          string hostName = Util.Utils.GetServerNameFromUNCPath(uncPath);
    
          using (Profile.Settings xmlreader = new MPSettings())
          {
            macAddress = xmlreader.GetValueAsString("macAddress", hostName, null);
          }
    
          if (wakeOnLanManager.Ping(hostName, 100) && !string.IsNullOrEmpty(macAddress))
          {
            Log.Debug("WakeUpServer: The {0} server already started and mac address is learnt!", hostName);
            return;
          }
    
          // Check if we already have a valid IP address stored,
          // otherwise try to resolve the IP address
          if (!IPAddress.TryParse(hostName, out ipAddress))
          {
            // Get IP address of the server
            try
            {
              IPAddress[] ips;
    
              ips = Dns.GetHostAddresses(hostName);
    
              Log.Debug("WakeUpServer: WOL - GetHostAddresses({0}) returns:", hostName);
    
              foreach (IPAddress ip in ips)
              {
                Log.Debug("    {0}", ip);
    
                ipAddress = ip;
                // Check for valid IP address
                if (ipAddress != null)
                {
                  // Update the MAC address if possible
                  hwAddress = wakeOnLanManager.GetHardwareAddress(ipAddress);
    
                  if (wakeOnLanManager.IsValidEthernetAddress(hwAddress))
                  {
                    Log.Debug("WakeUpServer: WOL - Valid auto MAC address: {0:x}:{1:x}:{2:x}:{3:x}:{4:x}:{5:x}"
                      , hwAddress[0], hwAddress[1], hwAddress[2], hwAddress[3], hwAddress[4], hwAddress[5]);
    
                    // Store MAC address
                    macAddress = BitConverter.ToString(hwAddress).Replace("-", ":");
    
                    Log.Debug("WakeUpServer: WOL - Store MAC address: {0}", macAddress);
    
                    using (MediaPortal.Profile.Settings xmlwriter = new MediaPortal.Profile.MPSettings())
                    {
                      xmlwriter.SetValue("macAddress", hostName, macAddress);
                    }
                  }
                  else
                  {
                    Log.Debug("WakeUpServer: WOL - Not a valid IPv4 address: {0}", ipAddress);
                  }
                }
              }
            }
            catch (Exception ex)
            {
              Log.Error("WakeUpServer: WOL - Failed GetHostAddress - {0}", ex.Message);
            }
          }
        }


    Wake up the server before read the files from the share.

    Code:
    serverName = Util.Utils.GetServerNameFromUNCPath(uncPath);
    WakeupUtils.HandleWakeUpServer(serverName, wolTimeout);
     

    Dadeo

    Docs Group Manager
  • Premium Supporter
  • November 26, 2006
    5,340
    3,321
    Himalayas, India
    Home Country
    Canada Canada
    Fantastic guys - I've been wanting/trying to get this type of info added to plugin devs guide for years - so you are making me very happy :D
    @SpudR - I really like the 'FAQ' style format (y) I'm just wondering why you put it under MP1 Development instead of MP1 Plugin Development?
    I suggest we move the whole section to http://wiki.team-mediaportal.com/1_MEDIAPORTAL_1/18_Contribute/6_Plugins or even http://wiki.team-mediaportal.com/1_MEDIAPORTAL_1/18_Contribute/6_Plugins/Plugin_Developer's_Guide
    any objections?
     

    SpudR

    Retired Team Member
  • Premium Supporter
  • July 27, 2007
    2,657
    718
    Yorkshire, UK
    Home Country
    England England
    Last edited:

    SpudR

    Retired Team Member
  • Premium Supporter
  • July 27, 2007
    2,657
    718
    Yorkshire, UK
    Home Country
    England England
    I've moved the section as per my bosses orders and added all the 'Tips and Tricks' to the same format too.
    Not confident enough to delete the old tricks and tips page though!
     

    Edalex

    Community Plugin Dev
  • Premium Supporter
  • January 3, 2008
    2,955
    1,264
    Saratov
    Home Country
    Russian Federation Russian Federation
    Old tips and tricks are fully working! One little change is that untested trick from Frodo is fully working too ;)
     

    Users who are viewing this thread

    Top Bottom