2013-01-17 16 views
5

Czy istnieje sposób, aby złapać CTRL + C w aplikacji konsoli dart?Ctrl + C w aplikacji konsoli dart

Na przykład, naciśnij CTRL + C wysłać czystej „zamknięcie” pakiet do klientów websocket z serwera zamiast po prostu brutalnie zamykania gniazd.

+0

możliwe duplikat [Jak złapać SIGINT za prąd w Dart?] (Http://stackoverflow.com/questions/18448306/how-to-catch-sigint-for-the- current-in-dart) –

Odpowiedz

2

Mam dookoła, a ja myślę, że, że odpowiedź, w tej chwili jest nie.

można przechwytywać stdin, na przykład:

import 'dart:io'; 

void main() { 
    stdin.onData =() => print(stdin.read()); 
} 

ale ten nie reaguje na CTRL + C.

W innych process.dart (część biblioteki dart:io) definiuje różne sygnały, takie jak SIGQUIT, i onExit() zwrotna, ale jest stosowane do sterowania procesami dzieci, zamiast procesu hosta.

+0

Doszedłem do tego samego wniosku. Miałem nadzieję, że w procesie hosta mogę zdefiniować w eXit, ale tak się nie wydaje. – samiy

+0

Warto byłoby przesłać zapytanie o funkcję na [http://dartbug.com] (http://dartbug.com). –

+0

czy ktoś to zrobił? – paulecoyote

2

To jest teraz dostępny

znalazłem następujący kod testowy na Unified Diff: tests/standalone/io/signals_test_script.dart

import "dart:io"; 

void main(args) { 
    int usr1Count = int.parse(args[0]); 
    int usr2Count = int.parse(args[1]); 
    var sub1; 
    var sub2; 
    void check() { 
    if (usr1Count < 0 || usr2Count < 0) exit(1); 
    if (usr1Count == 0 && usr2Count == 0) { 
     sub1.cancel(); 
     sub2.cancel(); 
    } 
    print("ready"); 
    } 
    sub1 = ProcessSignal.SIGUSR1.watch().listen((signal) { 
    if (signal != ProcessSignal.SIGUSR1) exit(1); 
    usr1Count--; 
    check(); 
    }); 
    sub2 = ProcessSignal.SIGUSR2.watch().listen((signal) { 
    if (signal != ProcessSignal.SIGUSR2) exit(1); 
    usr2Count--; 
    check(); 
    }); 
    check(); 
} 

Mam nadzieję, że to zostanie wydany wkrótce.

Zobacz także How to catch SIGINT for the current in Dart?

Powiązane problemy