📄 stockclient.c
字号:
#include "gmclient.h"#include "stockclient.h"#include "stocktype.h"#include "jszb.h"stockClient::stockClient(char* host,int port,FILE* init_log):TcpClient(host,port,init_log){ loginserverflag = 0; disconnectflag = 0; stockerrno=0;}stockClient::~stockClient(){}int stockClient::read_all(void *buf,int n){ int nleft; int nbytes; char *ptr; ptr=(char *)buf; nleft = n; for(;nleft > 0;){ nbytes = receive(ptr, nleft); if(nbytes < 0){ if(errno == EINTR) nbytes = 0; else return (-1); }else if(nbytes == 0) break; nleft-=nbytes; ptr+=nbytes; } return(n-nleft);}int stockClient::write_all(void *buf,int n){ int nleft; int nbytes; char *ptr; nleft = n; ptr=(char *)buf; for(;nleft > 0;){ nbytes = send(ptr,nleft); if(nbytes <= 0){ if(errno == EINTR) nbytes = 0; else return(-1); } nleft-=nbytes; ptr+=nbytes; } return(n);}int stockClient::dealDayKline(char *code){ int nbytes; int retnum=0; int tmpret;// char tmp[256]; char cmdbuf[MAX_BUF_LEN]; char rspbuf[MAX_BUF_LEN]; char *databuf; if(!loginserverflag) return FAIL; if(strlen(code) != SHCODELEN && strlen(code) != SZCODELEN) return FAIL; bzero(cmdbuf,MAX_BUF_LEN); bzero(rspbuf,MAX_BUF_LEN); cmdbuf[0]=DAYKLINECMD; if(strlen(code) == SHCODELEN){ if(!codeToName(SHBZ,code)) return FAIL; cmdbuf[1]='1'; strncpy(&cmdbuf[2],code,SHCODELEN); } else{ if(!codeToName(SZBZ,code)) return FAIL; cmdbuf[1]='2'; strncpy(&cmdbuf[2],code,SZCODELEN); } // info("connect from %s ", get_peer_addr(client_socket_fd)); fprintf(stderr,"send command.\n"); nbytes=send(cmdbuf,MAX_BUF_LEN); if(nbytes < 0){ warn("send command error %s",strerror(errno)); return FAIL; } fprintf(stderr,"receive respon.\n"); nbytes=receive(rspbuf,MAX_BUF_LEN); if(nbytes < 0){ warn("receive respon error %s",strerror(errno)); return FAIL; } if(rspbuf[0]=='0') return FAIL; if(rspbuf[0]==99){ bcopy(&rspbuf[1],&tmpret,sizeof(int)); retnum=ntohl(tmpret); if(retnum <= 0) return FAIL; fprintf(stderr,"receive data %d.\n",retnum); databuf= (char *)g_malloc(sizeof(char)*retnum*KLINERECLEN); nbytes=read_all(databuf,retnum*KLINERECLEN);// nbytes=receive(databuf,retnum*KLINERECLEN); if(nbytes < 0){ warn("receive data error %s",strerror(errno)); return FAIL; } if(stock) g_free(stock); stock=(STOCK *)g_malloc(sizeof(STOCK)*(retnum+10)); int i; char *ptr; ptr=databuf; for(i=1;i<=retnum;i++){ bcopy(ptr,&tmpret,4); stock[i].jydate=ntohl(tmpret); ptr+=4; bcopy(ptr,&tmpret,4); stock[i].kpj=ntohl(tmpret); ptr+=4; bcopy(ptr,&tmpret,4); stock[i].zgj=ntohl(tmpret); ptr+=4; bcopy(ptr,&tmpret,4); stock[i].zdj=ntohl(tmpret); ptr+=4; bcopy(ptr,&tmpret,4); stock[i].spj=ntohl(tmpret); ptr+=4; bcopy(ptr,&tmpret,4); stock[i].cjsl=ntohl(tmpret); ptr+=4; bcopy(ptr,&tmpret,4); stock[i].cjje=ntohl(tmpret); ptr+=4; } g_free(databuf); } stocksum=retnum; strcpy(stockcode,code); klinewidth=9; areastart=stocksum-50; mouselinex=stocksum; createJszbData(); return retnum; }int stockClient::dealNameTbl(){ int nbytes,i; int shretnum=0,szretnum=0; int tmpret; char *ptr; float jg;// char tmp[256]; char cmdbuf[MAX_BUF_LEN]; char rspbuf[MAX_BUF_LEN]; char *databuf; if(!loginserverflag) return FAIL; bzero(cmdbuf,MAX_BUF_LEN); bzero(rspbuf,MAX_BUF_LEN); ptr=cmdbuf; *ptr=NAMETBLCMD; ptr++; nbytes=send(cmdbuf,MAX_BUF_LEN); if(nbytes < 0){ warn("send command error %s",strerror(errno)); return FAIL; } nbytes=receive(rspbuf,MAX_BUF_LEN); if(nbytes < 0){ warn("receive respon error %s",strerror(errno)); return FAIL; } ptr=rspbuf; if(*ptr==RSPFAIL) return FAIL; if(*ptr==RSPTRUE){ ptr++; bcopy(ptr,&tmpret,sizeof(int)); shretnum=ntohl(tmpret); ptr+=LONGLEN; bcopy(ptr,&tmpret,sizeof(int)); szretnum=ntohl(tmpret); if(shretnum <= 0 && szretnum<=0) return FAIL; fprintf(stderr,"receive data %d %d.\n",shretnum,szretnum); databuf= (char *)g_malloc(sizeof(char)*shretnum*SHNAMETBLRECLEN); nbytes=read_all(databuf,shretnum*SHNAMETBLRECLEN); if(nbytes < 0){ warn("receive data error %s",strerror(errno)); return FAIL; } if(shtbl) g_free(shtbl); shtbl=(STOCKNAMETBL *)g_malloc(sizeof(STOCKNAMETBL)*(shretnum+10)); ptr=databuf; for(i=1;i<=shretnum;i++){ shtbl[i].type=*ptr; ptr++; bcopy(ptr,shtbl[i].code,SHCODELEN); ptr+=SHCODELEN; bcopy(ptr,shtbl[i].name,STOCKNAMELEN); ptr+=STOCKNAMELEN; bcopy(ptr,&tmpret,4); jg=ntohl(tmpret); jg/=1000; shtbl[i].zsp=jg; ptr+=LONGLEN; } g_free(databuf); databuf= (char *)g_malloc(sizeof(char)*szretnum*SZNAMETBLRECLEN); nbytes=read_all(databuf,szretnum*SZNAMETBLRECLEN); if(nbytes < 0){ warn("receive data error %s",strerror(errno)); return FAIL; } if(sztbl) g_free(sztbl); sztbl=(STOCKNAMETBL *)g_malloc(sizeof(STOCKNAMETBL)*(szretnum+10)); ptr=databuf; for(i=1;i<=szretnum;i++){ sztbl[i].type=*ptr; ptr++; bcopy(ptr,sztbl[i].code,SZCODELEN); ptr+=SZCODELEN; bcopy(ptr,sztbl[i].name,STOCKNAMELEN); ptr+=STOCKNAMELEN; bcopy(ptr,&tmpret,4); jg=ntohl(tmpret); jg/=1000; sztbl[i].zsp=jg; ptr+=LONGLEN; } g_free(databuf); } shstocksum=shretnum; szstocksum=szretnum; return SUCCESS; }int stockClient::dealLogin(char *tmpuser,char *tmppassword){ int nbytes; char *ptr; int rq; int time; int err; char cmdbuf[MAX_BUF_LEN]; char rspbuf[MAX_BUF_LEN]; if(loginserverflag) return FAIL; strcpy(user,tmpuser); strcpy(password,tmppassword); bzero(cmdbuf,MAX_BUF_LEN); bzero(rspbuf,MAX_BUF_LEN); ptr=cmdbuf; *ptr=LOGINCMD; ptr++; bcopy(user,ptr,strlen(user)); ptr+=8; bcopy(password,ptr,strlen(password)); ptr+=6; rq=20000101; rq=htonl(time); bcopy(&rq,ptr,sizeof(rq)); ptr+=LONGLEN; time=930; time=htonl(time); bcopy(&time,ptr,sizeof(time)); nbytes=send(cmdbuf,MAX_BUF_LEN); if(nbytes < 0){ warn("send command error %s",strerror(errno)); return FAIL; } nbytes=receive(rspbuf,MAX_BUF_LEN); if(nbytes < 0){ warn("receive respon error %s",strerror(errno)); return FAIL; } if(rspbuf[0]==RSPTRUE){ loginserverflag = SUCCESS; return SUCCESS; } else{ bcopy(&rspbuf[1],&err,sizeof(err)); stockerrno=ntohl(err); return FAIL; }}int stockClient::dealDisconnect(){ int nbytes; char *ptr; char cmdbuf[MAX_BUF_LEN]; char rspbuf[MAX_BUF_LEN]; if(!status) return FAIL; // if(!loginserverflag) return FAIL; if(disconnectflag) return FAIL; bzero(cmdbuf,MAX_BUF_LEN); bzero(rspbuf,MAX_BUF_LEN); ptr=cmdbuf; *ptr=DISCONNECTCMD; ptr++; nbytes=send(cmdbuf,MAX_BUF_LEN); if(nbytes < 0){ warn("send command error %s",strerror(errno)); return FAIL; } nbytes=receive(rspbuf,MAX_BUF_LEN); if(nbytes < 0){ warn("receive respon error %s",strerror(errno)); return FAIL; } if(rspbuf[0]==RSPTRUE){ loginserverflag = FAIL; disconnectflag =SUCCESS; return SUCCESS; } else{ return FAIL; } }int stockClient::dealFsline(char *code){ int nbytes; int retnum=0; int tmpret;// char tmp[256]; char cmdbuf[MAX_BUF_LEN]; char rspbuf[MAX_BUF_LEN]; char *databuf; int i; char *ptr; if(!loginserverflag) return FAIL; if(strlen(code) != SHCODELEN && strlen(code) != SZCODELEN) return FAIL; bzero(cmdbuf,MAX_BUF_LEN); bzero(rspbuf,MAX_BUF_LEN); cmdbuf[0]=FSLINECMD; if(strlen(code) == SHCODELEN){// if(!codeToName(SHBZ,code)) return FAIL; cmdbuf[1]='1'; strncpy(&cmdbuf[2],code,SHCODELEN); } else{// if(!codeToName(SZBZ,code)) return FAIL; cmdbuf[1]='2'; strncpy(&cmdbuf[2],code,SZCODELEN); } // info("connect from %s ", get_peer_addr(client_socket_fd));// fprintf(stderr,"send command.\n"); nbytes=send(cmdbuf,MAX_BUF_LEN); if(nbytes < 0){ warn("send command error %s",strerror(errno)); return FAIL; }// fprintf(stderr,"receive respon.\n"); nbytes=receive(rspbuf,MAX_BUF_LEN); if(nbytes < 0){ warn("receive respon error %s",strerror(errno)); return FAIL; } ptr=rspbuf; if(*ptr==RSPFAIL) return FAIL; if(*ptr==RSPTRUE){ ptr++; readGpmxFromBuf(ptr); ptr+=GPMXRECLEN; bcopy(ptr,&tmpret,sizeof(int)); tracesum=ntohl(tmpret); ptr+=LONGLEN; readTraceFromBuf(ptr); ptr+=TRACERECLEN*TRACERECNUM; bcopy(ptr,&tmpret,sizeof(int)); retnum=ntohl(tmpret); if(retnum <= 0) return FAIL;// fprintf(stderr,"receive data %d.\n",retnum); databuf= (char *)g_malloc(sizeof(char)*retnum*FSRECLEN); nbytes=read_all(databuf,retnum*FSRECLEN);// nbytes=receive(databuf,retnum*FSRECLEN); if(nbytes < 0){ warn("receive data error %s",strerror(errno)); return FAIL; } ptr=databuf; for(i=0;i<retnum && i<MAXFSLINENUM;i++){ bcopy(ptr,&tmpret,sizeof(tmpret)); fs[i].time=ntohl(tmpret); ptr+=LONGLEN; bcopy(ptr,&tmpret,sizeof(tmpret)); fs[i].price=ntohl(tmpret); ptr+=LONGLEN; bcopy(ptr,&tmpret,sizeof(tmpret)); fs[i].avgprice=ntohl(tmpret); ptr+=LONGLEN; bcopy(ptr,&tmpret,sizeof(tmpret)); fs[i].colume=ntohl(tmpret); ptr+=LONGLEN; } g_free(databuf); } fssum=retnum; return SUCCESS; }void stockClient::readGpmxFromBuf(char *buf){ char *ptr; int tmpret; float tmp; ptr=buf; bcopy(ptr,&tmpret,sizeof(tmpret)); tmpret=ntohl(tmpret); tmp=(float)tmpret; gpmx.cjj=tmp/1000; ptr+=LONGLEN; bcopy(ptr,&tmpret,sizeof(tmpret)); tmpret=ntohl(tmpret); tmp=(float)tmpret; gpmx.jj=tmp/1000; ptr+=LONGLEN; bcopy(ptr,&tmpret,sizeof(tmpret)); tmpret=ntohl(tmpret); tmp=(float)tmpret; gpmx.zd=tmp/1000; ptr+=LONGLEN; bcopy(ptr,&tmpret,sizeof(tmpret)); tmpret=ntohl(tmpret); tmp=(float)tmpret; gpmx.zdf=tmp/1000; ptr+=LONGLEN; bcopy(ptr,&tmpret,sizeof(tmpret)); tmpret=ntohl(tmpret); tmp=(float)tmpret; gpmx.zsp=tmp/1000; ptr+=LONGLEN; bcopy(ptr,&tmpret,sizeof(tmpret)); tmpret=ntohl(tmpret); tmp=(float)tmpret; gpmx.kpj=tmp/1000; ptr+=LONGLEN; bcopy(ptr,&tmpret,sizeof(tmpret)); tmpret=ntohl(tmpret); tmp=(float)tmpret; gpmx.zgj=tmp/1000; ptr+=LONGLEN; bcopy(ptr,&tmpret,sizeof(tmpret)); tmpret=ntohl(tmpret); tmp=(float)tmpret; gpmx.zdj=tmp/1000; ptr+=LONGLEN; bcopy(ptr,&tmpret,sizeof(tmpret)); tmpret=ntohl(tmpret); tmp=(float)tmpret; gpmx.zss=tmp/1000; ptr+=LONGLEN; bcopy(ptr,&tmpret,sizeof(tmpret)); tmpret=ntohl(tmpret); tmp=(float)tmpret; gpmx.xss=tmp/1000; ptr+=LONGLEN; bcopy(ptr,&tmpret,sizeof(tmpret)); tmpret=ntohl(tmpret); tmp=(float)tmpret; gpmx.lb=tmp/1000; ptr+=LONGLEN; bcopy(ptr,&tmpret,sizeof(tmpret)); tmpret=ntohl(tmpret); tmp=(float)tmpret; gpmx.wb=tmp/1000; ptr+=LONGLEN; bcopy(ptr,&tmpret,sizeof(tmpret)); tmpret=ntohl(tmpret); tmp=(float)tmpret; gpmx.cjje=tmp/1000; ptr+=LONGLEN; bcopy(ptr,&tmpret,sizeof(tmpret)); tmpret=ntohl(tmpret); tmp=(float)tmpret; gpmx.zf=tmp/1000; ptr+=LONGLEN; bcopy(ptr,&tmpret,sizeof(tmpret)); tmpret=ntohl(tmpret); tmp=(float)tmpret; gpmx.wp=tmp/1000; ptr+=LONGLEN; bcopy(ptr,&tmpret,sizeof(tmpret)); tmpret=ntohl(tmpret); tmp=(float)tmpret; gpmx.np=tmp/1000; ptr+=LONGLEN; bcopy(ptr,&tmpret,sizeof(tmpret)); tmpret=ntohl(tmpret); tmp=(float)tmpret; gpmx.mrj1=tmp/1000; ptr+=LONGLEN; bcopy(ptr,&tmpret,sizeof(tmpret)); tmpret=ntohl(tmpret); tmp=(float)tmpret; gpmx.mrj2=tmp/1000; ptr+=LONGLEN; bcopy(ptr,&tmpret,sizeof(tmpret)); tmpret=ntohl(tmpret); tmp=(float)tmpret; gpmx.mrj3=tmp/1000; ptr+=LONGLEN; bcopy(ptr,&tmpret,sizeof(tmpret)); tmpret=ntohl(tmpret); tmp=(float)tmpret; gpmx.mrl1=tmp/1000; ptr+=LONGLEN; bcopy(ptr,&tmpret,sizeof(tmpret)); tmpret=ntohl(tmpret); tmp=(float)tmpret; gpmx.mrl2=tmp/1000; ptr+=LONGLEN; bcopy(ptr,&tmpret,sizeof(tmpret)); tmpret=ntohl(tmpret); tmp=(float)tmpret; gpmx.mrl3=tmp/1000; ptr+=LONGLEN; bcopy(ptr,&tmpret,sizeof(tmpret)); tmpret=ntohl(tmpret); tmp=(float)tmpret; gpmx.mcj1=tmp/1000; ptr+=LONGLEN; bcopy(ptr,&tmpret,sizeof(tmpret)); tmpret=ntohl(tmpret); tmp=(float)tmpret; gpmx.mcj2=tmp/1000; ptr+=LONGLEN; bcopy(ptr,&tmpret,sizeof(tmpret)); tmpret=ntohl(tmpret); tmp=(float)tmpret; gpmx.mcj3=tmp/1000; ptr+=LONGLEN; bcopy(ptr,&tmpret,sizeof(tmpret)); tmpret=ntohl(tmpret); tmp=(float)tmpret; gpmx.mcl1=tmp/1000; ptr+=LONGLEN; bcopy(ptr,&tmpret,sizeof(tmpret)); tmpret=ntohl(tmpret); tmp=(float)tmpret; gpmx.mcl2=tmp/1000; ptr+=LONGLEN; bcopy(ptr,&tmpret,sizeof(tmpret)); tmpret=ntohl(tmpret); tmp=(float)tmpret; gpmx.mcl3=tmp/1000; ptr+=LONGLEN;}void stockClient::readTraceFromBuf(char *buf){ int i; char *ptr; int tmpret; float tmp; ptr=buf; for(i=0;i<tracesum && i<MAXTRACENUM;i++){ bcopy(ptr,&tmpret,sizeof(tmpret)); trace[i].no=htonl(tmpret); ptr+=LONGLEN; bcopy(ptr,&tmpret,sizeof(tmpret)); trace[i].time=htonl(tmpret); ptr+=LONGLEN; bcopy(ptr,&tmpret,sizeof(tmpret)); tmpret=ntohl(tmpret); tmp=(float)tmpret; trace[i].price=tmp/1000; ptr+=LONGLEN; bcopy(ptr,&tmpret,sizeof(tmpret)); tmpret=ntohl(tmpret); tmp=(float)tmpret; trace[i].colume=tmp/1000; ptr+=LONGLEN; trace[i].bz=*ptr; ptr++; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -