• vmware之VMware Remote Console (VMRC) SDK(二)


    在上篇文章中,我们用winform结合vmware的api做了一个demo,在vmrc sdk中作为plugin单独打包出来vmware-vmrc-win32-x86.exe,上篇文章的demo只能基于这个plugin运行,在主机的vcenter中默认带有此功能,所以想要以activex插件的形式运行于浏览器之上,就必须安装此插件包,约35MB。此插件集成了包含了可运行于IE之上的ActiveX,以及可运行于Chrome上的应用插件(FF等其他浏览器这里没有经过测试)。下面为一张截图,分别测试于IE11和Chrome。

     1

     

    我们先创建console的基本类。

     1 public class ConsoleModel
     2 {
     3     public int Modes { get; set; }
     4     public int MsgMode { get; set; }
     5     public string AdvancedConfig { get; set; }
     6     public string Host { get; set; }
     7     public string Thumb { get; set; }
     8     public bool AllowSSLErrors { get; set; }
     9     public string Ticket { get; set; }
    10     public string User { get; set; }
    11     public string Pass { get; set; }
    12     public string VMId { get; set; }
    13     public string Datacenter { get; set; }
    14     public string VMPath { get; set; }
    15 }

    下面是基于mvc用于和javascript交互的方法,最后返回一条json数据。

     1 public ActionResult Connect(string vmName)
     2 {
     3     string[] arguments =  {
     4         "--url", "https://192.168.0.161/sdk", 
     5         "--username", "root",
     6         "--password", "P@ssw0rd", 
     7         "--disablesso", "true",
     8         "--ignorecert", "true"};
     9 
    10     util = AppUtil.AppUtil.initialize("Connect", constructOptions(), arguments);
    11     util.connect();
    12     ManagedObjectReference mor = util.getConnection().ServiceRef;
    13     ManagedObjectReference sessionMor = util._connection.Service.RetrieveServiceContent(mor).sessionManager;
    14     string ticket = util._connection.Service.AcquireCloneTicket(sessionMor);
    15     ManagedObjectReference vmMor = util.getServiceUtil().GetDecendentMoRef(null, "VirtualMachine", vmName);
    16 
    17     ConsoleModel console = new ConsoleModel();
    18     console.Modes = 2;
    19     console.MsgMode = 1;
    20     console.AdvancedConfig = "NaN";
    21     console.Host = "192.168.0.161";
    22     console.Thumb = "";
    23     console.AllowSSLErrors = true;
    24     console.Ticket = ticket;
    25     console.User = "";
    26     console.Pass = "";
    27     console.VMId = vmMor.Value;
    28     console.Datacenter = "";
    29     console.VMPath = "";
    30 
    31     return Json(console, JsonRequestBehavior.AllowGet);
    32 }

    下面是基于jquery的ajax调用上方web方法。

     1 function vmrc_connect() {
     2     $.ajax({
     3         type: 'POST',
     4         url: 'Home/Connect',
     5         data: 'vmName=test',
     6         dataType: 'json',
     7         success: function (data) {
     8             startup(data.Modes, data.MsgMode, data.AdvancedConfig);
     9             connect(data.Host, data.Thumb, data.AllowSSLErrors, data.Ticket, data.User, data.Pass, 
    10             data.VMId, data.Datacenter, data.VMPath);
    11         },
    12         error: function () {
    13             alert('connect failed');
    14         }
    15     });
    16 }

    下方是sdk中提供的调用插件的demo,这里已经作了部分修改。

     1 function startup(modes, msgMode, advancedConfig) {
     2     log('starting VMRC instance: modes: ' + modes + ', messages: ' + msgMode);
     3 
     4     if (advancedConfig) {
     5         log('VMRC using advanced config "' + advancedConfig + '"');
     6     }
     7 
     8     try {
     9         var ret = vmrc.startup(modes, msgMode, advancedConfig);
    10         log('startup returned "' + ret + '"');
    11     } catch (err) {
    12         alert('startup call failed: ' + err);
    13     }
    14 }
    15 
    16 function connect(host, thumb, allowSSLErrors, ticket, user, pass, vmid, datacenter, vmPath) {
    17     if (thumb.length > 0)
    18         thumb = thumb.replace(/-/g, ':');
    19 
    20     try {
    21         var ret = vmrc.connect(host, thumb, allowSSLErrors,
    22                              ticket, user, pass, vmid, datacenter, vmPath);
    23         log('connect succeeded');
    24     } catch (err) {
    25         alert('connect failed: ' + err);
    26     }
    27 }

    小结:在sdk demo中,为了兼容各种浏览器,可能要修改部分js方法。

  • 相关阅读:
    jsp大文件(视频)上传问题
    python多版本的pip共存问题解决办法
    buntu系统安装rpm包的方法
    如何查看linux是32位还是64位
    python的if else
    python获取列表唯一值
    python列表转数组
    python文件操作write与writelines的区别
    python中字符串str的strip()方法
    ubuntu16.04安装cloudcompare及打开方法
  • 原文地址:https://www.cnblogs.com/yuefei/p/3626093.html
Copyright © 2020-2023  润新知