?? cframe.h
字號:
#include <stdlib.h>
#include <string.h>
#include <ace/ACE.h>
#include <ace/CDR_Base.h>
#include <ace/OS.h>
#pragma once
/**
* @name 主幀號定義
* @{
* 主幀號
* 幀號分配說明:
* 背景資料(盤前數據)類幀0x0080—0x008f;
* 行情報價類幀0x0090—0x00af
* 指標類幀0x00b0—0x00cf
* 控制類幀0x00d0—0x00ef
* 資訊類幀0x00f0—0x00ff
*/
#define FRM_MARKET_DATA 0x0092 // 4. 盤中快照
/**
* @name Tag定義
* @{
*/
#define TAG_INTERNAL_CODE 0x00 // 內碼 Dword 4
// #define TAG_TRADE_INDEX_B 0x01 // 成交序號 byte 1
#define TAG_TRADE_INDEX_DW 0x02 // 成交序號 dword 4
#define TAG_TRADE_TIME 0x03 // 交易時間 LongTime 4
#define TAG_TIME_STAMP 0x04 // 時間戳 Timestamp 8 數據產生時間
#define TAG_NEW_PRICE_W 0x05 // 最新價 word 2
#define TAG_NEW_PRICE_D 0x06 // 最新價 Dword 4
#define TAG_NEW_BID_VOL_W 0x07 // 最新成交數量 word 2
#define TAG_NEW_BID_VOL_D 0x08 // 最新成交數量 Dword 4
#define TAG_NEW_BID_VOL_L 0x09 // 最新成交數量 8字節 8
#define TAG_NEW_BID_PRICE_W 0x0a // 最新成交金額 word 2
#define TAG_NEW_BID_PRICE_D 0x0b // 最新成交金額 Dword 4
#define TAG_NEW_BID_PRICE_L 0x0c // 最新成交金額 8字節 8
#define TAG_PRE_CLOSE_PRICE_W 0x0d // 昨收盤價 word 2
#define TAG_PRE_CLOSE_PRICE_D 0x0e // 昨收盤價 Dword 4
#define TAG_OPEN_PRICE_W 0x0f // 開盤價 word 2
#define TAG_OPEN_PRICE_D 0x10 // 開盤價 Dword 4
#define TAG_HIGH_PRICE_W 0x11 // 最高價 word 2
#define TAG_HIGH_PRICE_D 0x12 // 最高價 Dword 4
#define TAG_LOW_PRICE_W 0x13 // 最低價 word 2
#define TAG_LOW_PRICE_D 0x14 // 最低價 Dword 4
#define TAG_COMMISSIONED_PRICE 0x15 // 最好委托價格標識 byte 1
#define TAG_BUY_PRICE_VOL_NUMBER 0x16 // 申買價量個數
#define TAG_BUY_PRICE_W 0x17
#define TAG_BUY_PRICE_D 0x18 //申買價
#define TAG_BUY_VOL_D 0x19
#define TAG_BUY_VOL_L 0x1a //申買量
#define TAG_SALL_PRICE_VOL_NUMBER 0x1c // 申賣價量個數
#define TAG_SALL_PRICE_W 0x1d
#define TAG_SALL_PRICE_D 0x1e //申賣價
#define TAG_SALL_VOL_D 0x1f
#define TAG_SALL_VOL_L 0x20 //申賣量
#define TAG_TRADE_TOTAL_NUMBER 0x24 //成交總量
/** @}*/// Tag定義
// 幀最大大小
#define FRAME_SIZE_MAX 8192
#define FRAME_CNT_MAX 6144
#define FRAME_DATA_START_POSI 6
// 幀頭/幀尾標記
#define STX 2
#define ETX 3
struct XTimeStamp
{
union
{
struct
{
unsigned ms : 10;
unsigned sec : 6;
unsigned min : 6;
unsigned hour : 5;
unsigned day : 5;
unsigned mon : 4;
unsigned year : 15;
unsigned pad : 13;
};
char ph[8];
};
XTimeStamp(int year , int month, int day , int hour ,
int min , int sec , int ms=0, int pad=0)
{
this->year = year;
this->mon = month;
this->day = day;
this->hour = hour;
this->min = min;
this->sec = sec;
this->ms = ms;
this->pad = pad;
}
XTimeStamp()
{
this->year = 0;
this->mon = 0;
this->day = 0;
this->hour = 0;
this->min = 0;
this->sec = 0;
this->ms = 0;
this->pad = 0;
}
XTimeStamp& operator=(const XTimeStamp &Item)
{
this->year = Item.year;
this->mon = Item.mon;
this->day = Item.day;
this->hour = Item.hour;
this->min = Item.min;
this->sec = Item.sec;
this->ms = Item.ms;
this->pad = Item.pad;
return *this;
}
};
typedef struct stQuickDataStrc
{
ACE_CDR::ULong dwInternal; //內碼
XTimeStamp tTimeStamp;//時間戳
long dwClosePrice; //昨收盤價
long dwOpenPrice; //開盤價
long dwHighPrice; //最高價
long dwlowPrice; //最低價
long dwNewPrice; //最新價
ACE_CDR::ULong dwTradeTime; //交易時間
unsigned char bFlag1; //最好委托價格標識
unsigned char bBidPriceLevel; //申買價量個數
long dwBidPx[5]; //申買價
long long llBidSize[5]; //申買量
unsigned char bSallBidPriceCount; //申賣價量個數
long dwOfferPx[5]; //申賣價
long long llOfferSize[5]; //申賣量
long llTradeTotal; //成交總量
} QuickDataStrc;
//包的總數、當前包號
class CFrame
{
public:
CFrame ()
{
memset (pchDataCache, 0, sizeof (ACE_CDR::Char) * FRAME_SIZE_MAX);
pshFrameLen =
(ACE_CDR::UShort *) (pchDataCache + sizeof (ACE_CDR::UShort) * 2);
m_frameLen = 0;
//
//TODO: 在此處添加構造函數代碼
//
}
~CFrame ()
{
}
public:
int AddHead (ACE_CDR::UShort wFrameId, ACE_CDR::UShort wSign);
int AddData (ACE_CDR::UShort wDataId, ACE_CDR::UShort dDataId,
ACE_CDR::UShort wDataLen, ACE_CDR::Char * pchDataValue);
ACE_CDR::Char * GetDataBuf (void);
ACE_CDR::UShort GetDataLen (void);
void AddCrcCheckSum ();
void TranslateData ();
private:
ACE_CDR::Char pchDataCache[FRAME_SIZE_MAX]; //幀的數據字段和校驗字段緩沖
ACE_CDR::Char m_frameBuffer[FRAME_SIZE_MAX]; //幀數據緩沖
ACE_CDR::UShort * pshFrameLen; //指向幀數據長度的指針
ACE_CDR::UShort m_frameLen; //可變幀的幀長度
};
//typedef int (*Fuc_SendFrmData)(const void *pchDataFuf, ACE_CDR::UShort ushDataLen);
class CCreateFrame
{
public:
CCreateFrame (int cnt_max = FRAME_CNT_MAX)
{
pFrmData = NULL;
//SendFrmData = parSendFrmData;
//
//TODO: 在此處添加構造函數代碼
//
}
~CCreateFrame ()
{
if (pFrmData != NULL)
{
delete pFrmData;
pFrmData = NULL;
}
}
public:
//void SetFrmCutLen(ACE_CDR::UShort pshLen); //設置分割內容幀的長度
template < typename SendFunc > void SendFrm (); //發送新建的幀
bool CreateNewsFrm (QuickDataStrc * pNwTrans); //創建新聞幀
private:
void PackNewsTitleFrm (CFrame * pFrm, QuickDataStrc * pNwTrans);
public:
CFrame *pFrmData; //幀數組
};
/*
*組播幀數據
*/
template < typename SendFunc > void
CCreateFrame::SendFrm ()
{
ACE_CDR::Char * pchDataBuf = NULL;
ACE_CDR::UShort ushLen;
if (pFrmData == NULL)
{
return;
}
//獲得幀數據和長度
pchDataBuf = pFrmData[n].GetDataBuf ();
ushLen = pFrmData[n].GetDataLen ();
//發送組播數據pchDataBuf, 長度ushLen
SendFunc ()((void *) pchDataBuf, ushLen);
//清除原有的幀
delete[]pFrmData;
pFrmData = NULL;
};
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -