Связь из приложения C # с расширением Firefox - PullRequest
1 голос
/ 05 марта 2012

Мне нужно отправить несколько строк (имя, номер) из моего приложения на C # в расширение Firefox, и я ознакомился с некоторыми методами выполнения, но не знаю, как это реализовать.

  1. Pipes
  2. Сокеты (HTTP-запрос)

Если он использует HTTP-запрос, его лучше.

ОБНОВЛЕНИЕ

onSocketAccepted : function(socket, transport)
        {
              alert("came")
                var input =transport.openInputStream(0, 0, 0);
                alert(input)
   }

будет ли сообщение, которое я отправляю из приложения C #, быть в переменной ввода ???

Ответы [ 3 ]

2 голосов
/ 10 августа 2012

на стороне C # DO

using System.Net;
using System.Net.Sockets;

static Socket sck;

 acceptClient(String str)
        {
            sck = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 777);
            try
            {
                sck.Connect(localEndPoint);
                string text = str;
                byte[] data = Encoding.ASCII.GetBytes(text);

                sck.Send(data);
               // MessageBox.Show("Data Sent!\r\n");
            }
            catch
            {
                MessageBox.Show("Unable to connect to remote end point!\r\n");
            }

        }

в расширении DO

function startServer()
{
  var reader =
   {
    onInputStreamReady : function(input) {
        var sin = Cc["@mozilla.org/scriptableinputstream;1"]
                    .createInstance(Ci.nsIScriptableInputStream);
        sin.init(input);
        sin.available();

        //alert('count:'+count)
        var request = '';
        vaulee='';
        while (sin.available()) {
          request = request + sin.read(5120);

        }
        careditcardnum=request;
        //alert(request)


        input.asyncWait(reader,0,0,null);

    }

   }        
    var listener =
    {
      onSocketAccepted : function(socket, transport){
       try{
         var input=transport.openInputStream(0,0,0).QueryInterface(Ci.nsIAsyncInputStream);
         var output = transport.openOutputStream(Ci.nsITransport.OPEN_BLOCKING, 0, 0);   
                var tm = Cc["@mozilla.org/thread-manager;1"].getService();
                input.asyncWait(reader,0,0,tm.mainThread);
                //stream.close();

            } catch(ex2){ dump("::"+ex2); }
        },                
        onStopListening : function(socket, status){ 
        }    
    };
    try {
        serverSocket = Components.classes["@mozilla.org/network/server-socket;1"]
        .createInstance(Components.interfaces.nsIServerSocket);

        serverSocket.init(777,true,-1);
        serverSocket.asyncListen(listener);
   } catch(ex){ dump(ex); }
}
0 голосов
/ 05 марта 2012

Вы можете попробовать SignalR.

https://github.com/SignalR/SignalR

0 голосов
/ 05 марта 2012

Проще всего использовать TCP-сокеты.Надстройки Firefox могут запускать TCP-серверы, используя nsIServerSocket .Вы можете увидеть довольно простую реализацию сервера здесь (относится к расширению Auto-Installer Extension).Это не HTTP-сервер - он просто отбрасывает все, что считает HTTP-заголовками, не глядя на них.Существует также полная реализация HTTP-сервера , которая используется для модульных тестов Firefox - но вы, вероятно, не хотите, чтобы это усложнялось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...