This is my subscribe ().
bool ListenerEg::subscribe(IUserSession *aSession)
{
bool ret = false;
IMessage *msg = ConnectionManagerEx::getMessageFactory()->createMessage((char *)(aSession->getSessionID()),(char *)IFixDefs::MSGTYPE_MARKETDATAREQUEST);
msg->setValue(IFixDefs::FLDTAG_MDREQID, aSession->getNextRequestID()); //request id
msg->setValue(IFixDefs::FLDTAG_SUBSCRIPTIONREQUESTTYPE , IFixDefs::SUBSCRIPTIONREQUESTTYPE_SUBSCRIBE); //request type
msg->setValueLong(IFixDefs::FLDTAG_MARKETDEPTH, (int)0); // required field
msg->setValueLong(IFixDefs::FLDTAG_MDUPDATETYPE, (int)0); // required field
IFieldGroupList* grl = ConnectionManagerEx::getMessageFactory()->createFieldGroupList();
// that is for TICKs
IFieldGroup *gr;
gr = ConnectionManagerEx::getMessageFactory()->createFieldGroup();
gr->setValue(IFixDefs::FLDTAG_MDENTRYTYPE, IFixDefs::MDENTRYTYPE_BID);
grl->put(gr);
ConnectionManagerEx::freeObject(gr);
gr = ConnectionManagerEx::getMessageFactory()->createFieldGroup();
gr->setValue(IFixDefs::FLDTAG_MDENTRYTYPE, IFixDefs::MDENTRYTYPE_ASK);
grl->put(gr);
ConnectionManagerEx::freeObject(gr);
gr = ConnectionManagerEx::getMessageFactory()->createFieldGroup();
gr->setValue(IFixDefs::FLDTAG_MDENTRYTYPE, IFixDefs::MDENTRYTYPE_LOW);
grl->put(gr);
ConnectionManagerEx::freeObject(gr);
gr = ConnectionManagerEx::getMessageFactory ()->createFieldGroup ();
gr->setValue (IFixDefs::FLDTAG_MDENTRYTYPE, IFixDefs::MDENTRYTYPE_HIGH);
grl->put (gr);
ConnectionManagerEx::freeObject (gr);
// -----------------
/*
// that is for bars
gr = ConnectionManagerEx::getMessageFactory()->createFieldGroup();
gr->setValue(IFixDefs::FLDTAG_MDENTRYTYPE, IFixDefs::MDENTRYTYPE_BIDOPEN);
grl->put(gr);
gr = ConnectionManagerEx::getMessageFactory()->createFieldGroup();
gr->setValue(IFixDefs::FLDTAG_MDENTRYTYPE, IFixDefs::MDENTRYTYPE_BIDCLOSE);
grl->put(gr);
gr = ConnectionManagerEx::getMessageFactory()->createFieldGroup();
gr->setValue(IFixDefs::FLDTAG_MDENTRYTYPE, IFixDefs::MDENTRYTYPE_BIDHIGH);
grl->put(gr);
gr = ConnectionManagerEx::getMessageFactory()->createFieldGroup();
gr->setValue(IFixDefs::FLDTAG_MDENTRYTYPE, IFixDefs::MDENTRYTYPE_BIDLOW);
grl->put(gr);
gr = ConnectionManagerEx::getMessageFactory()->createFieldGroup();
gr->setValue(IFixDefs::FLDTAG_MDENTRYTYPE, IFixDefs::MDENTRYTYPE_ASKOPEN);
grl->put(gr);
gr = ConnectionManagerEx::getMessageFactory()->createFieldGroup();
gr->setValue(IFixDefs::FLDTAG_MDENTRYTYPE, IFixDefs::MDENTRYTYPE_ASKCLOSE);
grl->put(gr);
gr = ConnectionManagerEx::getMessageFactory()->createFieldGroup();
gr->setValue(IFixDefs::FLDTAG_MDENTRYTYPE, IFixDefs::MDENTRYTYPE_ASKHIGH);
grl->put(gr);
gr = ConnectionManagerEx::getMessageFactory()->createFieldGroup();
gr->setValue(IFixDefs::FLDTAG_MDENTRYTYPE, IFixDefs::MDENTRYTYPE_ASKLOW);
grl->put(gr);
*/
msg->setValue(IFixDefs::FLDTAG_NOMDENTRYTYPES, grl);
ConnectionManagerEx::freeObject(grl);
grl = ConnectionManagerEx::getMessageFactory()->createFieldGroupList();
for (int i = 0; i < gCurrCount; ++i)
{
gr = ConnectionManagerEx::getMessageFactory()->createFieldGroup();
gr->setValue(IFixDefs::FLDTAG_SYMBOL, gCurrencies[i]);
grl->put(gr);
ConnectionManagerEx::freeObject(gr);
}
msg->setValue(IFixDefs::FLDTAG_NORELATEDSYM, grl);
ConnectionManagerEx::freeObject(grl);
grl = ConnectionManagerEx::getMessageFactory()->createFieldGroupList();
gr = ConnectionManagerEx::getMessageFactory()->createFieldGroup();
gr->setValue(IFixDefs::FLDTAG_TRADINGSESSIONID,"FXCM" );
gr->setValue(IFixDefs::FLDTAG_TRADINGSESSIONSUBID, "PriceServer");
grl->put(gr);
ConnectionManagerEx::freeObject(gr);
msg->setValue(IFixDefs::FLDTAG_NOTRADINGSESSIONS, grl);
ConnectionManagerEx::freeObject(grl);
msg->setValueLong(IFixDefs::FLDTAG_FXCMTIMINGINTERVAL, IFixDefs::FXCMTIMINGINTERVAL_TICK);
// msg->setValueLong(IFixDefs::FLDTAG_FXCMTIMINGINTERVAL, IFixDefs::FXCMTIMINGINTERVAL_MIN30);
CUTCDate udt;
// Obtain coordinated universal time:
char szDate[40], szTime[40];
udt.toString(szDate, 40);
SYSTEMTIME st;
GetSystemTime(&st);
st.wMinute = 0;
st.wSecond = 0;
CUTCTimeOnly utm(&st);
utm.toString(szTime, 40);
// fill out UTC date
msg->setValue(IFixDefs::FLDTAG_FXCMSTARTDATE, szDate);
// fill out UTC time
msg->setValue(IFixDefs::FLDTAG_FXCMSTARTTIME, szTime);
try
{
const char *status = aSession->send(msg);
char str[256];
sprintf(str, "Message 2 sent. Request DateTime is %s-%s\nReturn Status='%s'\n", szDate, szTime, status ? status : "NULL");
ListenerEg:

rint(str);
ret = true;
}
catch (GenericException& e)
{
ListenerEg:

rint ("Send method fails\n");
ListenerEg:

rint (e.getMessage());
ListenerEg:

rint ("\n");
ret = false;
}
ConnectionManagerEx::freeObject(msg);
return ret;
}