71 lines
1.6 KiB
C++
71 lines
1.6 KiB
C++
/* Copyright (C) 2013 Interactive Brokers LLC. All rights reserved. This code is subject to the terms
|
|
* and conditions of the IB API Non-Commercial License or the IB API Commercial License, as applicable. */
|
|
|
|
#pragma once
|
|
#ifndef eposixclientsocket_def
|
|
#define eposixclientsocket_def
|
|
|
|
#include "EClient.h"
|
|
#include "EClientMsgSink.h"
|
|
#include "ESocket.h"
|
|
|
|
class EWrapper;
|
|
class EReaderSignal;
|
|
|
|
class TWSAPIDLLEXP EClientSocket : public EClient, public EClientMsgSink
|
|
{
|
|
protected:
|
|
virtual void prepareBufferImpl(std::ostream&) const;
|
|
virtual void prepareBuffer(std::ostream&) const;
|
|
virtual bool closeAndSend(std::string msg, unsigned offset = 0);
|
|
|
|
public:
|
|
|
|
explicit EClientSocket(EWrapper *ptr, EReaderSignal *pSignal = 0);
|
|
~EClientSocket();
|
|
|
|
bool eConnect( const char *host, unsigned int port, int clientId = 0, bool extraAuth = false);
|
|
// override virtual funcs from EClient
|
|
void eDisconnect();
|
|
|
|
bool isSocketOK() const;
|
|
int fd() const;
|
|
bool asyncEConnect() const;
|
|
void asyncEConnect(bool val);
|
|
ESocket *getTransport();
|
|
|
|
private:
|
|
|
|
bool eConnectImpl(int clientId, bool extraAuth, ConnState* stateOutPt);
|
|
|
|
private:
|
|
void encodeMsgLen(std::string& msg, unsigned offset) const;
|
|
public:
|
|
bool handleSocketError();
|
|
int receive( char* buf, size_t sz);
|
|
|
|
public:
|
|
// callback from socket
|
|
void onSend();
|
|
void onError();
|
|
|
|
private:
|
|
|
|
void onClose();
|
|
|
|
private:
|
|
|
|
int m_fd;
|
|
bool m_allowRedirect;
|
|
const char* m_hostNorm;
|
|
bool m_asyncEConnect;
|
|
EReaderSignal *m_pSignal;
|
|
|
|
//EClientMsgSink implementation
|
|
public:
|
|
void serverVersion(int version, const char *time);
|
|
void redirect(const char *host, int port);
|
|
};
|
|
|
|
#endif
|