Mini Shell
3
<�Zc� � @ sr d dl Z d dlmZmZ d dlmZ d dlmZ d dlm Z m
Z
e� ZdZG dd� de
�ZG d d
� d
e
ed�ZdS )� N)�ABCMeta�abstractmethod)�App)�get_simpleline_logger)�InputReceivedSignal�InputReadySignalZSimplelineInputThreadc sn e Zd ZdZdZ� fdd�Zedd� �Zdd� Zed d
� �Z dd� Z
ddd�Zdd� Zdd� Z
dd� Z� ZS )�InputThreadManagerzManager object for input threads.
This manager helps with concurrent user input (still you really shouldn't do that).
Nc s t � j� g | _d| _d S )NF)�super�__init__�_input_stack�_processing_input)�self)� __class__� �%/usr/lib/python3.6/input_threading.pyr
* s
zInputThreadManager.__init__c C s t � }|| _|j� d S )N)r �_InputThreadManager__instance�_post_init_configuration)�cls�instancer r r �create_new_instance/ s z&InputThreadManager.create_new_instancec C s t j� jt| jj� d S )N)r �get_event_loopZregister_signal_handlerr r �_input_received_handler)r
r r r r 6 s
z+InputThreadManager._post_init_configurationc C s | j s| j� | j S )N)r r )r r r r �get_instance: s zInputThreadManager.get_instancec C sb | j j� }|j|j� |jr&|jj� x&| j D ]}|j� |jr.|jj� q.W | j j� d| _d S )NF) r �pop�emit_input_ready_signal�data�thread�join�emit_failed_input_ready_signal�clearr )r
�signal�args�
thread_object�tr r r r A s
z*InputThreadManager._input_received_handlerTc C s"