77import time
88import numpy as np
99
10- from mne . io . meas_info import create_info
10+ from .. utils import logger , fill_doc
1111
1212def _buffer_recv_worker (client ):
1313 """Worker thread that constantly receives buffers.
@@ -45,19 +45,18 @@ class _BaseClient(object):
4545 """
4646
4747 def __init__ (self , identifier , port = None , tmin = None , tmax = np .inf ,
48- buffer_size = 1000 , verbose = None ): # noqa: D102
48+ wait_max = 10 , buffer_size = 1000 , verbose = None ): # noqa: D102
4949 self .identifier = identifier
5050 self .port = port
5151 self .tmin = tmin
5252 self .tmax = tmax
53+ self .wait_max = wait_max
5354 self .buffer_size = buffer_size
5455 self .verbose = verbose
55- self .create_info ()
56-
5756
5857 def __enter__ (self ): # noqa: D105
5958
60- # connect to FieldTrip buffer
59+ # connect to buffer
6160 logger .info ("Client: Waiting for server to start" )
6261 start_time , current_time = time .time (), time .time ()
6362 success = False
@@ -72,34 +71,60 @@ def __enter__(self): # noqa: D105
7271 time .sleep (0.1 )
7372
7473 if not success :
75- raise RuntimeError ('Could not connect to FieldTrip Buffer' )
74+ raise RuntimeError ('Could not connect to Buffer' )
7675
76+ self .create_info ()
7777 self ._enter_extra ()
7878
7979 return self
8080
81+ def __exit__ (self , type , value , traceback ):
82+ self .disconnect ()
83+
84+ return self
85+
8186 def connect (self ):
8287 pass
8388
8489 def create_info (self ):
8590 pass
8691
87- def _enter_extra ():
88- """For system-specific loading and initializing during the enter
92+ def get_data_as_epoch (self , n_samples = 1024 , picks = None ):
93+ """Return last n_samples from current time.
94+
95+ Parameters
96+ ----------
97+ n_samples : int
98+ Number of samples to fetch.
99+ %(picks_all)s
100+
101+ Returns
102+ -------
103+ epoch : instance of Epochs
104+ The samples fetched as an Epochs object.
105+
106+ See Also
107+ --------
108+ mne.Epochs.iter_evoked
89109 """
90110 pass
91111
112+ def get_measurement_info (self ):
113+ """Return the measurement info.
114+
115+ Returns
116+ -------
117+ self.info : dict
118+ The measurement info.
119+ """
120+ return self .info
121+
92122 def iter_raw_buffers (self ):
93123 """Return an iterator over raw buffers.
94124 """
95125 pass
96126
97- def _push_raw_buffer (self , raw_buffer ):
98- """Push raw buffer to clients using callbacks."""
99- for callback in self ._recv_callbacks :
100- callback (raw_buffer )
101-
102- def _register_receive_callback (self , callback ):
127+ def register_receive_callback (self , callback ):
103128 """Register a raw buffer receive callback.
104129
105130 Parameters
@@ -111,7 +136,7 @@ def _register_receive_callback(self, callback):
111136 if callback not in self ._recv_callbacks :
112137 self ._recv_callbacks .append (callback )
113138
114- def _start_receive_thread (self , nchan ):
139+ def start_receive_thread (self , nchan ):
115140 """Start the receive thread.
116141
117142 If the measurement has not been started, it will also be started.
@@ -128,7 +153,7 @@ def _start_receive_thread(self, nchan):
128153 self ._recv_thread .daemon = True
129154 self ._recv_thread .start ()
130155
131- def _stop_receive_thread (self , stop_measurement = False ):
156+ def stop_receive_thread (self , stop_measurement = False ):
132157 """Stop the receive thread.
133158
134159 Parameters
@@ -140,7 +165,7 @@ def _stop_receive_thread(self, stop_measurement=False):
140165 self ._recv_thread .stop ()
141166 self ._recv_thread = None
142167
143- def _unregister_receive_callback (self , callback ):
168+ def unregister_receive_callback (self , callback ):
144169 """Unregister a raw buffer receive callback.
145170
146171 Parameters
@@ -150,3 +175,14 @@ def _unregister_receive_callback(self, callback):
150175 """
151176 if callback in self ._recv_callbacks :
152177 self ._recv_callbacks .remove (callback )
178+
179+ def _enter_extra (self ):
180+ """For system-specific loading and initializing after connect but
181+ during the enter.
182+ """
183+ pass
184+
185+ def _push_raw_buffer (self , raw_buffer ):
186+ """Push raw buffer to clients using callbacks."""
187+ for callback in self ._recv_callbacks :
188+ callback (raw_buffer )
0 commit comments