Расширение Safari для связи с приложением - PullRequest
0 голосов
/ 04 октября 2018

У меня есть простое Java-приложение, которое читает из stdin a и пишет в stdout «Ваше сообщение $ {line}».

fun main(args: Array<String>) {
  val console = Scanner(System.`in`)
  while(console.hasNext()) {
    val message = console.next()
    println("Your message is $message")
    if(message == "quit"){
      break
    }
  }
}

Затем я хочу использовать это приложение в своем расширении для сафари.Я поместил это приложение в задачу внутри класса Singleton

import Foundation
public class Messenger {
    let task = Process()
    let sksjStdin = Pipe()
    let sksjStdout = Pipe()
    static let shared = Messenger()

    init() {
        task.launchPath = "/usr/bin/java"
        task.currentDirectoryPath = "/Users/username"
        task.arguments = ["-jar", "./hello.jar"]
        task.standardInput = sksjStdout
        task.standardOutput = sksjStdin


    }

    public func start() {
        self.task.launch()
    }

    public func stop(){

        self.task.terminate()
    }

    public func sendMessage(message : String) -> String {
        self.sksjStdin.fileHandleForWriting.write(message.data(using: .utf8)!)
        var response = Data()
        repeat{
            response = sksjStdout.fileHandleForReading.availableData
        } while (response.count == 0)

        return String(data : response, encoding: .utf8)!
    }


};

Я поместил в AppDelegate код, который запускает службу

import Cocoa

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {

    func applicationDidFinishLaunching(_ aNotification: Notification) {
        Messenger.shared.start()
        // Insert code here to initialize your application
    }

    func applicationWillTerminate(_ aNotification: Notification) {
        Messenger.shared.stop()
        // Insert code here to tear down your application
     }


}

И затем я хочу передать сообщение этому приложениюиз обработчика расширений сафари, но я не могу этого сделать.Я использую такой код в своем расширении

Messenger.shared.sendMessage(message : "hello from extension")

В отладке XCode зависайте на линии

response = sksjStdout.fileHandleForReading.availableData

Я новичок в программировании для macOS.Может быть, кто-то может объяснить, что не так Спасибо

...