
#ifndef __SLAVE_XXX__
#define __SLAVE_XXX__

#include <vcl.h>
#pragma hdrstop

#include <process.h>
#include "msg.h"

#include "..\..\Lib\iidk.h"
#pragma comment(lib, "..\..\Lib\CBuilder\iidk.lib")



#include "def.h"
#include <string>

using namespace std;

class Slave
{
 protected:
   bool IsConnectRunning;

   int CLASS_TYPE;

   string m_port;
   string m_ip;

   inline static void __stdcall MyFunc(LPCTSTR str);
   inline static void __stdcall AsyncProc(const char* msg,const char* slave_id,unsigned long user_param);

 public:

   // окно - через которое будут слаться все сообщения
   static HWND hWnd;

   bool IsConnected()
   {
      return ::IsConnected(slave_id.c_str());
   }

   Slave(string slave_id_value = "");
   ~Slave();

   string slave_id;
   bool Connect(string ip,string port);
   void AsyncConnect(string ip,string port);
   void Disconnect();

   virtual void OnProcessMsg(const char* msg) {}
   virtual void OnConnected() {};
   virtual void OnDisconnected() {} ;

   template<class T>
   bool Send(T &obj)
   {
     if (IsConnected())
         return SendMsg(slave_id.c_str(),obj.MsgToString());
     return false;
   }

   string GetIp() { return m_ip;}

};

HWND Slave::hWnd = NULL;


#endif