int p_get_orders(request *rqt, int client_sockfd){
    response rsp;
    response *rsps;

    memset(&rsp, '\0', sizeof(response));
    ticket *tset;
    int getn;
    tset = get_orders(&rqt->u, &getn);
    if(getn == -1){
        rsp.rs = rs_failure;
        rsp.remain = 0;
    }else if(getn == 0){
        rsp.rs = rs_find_nothing;
        rsp.remain = 0;
    }else{
        rsps = (response *)malloc(sizeof(response)*getn);
        memset(rsps, '\0', sizeof(response)*getn);
        int i;
        for(i=0; i<getn; ++i){
            response *p;
            p = rsps + i;
            p->rs = rs_success;
            memcpy(&p->t, tset+i, sizeof(ticket));
        }
        rsps->remain = getn - 1;
    }
    free_get_orders(tset);

    if(getn){
        return srv_send_responses(rsps, getn, client_sockfd);
    }else{
        return srv_send_response(&rsp, client_sockfd);
    }
}
Beispiel #2
0
int main(){
	printf("\nInitialization starting...\n");
	if(!elev_init()){
		printf("\nFailed to initialize elevator...\n");
		return 0;
	}
	printf("\nInitialization complete\n");

	int state = BOOT;
	int event = STOP;
	int order_table[N_FLOORS][N_BUTTONS];
	clear_order_table(order_table);
	
	while(1){
		//printf("\nCurrent state: %d, Current event: %d", state, event);

		state = handle_event(state, event, order_table);
		get_orders(order_table, state);
		set_lights(order_table);

		int temp_event = get_direction(order_table, state);
		if(get_emergency(state)){
			event = EMERGENCY_BUTTON;
		}else if(get_obstruction(order_table, state)){
			event = OBSTRUCTION;
		}else if(temp_event != -1){
			event = temp_event;
		}
	}
	return 0;
} // End main
		void print_all_orders(ats::price_t price)// const
		{
			auto range = get_orders(price);
			for (auto it = range.first; it != range.second; ++it)
			{
				std::cout << "Order @" << it->second->price() << " id=" << it->second->id() << '\n';
			}
		}
Beispiel #4
0
void RestraintCache::save_cache(const kernel::ParticlesTemp &particle_ordering,
                                const kernel::RestraintsTemp &restraints,
                                RMF::HDF5::Group group,
                                unsigned int max_entries) {
  RMF::HDF5::FloatDataSet1Ds scores;
  RMF::HDF5::IntDataSet2Ds assignments;
  base::map<kernel::Restraint *, int> restraint_index;
  ParticleIndex particle_index = get_particle_index(particle_ordering);
  Orders orders = get_orders(known_restraints_, restraints, particle_ordering);
  // create data sets for restraints
  for (unsigned int i = 0; i < restraints.size(); ++i) {
    kernel::Restraint *r = restraints[i];
    RestraintID rid =
        get_restraint_id(particle_index, known_restraints_.find(r)->second,
                         restraint_index_.find(r)->second);
    RMF::HDF5::Group g = group.add_child_group(r->get_name());
    g.set_attribute<RMF::HDF5::IndexTraits>(
        "restraint", RMF::HDF5::Indexes(1, rid.get_restraint_index()));
    g.set_attribute<RMF::HDF5::IndexTraits>(
        "particles", RMF::HDF5::Indexes(rid.get_particle_indexes().begin(),
                                        rid.get_particle_indexes().end()));
    scores.push_back(g.add_child_data_set<RMF::HDF5::FloatTraits, 1>("scores"));
    assignments.push_back(
        g.add_child_data_set<RMF::HDF5::IntTraits, 2>("assignments"));
    restraint_index[r] = i;
  }
  // finally start saving them
  unsigned int count = 0;
  for (Cache::ContentIterator it = cache_.contents_begin();
       it != cache_.contents_end(); ++it) {
    int ri = restraint_index.find(it->key.get_restraint())->second;
    Ints ord = orders[ri].get_list_ordered(it->key.get_assignment());
    double score = it->value;
    RMF::HDF5::DataSetIndexD<2> asz = assignments[ri].get_size();
    RMF::HDF5::DataSetIndexD<1> row(asz[0]);
    asz[1] = ord.size();
    ++asz[0];
    assignments[ri].set_size(asz);
    assignments[ri].set_row(row, RMF::HDF5::Ints(ord.begin(), ord.end()));
    RMF::HDF5::DataSetIndexD<1> ssz = scores[ri].get_size();
    RMF::HDF5::DataSetIndexD<1> nsz = ssz;
    ++nsz[0];
    scores[ri].set_size(nsz);
    scores[ri].set_value(ssz, score);
    ++count;
    if (count > max_entries) break;
  }
}
Beispiel #5
0
void order_keeper::qry_orders(TTrdItfBase *itf) {
	std::list<std::string>tmplist;
	get_orders(tmplist);
	for (std::list<std::string>::iterator iter = tmplist.begin();
	iter != tmplist.end(); ++iter) {
		TRequest req;
		req.QryCurCsn.ReqHead.FuncType = ftQryCurCsn;
		strncpy(req.QryCurCsn.OrderID, (*iter).c_str(), SEQ_LEN);
		req.QryCurCsn.MaxRecord = -100; //从柜台查

		TAnswer *ans = NULL;
		int count = 0;
		try {
			if (itf->Request(req, &ans, count) == 0) {
				if (count == 1) {
					int cancle = ans[0].QryCurCsn.OrderInfo.CancelVol;
					if (cancle != 0) {
						// 生成撤单记录
						TradeGateway::ExecutionReport er;
						er.accountId = _account.Account;
						er.ordId = *iter;
						er.type = TradeGateway::EtCanceled;
						er.lastQty = -abs(cancle);
						er.lastPx = 0;
						er.tradeDate = Date().FormatString("yyyymmdd").ToInt();
						er.transactTime = Time().FormatString("hhnnss").ToInt();
						database db;
						db.add_trade(&er, "", er.transactTime);
					}
					else
						this->add_order(*iter);
				}
				else
					ODS("查询委托返回多个记录,ordid=%s", req.QryCurCsn.OrderID);
				itf->FreeAnswer(ans);
			}
			else {
				ODS("查询委托号失败,ordid=%s", req.QryCurCsn.OrderID);
			}
		}
		catch (std::string &err) {
			ODS("->add_trade失败,%s,%s", (*iter).c_str(), err.c_str());
		}
		catch (...) {
			ODS("查询委托号失败,意外错误,ordid=%s", req.QryCurCsn.OrderID);
		}
	}
}
Beispiel #6
0
void RestraintCache::load_cache(const kernel::ParticlesTemp &particle_ordering,
                                RMF::HDF5::ConstGroup group) {
  ParticleIndex particle_index = get_particle_index(particle_ordering);
  base::map<RestraintID, kernel::Restraint *> index;
  for (KnownRestraints::const_iterator it = known_restraints_.begin();
       it != known_restraints_.end(); ++it) {
    index[get_restraint_id(particle_index, it->second,
                           restraint_index_.find(it->first)->second)] =
        it->first;
  }
  kernel::RestraintsTemp restraints;
  for (unsigned int i = 0; i < group.get_number_of_children(); ++i) {
    RMF::HDF5::ConstGroup ch = group.get_child_group(i);
    int restraint_index =
        ch.get_attribute<RMF::HDF5::IndexTraits>("restraint")[0];
    RMF::HDF5::Indexes particle_indexes =
        ch.get_attribute<RMF::HDF5::IndexTraits>("particles");
    RestraintID rid(restraint_index,
                    base::ConstVector<unsigned int>(Ints(
                        particle_indexes.begin(), particle_indexes.end())));
    kernel::Restraint *r = index.find(rid)->second;
    restraints.push_back(r);
    IMP_LOG_TERSE("Matching " << Showable(r) << " with " << ch.get_name()
                              << std::endl);
  }
  Orders orders = get_orders(known_restraints_, restraints, particle_ordering);
  for (unsigned int i = 0; i < group.get_number_of_children(); ++i) {
    RMF::HDF5::ConstGroup ch = group.get_child_group(i);
    RMF::HDF5::FloatConstDataSet1D scores =
        ch.get_child_float_data_set_1d("scores");
    RMF::HDF5::IntConstDataSet2D assignments =
        ch.get_child_int_data_set_2d("assignments");
    for (unsigned int j = 0; j < scores.get_size()[0]; ++j) {
      double s = scores.get_value(RMF::HDF5::DataSetIndex1D(j));
      RMF::HDF5::Ints rw = assignments.get_row(RMF::HDF5::DataSetIndex1D(j));
      Ints psit(rw.begin(), rw.end());
      Assignment ass = orders[i].get_subset_ordered(psit);
      cache_.insert(Key(restraints[i], ass), s);
    }
  }
  validate();
}
Beispiel #7
0
//显示我的订单页面
static void order_menu(){
	int index=1;
	int orders_num=0;
	int num=0;
	int i_orders=0;
	int result=0;
	char commend[1];
	char state[20];
	char oid[10];
	orders order_cmp;
	static_message.order_data=get_orders(static_message.userinfo_data.uid);
	memset(&order_cmp, 0, sizeof(order_cmp));
	while(memcmp(&order_cmp, &(static_message.order_data), sizeof(orders))){
		static_orders[orders_num]=static_message.order_data;
		static_message.order_data=get_orders(static_message.userinfo_data.uid);
		orders_num++;
	}
	erase();
	cbreak();
	noecho();
	mvprintw(3, 25, "%s", "欢迎访问模拟铁路订票系统!");
	mvprintw(5, 1, "%s", "订单号");
	mvprintw(5, 8, "%s", "用户名");
	mvprintw(5, 16, "%s", "火车编号");
	mvprintw(5, 26, "%s", "出发日期");
	mvprintw(5, 36, "%s", "张数");
	mvprintw(5, 42, "%s", "总票价");
	mvprintw(5, 50, "%s", "订单生成时间");
	mvprintw(5, 70, "%s", "订单状态");
	while(num!=orders_num){
		mvprintw(num+6, 1, "%d", static_orders[num].oid);
		mvprintw(num+6, 8, "%s",static_message.userinfo_data.u_name);
		mvprintw(num+6, 16, "%d", static_orders[num].tid);
		mvprintw(num+6, 26, "%d/%d/%d", static_orders[num].departure_date.tm_year+1900, static_orders[num].departure_date.tm_mon+1, static_orders[num].departure_date.tm_mday);
		mvprintw(num+6, 36, "%d", static_orders[num].num);
		mvprintw(num+6, 42, "%d", static_orders[num].price);
		mvprintw(num+6, 50, "%d/%d/%d %d:%d:%d", static_orders[num].rise_time.tm_year+1900, static_orders[num].rise_time.tm_mon+1, static_orders[num].rise_time.tm_mday, static_orders[num].rise_time.tm_hour, static_orders[num].rise_time.tm_min, static_orders[num].rise_time.tm_sec);
		switch(static_orders[num].state){
			case STATE_BEFORE_PAYMENT:
				strcpy(state, "待付款");break;
			case STATE_AFTER_ISSUE:
				strcpy(state, "已付款");break;
			case STATE_SUCCESS:
				strcpy(state, "订单成功");break;
			case STATE_DELETE:
				strcpy(state, "已取消");break;
			default:
				strcpy(state, "\0");break;
			}
		mvprintw(num+6, 70, "%s", state);
		num++;
	}
	if(orders_num==0){
		mvprintw(20, 15, "%s", "对不起,系统中没有你的没有订单记录,返回主界面中...");
		refresh();
		sleep(3);
		echo();
		nocbreak();
		main_menu();
		return;
	}else{
		mvprintw(20, 25, "%s", "1. 确认订单");
		mvprintw(20, 35, "%s", "2. 取消订单");
		mvprintw(20, 45, "%s", "3. 返回上一页");
	}
	refresh();
	while(index){
		commend[0]=getch();
		switch(commend[0]){
			case '1':
				echo();
				nocbreak();
				mvprintw(22, 30, "%s", "请输入确认订单号:");
				getstr(oid);
				static_message.order_data.oid=atoi(oid);
				while(static_message.order_data.oid!=static_orders[i_orders].oid)
					i_orders++;
				static_message.order_data=static_orders[i_orders];
				static_message.order_data.state=STATE_SUCCESS;
				result=modify_order(static_message.order_data);
				if(result){
					mvprintw(23, 30, "%s", "确认成功!刷新中...");
				}else{
					mvprintw(23, 30, "%s", "确认失败!刷新中...");
				}
				refresh();
				sleep(3);
				order_menu();
				index=0;
				break;
			case '2':
				echo();
				nocbreak();
				mvprintw(22, 30, "%s", "请输入取消订单号:");
				getstr(oid);
				static_message.order_data.oid=atoi(oid);
				while(static_message.order_data.oid!=static_orders[i_orders].oid)
					i_orders++;
				static_message.order_data=static_orders[i_orders];
				static_message.order_data.state=STATE_DELETE;
				result=modify_order(static_message.order_data);
				if(result){
					mvprintw(23, 30, "%s", "取消成功!刷新中...");
				}else{
					mvprintw(23, 30, "%s", "取消失败!刷新中...");
				}
				refresh();
				sleep(3);
				order_menu();
				index=0;
				break;
			case '3':
				echo();
				nocbreak();
				main_menu();
				index=0;
				break;
			default: mvprintw(23, 30, "%s", "无效的命令!"); break;
		}
	}
}
//定义所有客户端请求命令的处理函数
void exec_request(const message_data message_request){
	message_data message_response;
	int end_index=0;
	char log[250];
	message_response=message_request;
	message_response.response=s_success;
	switch(message_request.request){
		case c_add_userinfo:
			if(!add_userinfo(message_request.userinfo_data)){
				message_response.response=s_failure;
				sprintf(log, " 用户 %s 注册失败.", message_request.userinfo_data.u_name);
				sys_log(log);
			}else{
				sprintf(log, " 用户 %s 注册成功.", message_request.userinfo_data.u_name);
				sys_log(log);
			}
			break;
		case c_get_userinfo:
			message_response.userinfo_data=get_userinfo(message_request.userinfo_data.u_name, message_request.userinfo_data.pwd);
			userinfo userinfo_cmp;
			memset(&userinfo_cmp, 0, sizeof(userinfo_cmp));
			if(!memcmp(&userinfo_cmp, &(message_response.userinfo_data), sizeof(userinfo)))
			{
				message_response.response=s_failure;
				sprintf(log, "获取用户 %s 资料失败.", message_request.userinfo_data.u_name);
				sys_log(log);
			}else{
				sprintf(log, " 获取用户 %s 资料成功.", message_request.userinfo_data.u_name);
				sys_log(log);
			}
			break;
		case c_modify_userinfo:
			if(!modify_userinfo(message_request.userinfo_data))
			{
				message_response.response=s_failure;
				sprintf(log, "修改用户 %s 资料失败.", message_request.userinfo_data.u_name);
				sys_log(log);
			}else{
				sprintf(log, " 修改用户 %s 资料成功.", message_request.userinfo_data.u_name);
				sys_log(log);
			}
				break;
		case c_get_traininfo_by_t_num:
			message_response.traininfo_data=get_traininfo_by_t_num(message_request.traininfo_data.t_num);
			traininfo traininfo_cmp;
			memset(&traininfo_cmp, 0, sizeof(traininfo_cmp));
			if(!memcmp(&traininfo_cmp, &(message_response.traininfo_data), sizeof(traininfo))){
				message_response.response=s_failure;
				sprintf(log, "用户 %s 获取车次 %s 信息失败.", message_request.userinfo_data.u_name, message_request.traininfo_data.t_num);
				sys_log(log);
			}else{
				sprintf(log, "用户 %s 获取车次 %s 信息成功.", message_request.userinfo_data.u_name, message_request.traininfo_data.t_num);
				sys_log(log);
			}
			break;
		case c_get_traininfo_by_o_and_t:
			while(!end_index){
				message_response.traininfo_data=get_traininfo_by_o_and_t(message_request.traininfo_data.originator, message_request.traininfo_data.terminal);
				traininfo traininfo_cmp;
				memset(&traininfo_cmp, 0, sizeof(traininfo_cmp));
				if(!memcmp(&traininfo_cmp, &(message_response.traininfo_data), sizeof(traininfo))){
					message_response.response=s_failure;
					end_index=1;
				}else{
					if(!send_response_to_client(message_response)){
						fprintf(stderr, "Server Warning: fail to response to %d. \n", message_response.client_pid);
						sprintf(log, "用户 %s 获取车次 %s 信息失败.", message_request.userinfo_data.u_name, message_response.traininfo_data.t_num);
						sys_log(log);
					}else{
						sprintf(log, "用户 %s 获取车次 %s 信息成功.", message_request.userinfo_data.u_name, message_response.traininfo_data.t_num);
						sys_log(log);
					}
				}
			}
			break;
		case c_get_ticket:
			message_response.ticket_data=get_ticket(message_request.ticket_data.tid, &(message_request.ticket_data.departure_date));
			ticket ticket_cmp;
			memset(&ticket_cmp, 0, sizeof(ticket_cmp));
			if(!memcmp(&ticket_cmp, &(message_response.ticket_data), sizeof(ticket)))
				message_response.response=s_failure;
			break;
		case c_modify_ticket:
			if(!modify_ticket(message_request.ticket_data))
				message_response.response=s_failure;
			break;
		case c_add_order:
			if(!add_order(message_request.order_data)){
				message_response.response=s_failure;
				sprintf(log, "用户 %s 购买 Tid 为 %d 的车次火车票 %d 张失败.", message_request.userinfo_data.u_name, message_request.order_data.tid, message_request.order_data.num);
				sys_log(log);
			}else{
				sprintf(log, "用户 %s 购买 Tid 为 %d 的车次火车票 %d 张成功.", message_request.userinfo_data.u_name, message_request.order_data.tid, message_request.order_data.num);
				sys_log(log);
			}
			break;
		case c_get_orders:
			while(!end_index){
				message_response.order_data=get_orders(message_request.order_data.uid);
				orders order_cmp;
				memset(&order_cmp, 0, sizeof(order_cmp));
				if(!memcmp(&order_cmp, &(message_response.order_data), sizeof(orders))){
					message_response.response=s_failure;
					end_index=1;
				}else{
					if(!send_response_to_client(message_response)){
						fprintf(stderr, "Server Warning: fail to response to %d. \n", message_response.client_pid);
						sprintf(log, "获取用户 %s 订单 %d 信息失败.", message_request.userinfo_data.u_name, message_response.order_data.oid);
						sys_log(log);
					}else{
						sprintf(log, "获取用户 %s 订单 %d 信息成功.", message_request.userinfo_data.u_name, message_response.order_data.oid);
						sys_log(log);
					}
				}
			}
			break;
		case c_modify_order:
			if(!modify_order(message_request.order_data)){
				message_response.response=s_failure;
				sprintf(log, "修改用户 %s 订单 %d 信息失败.", message_request.userinfo_data.u_name, message_request.order_data.oid);
				sys_log(log);
			}else{
				sprintf(log, "修改用户 %s 订单 %d 信息成功.", message_request.userinfo_data.u_name, message_request.order_data.oid);
				sys_log(log);
			}
			break;
		default:
			message_response.response=s_failure;
			break;
	}
	if(!send_response_to_client(message_response)){
		fprintf(stderr, "Server Warning: fail to response to %d. \n", message_response.client_pid);
		return;
	}
	return;
}