LINUX.ORG.RU

Вызов NodeJS их VB.NET через EdgeJS, возврат объекта, доступ к его методам

 , ,


0

1

Public Class FreenomDNS
        Public UserName, Password As String
        Public FreenomAPIObject As Object

        'Delegate Function EdgeFunc(Of Object, System.Threading.Tasks.Task(Of Object))()
        'System.Func(Of Object, System.Threading.Tasks.Task(Of Object))

        Public Function Authorize(UserName As String, Password As String)
            Dim F = EdgeJs.Edge.Func("
                    var Freenom;
                    F=function (data, callback) 
                    { 
                        Freenom = require(""freenom-dns"").init(data, ""pass123"");
                        callback(null, Freenom); 
                    };
                    return F;
                ")

            'Dim T = F({UserName, Password})

            'Testing more
            Dim FreenomAPIObject As System.Dynamic.ExpandoObject = F(UserName).WaitResult()
            Dim ListDomainsFunc As System.Func(Of Object, System.Threading.Tasks.Task(Of Object)) = CObj(FreenomAPIObject).dns.listRecords 'listDomains
            Dim R = ListDomainsFunc("somedomain.tk").WaitResult()



Последнее исправление: linlin (всего исправлений: 1)

Ответ на: комментарий от linlin

Немного переделал, все так же виснет, как исправить?


    Public Class FreenomDNS
        Public UserName, Password As String
        Public EdgeFunc As System.Func(Of Object, System.Threading.Tasks.Task(Of Object))
        Public Freenom As Object

        Public Function Authorize(UserName As String, Password As String)
            EdgeFunc = EdgeJs.Edge.Func("
                    var Freenom;
/*
                    ReturnValueFunc=function()
                    {
                        return Freenom;
                    }
*/
                    EdgeFunc=function (data, callback) 
                    { 
                        var UserName=data[0];
                        var Password=data[1];
                        Freenom = require(""freenom-dns"").init(UserName, Password);
                        callback(null, Freenom); 
                    };
                    return EdgeFunc;
            ")
            Freenom = EdgeFunc({UserName, Password}).WaitResult().dns
        End Function

        Function ListRecords(ForDomain As String)
            Dim FreenomFunc As System.Func(Of Object, System.Threading.Tasks.Task(Of Object)) =
                   Freenom.listRecords 'listDomains
            ListRecords = FreenomFunc(ForDomain).WaitResult(5000)
        End Function
    End Class

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
        Dim TestDNS As New FreenomDNS
        TestDNS.Authorize(UserNameConst, PasswordConst)
        Debug.Print(TestDNS.ListRecords(DomainNameConst).ToString())

linlin
() автор топика
Ответ на: комментарий от linlin
var UserName=data[0];
                        var Password=data[1];
EdgeFunc({UserName, Password})

Почему ты передаешь в функцию объект именнованными с полями UserName, Password, а внутри функции работаешь с ним, как с индексированным массивом?

anonymous
()
Ответ на: комментарий от anonymous

{UserName, Password} - это сокращенная форма записи new Array(){UserName, Password}

т.е. тоже массив

А массивом, потому что всего один формальный параметр на вход

linlin
() автор топика
Ответ на: комментарий от linlin

Ну хорошо. Тогда почему, ты в EdgeFunc не передаешь callback при вызове, но при этом вызываешь его внутри функции. У тебя же там получается

undefined(null, Freenom); 

что приводит к эксшепшену.

anonymous
()
Ответ на: комментарий от linlin

Сделал простенький скриптец под Node:

var freenom = require(«freenom-dns»).init(user, pass); var Records = freenom.dns.listRecords();

Отладчик показывает для Records кучу всего и в т.ч. значение Promise {promiseDispatch: , valueOf: , inspect: }

Это вроде бы что-то для асинхронной работы в NodeJS.

Как по простому правильно вызвать freenom.dns.listRecords(), чтобы она вернула список доменов?

linlin
() автор топика
Ответ на: комментарий от anonymous

Ты про вызов: Freenom = EdgeFunc({UserName, Password}).WaitResult().dns ?

EdgeFunc принимает всего один аргумент в ту сторону.

Public Delegate Function Func(Of T, TResult)(arg As T) As TResult

linlin
() автор топика
Ответ на: комментарий от linlin

Вот еще немного переделал, теперь работает создание и удаление записей, а как возвращать списки так и непонятно.

Public Class FreenomDNS
        Public UserName, Password As String
        Public EdgeFunc As System.Func(Of Object, System.Threading.Tasks.Task(Of Object))
        Public Freenom As Object

        Public Function Authorize(UserName As String, Password As String)
            EdgeFunc = EdgeJs.Edge.Func("

                    function Alert(Msg)
                    {
	                    var msgbox = require('native-msg-box');
	                    msgbox.prompt({  title: 'Alert', msg: Msg }, function(){});
                    }

                    function IsBlank(V)
                    {
                        if (V==null || V==undefined) return true;
                        else if(V.toString == '') return true;   
                        return false;
                    }

                    var Result = {
                        Freenom : require('freenom-dns'),
                        
                        ListDomains: function()
                        {
                        
                            Domains=Result.Freenom.dns.listDomains();
                            Alert('ListDomains: ' + Domains.toString());
                        },

                        ListRecords: function(ForDomain)
                        {
                        
                            Records=Result.Freenom.dns.listRecords(ForDomain);
                            Alert('ListRecords: ' + Records.toString());
                        },

                        SetRecord : function(Args)
                        {
                            var ForDomain=Args[0];
                            var RecordType=Args[1];
                            var Value=Args[2];

                            if (IsBlank(Value))
                            {
                                Result.Freenom.dns.clearRecord(ForDomain,RecordType);
                            }
                            else
                            {
                                Result.Freenom.dns.setRecord(ForDomain,RecordType,Value);
                            }
                        }
                    };

                    EdgeFunc=function (data, callback) 
                    { 
                        var UserName=data[0];
                        var Password=data[1];
                        Result.Freenom.init(UserName, Password);
                        callback(null, Result); 
                    };
                    return EdgeFunc;
            ")
            Freenom = EdgeFunc({UserName, Password}).WaitResult()

        End Function

        Function ListDomains()
            Dim FreenomFunc As System.Func(Of Object, System.Threading.Tasks.Task(Of Object)) = Freenom.ListRecords
            ListDomains = FreenomFunc(Nothing).WaitResult(5000)
        End Function

        Function ListRecords(ForDomain As String)
            Dim FreenomFunc As System.Func(Of Object, System.Threading.Tasks.Task(Of Object)) = Freenom.ListRecords
            ListRecords = FreenomFunc(ForDomain).WaitResult(5000)
        End Function

        Sub SetRecord(ForDomain As String, RecordType As String, Value As String)
            Dim FreenomFunc As System.Func(Of Object, System.Threading.Tasks.Task(Of Object)) = Freenom.SetRecord
            FreenomFunc({ForDomain, RecordType, Value}).Wait(5000)
        End Sub

        Sub ClearRecord(ForDomain As String, RecordType As String)
            SetRecord(ForDomain, RecordType, "")
        End Sub

    End Class

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
        Dim TestDNS As New FreenomDNS
        TestDNS.Authorize(UserNameConst, PasswordConst)
        TestDNS.SetRecord("test7." & DomainNameConst, "A", "1.2.2.1")
        TestDNS.SetRecord("test8." & DomainNameConst, "A", "1.2.2.3")
        TestDNS.ClearRecord("test3." & DomainNameConst, "A")
        'Debug.Print(TestDNS.ListRecords(DomainNameConst).ToString())
    End Sub
linlin
() автор топика
Ответ на: комментарий от linlin

Добавил такое;

ListDomains: function()
                        {
                        
                            Domains=['domain1.com'];
                            Result.Freenom.dns.listDomains().then(
                                function(Iterator)
                                {
                                    Domains.push(Iterator);
                                }
                            );
                            //Alert('ListDomains: ' + Domains.toString());
                            return Domains;
                        },

, но не работает (

linlin
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.