#ifndef __USER_INTERFACE_THREAD_H_INCLUDED__
#define __USER_INTERFACE_THREAD_H_INCLUDED__

#include <stdint.h>
#include "socket.h"
#include "threads.h"
#include "elmo.h"
#include "control_thread.h"

class UserInterfaceThread : public Thread {
public:
	UserInterfaceThread (uint16_t telnetPortNumber, Elmo& winch, Elmo& levelWind,
		ControlThread&  controller, LogginThread& logger)
		: m_Controller(controller),
		  m_Logger(logger),
		  m_TelnetPortNumber(telnetPortNumber),
		  m_Winch(winch),
		  m_LevelWind(levelWind) {}

	~UserInterfaceThread(void) {}

protected:
	virtual void* Run(void*);

private:
	void 			processCommands(tcp_socket telnetStream);
	string			nextToken(const string& line,
						const string& delim,
						string::size_type& first);

	ControlThread&	m_Controller;
	LoggingThread&	m_Logger;
	uint16_t		m_TelnetPortNumber;
	Elmo&			m_Winch;
	Elmo&			m_LevelWind;
};

#endif /* __USER_INTERFACE_THREAD_H_INCLUDED__ */
