2011-04-23 2 views
1

Je prévois de passer bientôt au codage autour de l'entrée des périphériques série et j'ai été très heureux de trouver Ruby-serialport. L'API semble facile à utiliser, mais je suis un peu confus sur la façon d'adopter une approche basée sur les événements pour recevoir des données.Ruby-Serialport: Écoute de l'entrée

Je veux faire quelque chose sur les données chaque fois qu'un \n apparaît, mais la lecture en cours() dans la bibliothèque semble juste vider tout ce qui est à l'écran. Ce que je cherche vraiment, c'est un moyen de déclencher une fonction quand de nouvelles données arrivent.

Répondre

4

Ruby et le système d'exploitation prennent déjà en charge la partie déclenchée par les événements des E/S série.

La classe SerialPort mis en œuvre par votre bijou est un enfant de IO, est déjà poignée de lecture jusqu'à ... les nouvelles lignes quelque chose comme ceci:

sp = SerialPort.new "/dev/my-modem", 9600 
... 
while s = sp.gets 
    .. 
end 
+0

Doux! Merci mec! Donc, cela mettrait toute la ligne pour chaque itération? –

+1

put (s) # la question semble trop facile, peut-être ai-je mal compris. Je suis content que tu utilises Ruby! Continuez à poser les questions ... – DigitalRoss

+0

Merci @digitalross, il est bon d'avoir un commentaire positif ici de temps en temps =) –

-1

Je pense que vous devez créer un autre thread dans votre application en écoutant des données.

Ensuite, vous devez gérer les données entrantes - mettre dans une sorte de tableau.

Utilisez le modèle de conception Observer pour suivre l'état de la matrice avec des données - alors vous aurez votre fonctionnalité - rappelez-vous que ruby ​​n'est pas un langage événementiel.

+0

Juste par curiosité ... ce serait un meilleur langage pour aborder cela avec alors? Je n'ai pas choisi le favoritisme, juste la facilité d'utilisation. –

+0

Je pense que Java ferait l'affaire. – Esse

+1

En quoi Ruby est-il plus ou moins "axé sur les événements" que n'importe quel autre langage de programmation populaire? – DigitalRoss