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); } }
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'; } }
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; } }
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); } } }
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(); }
//显示我的订单页面 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; }