YAServerDlg.cpp 230 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800
  1. // YAServerDlg.cpp : 实现文件
  2. //
  3. #include "stdafx.h"
  4. #include "YAServer.h"
  5. #include "YAServerDlg.h"
  6. #include "afxdialogex.h"
  7. #include <stdio.h>
  8. #include <sio_client.h>
  9. //#include <functional>
  10. //#include <thread> // c++11init_reader
  11. //#include <mutex> // c++11
  12. #include <condition_variable>
  13. #include <string>
  14. #include "def.h"
  15. #include "socketdef.h"
  16. #include <Functions/Functions.h>
  17. #include <json/json.h>
  18. #include "MysqlConnPool.h"
  19. #include "locate_algorithm.h"
  20. #include <strconv/strconv.h>
  21. #include <kalman/locate.h>
  22. #include <INIFILE.h>
  23. #include "log_def.h"
  24. #include "DbSettingDlg.h"
  25. #include "LogSetting.h"
  26. #include "SysSetting.h"
  27. #define STR_LEN_TIME 30
  28. #ifdef _DEBUG
  29. #ifndef DEBUG_NEW
  30. #define new DEBUG_NEW
  31. #endif
  32. #endif
  33. typedef struct {
  34. CYAServerDlg* handle;
  35. int len;
  36. DWORD dwConnID;
  37. BYTE buf[LENGTH_MSG_4K];
  38. }ParseData;
  39. typedef struct
  40. {
  41. CYAServerDlg* handle;
  42. bool useTime;
  43. char* path;
  44. char* strLog;
  45. }LogInfo;
  46. // 用于应用程序“关于”菜单项的 CAboutDlg 对话框
  47. DWORD g_tickcount;
  48. DWORD g_diffTickCount = 0;
  49. DWORD g_send_tickout;
  50. DWORD g_last_send_time;
  51. DWORD g_testtick;
  52. bool g_is_rec_hist = false;
  53. class CAboutDlg : public CDialogEx
  54. {
  55. public:
  56. CAboutDlg();
  57. // 对话框数据
  58. enum { IDD = IDD_ABOUTBOX };
  59. protected:
  60. virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
  61. // 实现
  62. protected:
  63. DECLARE_MESSAGE_MAP()
  64. };
  65. CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD)
  66. {
  67. }
  68. void CAboutDlg::DoDataExchange(CDataExchange* pDX)
  69. {
  70. CDialogEx::DoDataExchange(pDX);
  71. }
  72. BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
  73. END_MESSAGE_MAP()
  74. // CYAServerDlg 对话框
  75. CYAServerDlg::CYAServerDlg(CWnd* pParent /*=NULL*/)
  76. : CDialogEx(CYAServerDlg::IDD, pParent),
  77. _server(this),
  78. _io(new client())
  79. , m_reader_id_hist(0)
  80. {
  81. ws_init();
  82. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  83. }
  84. void CYAServerDlg::DoDataExchange(CDataExchange* pDX)
  85. {
  86. CDialogEx::DoDataExchange(pDX);
  87. DDX_Control(pDX, IDC_BTN_START, m_btStart);
  88. DDX_Control(pDX, IDC_BTN_STOP, m_btStop);
  89. DDX_Control(pDX, IDC_LIST_READER, m_listctrl_reader);
  90. DDX_Control(pDX, IDC_LIST_LOG, m_list_log);
  91. DDX_Text(pDX, IDC_EDIT_READERID, m_reader_id_hist);
  92. }
  93. BEGIN_MESSAGE_MAP(CYAServerDlg, CDialogEx)
  94. ON_WM_SYSCOMMAND()
  95. ON_WM_PAINT()
  96. ON_WM_QUERYDRAGICON()
  97. ON_WM_TIMER()
  98. ON_BN_CLICKED(IDC_BTN_START, &CYAServerDlg::OnBnStart)
  99. ON_BN_CLICKED(IDC_BTN_STOP, &CYAServerDlg::OnBnStop)
  100. ON_BN_CLICKED(IDC_BTN_EXIT, &CYAServerDlg::OnBnExit)
  101. ON_BN_CLICKED(IDC_BTN_SYNCTIME, &CYAServerDlg::OnBnSyncTime)
  102. ON_MESSAGE(WM_ON_MONITOR, on_monitor)
  103. ON_COMMAND(ID_MENU_DB, &CYAServerDlg::OnMenuDb)
  104. ON_COMMAND(ID_MENU_LOG, &CYAServerDlg::OnMenuLog)
  105. ON_COMMAND(ID_MENU_PARAM, &CYAServerDlg::OnMenuParam)
  106. ON_BN_CLICKED(IDC_BTN_HIS, &CYAServerDlg::OnBnCallHisData)
  107. ON_MESSAGE(WM_REFRESH_IP_LIST, &CYAServerDlg::OnMsgRefreshIpList)
  108. ON_MESSAGE(WM_CARD_ADD_DIST, &CYAServerDlg::OnCardAddDist)
  109. ON_MESSAGE(WM_REMOVE_SOCKET, &CYAServerDlg::OnRemoveSocket)
  110. ON_EN_UPDATE(IDC_EDIT_READERID, &CYAServerDlg::OnEnUpdateEditReaderid)
  111. ON_COMMAND(ID_ABOUT, &CYAServerDlg::OnAbout)
  112. END_MESSAGE_MAP()
  113. // CYAServerDlg 消息处理程序
  114. UINT WaitForS(int nSecond,bool bSleep=false)//用于等待一段时间的函数,普通精度的,参数单位秒
  115. {
  116. COleDateTime start_time = COleDateTime::GetCurrentTime();
  117. COleDateTimeSpan end_time = COleDateTime::GetCurrentTime()-start_time;
  118. while(end_time.GetTotalSeconds() < nSecond){
  119. if(!bSleep){
  120. MSG msg;
  121. PeekMessage(&msg,NULL,0,0,PM_NOREMOVE);
  122. TranslateMessage(&msg);
  123. DispatchMessage(&msg);
  124. //以上四行是实现在延时或定时期间能处理其他的消息,降低CPU的占有率,但也降低延时或定时精度
  125. }
  126. Sleep(80);
  127. end_time = COleDateTime::GetCurrentTime()-start_time;
  128. }
  129. return 0;
  130. }
  131. UINT WaitForMS(int mSecond,bool bSleep=false)//高精度的等待函数,参数单位毫秒
  132. {
  133. double dfFreq;
  134. LARGE_INTEGER litmp;
  135. QueryPerformanceFrequency(&litmp);
  136. dfFreq = (double)litmp.QuadPart;// 获得计数器的时钟频率
  137. QueryPerformanceCounter(&litmp);
  138. LONGLONG QPart0 = litmp.QuadPart;// 获得初始值
  139. while((double)(litmp.QuadPart-QPart0)/dfFreq < double(mSecond/1000)){
  140. if(!bSleep){
  141. MSG msg;
  142. PeekMessage(&msg,NULL,0,0,PM_NOREMOVE);
  143. TranslateMessage(&msg);
  144. DispatchMessage(&msg);
  145. //以上四行是实现在延时或定时期间能处理其他的消息,降低CPU的占有率,但也降低延时或定时精度
  146. }
  147. QueryPerformanceCounter(&litmp);
  148. }
  149. return 0;
  150. }
  151. ULONGLONG time_send_json_counting;
  152. ULONGLONG time_send_json_device_state;
  153. ULONGLONG time_send_json_alarm;
  154. ULONGLONG time_send_json_postion;
  155. ULONGLONG time_sync_reader_time;
  156. ULONGLONG time_clear_call_time;
  157. ULONGLONG time_send_call;
  158. ULONGLONG time_send_help;
  159. ULONGLONG time_ws_connect;
  160. bool g_exit=false;
  161. long giSqlCount=0;
  162. long giSqlThreadCount=0;
  163. long gSqlTimes=0;
  164. long giAllSqlCount=0;
  165. long giAllThreadCount=0;
  166. HANDLE hSemaHandle=NULL;
  167. DWORD WINAPI _exec_sql(LPVOID lparam)
  168. {
  169. char *sql = (char*)lparam ;
  170. CMysqlConn* pConn = NULL;
  171. CDBConnGuard pDbGuard(pConn);
  172. if(pConn == NULL){
  173. delete[] sql;
  174. sql = NULL;
  175. //TRACE(_T("failed \n"));
  176. return 1;
  177. }
  178. MYSQL_RES* pRes;
  179. int err = 0;
  180. //pRes = pConn->Execute(sql, err);
  181. pRes = pConn->MultiExecute(sql,err);
  182. if(err > 0){
  183. TRACE(_T("sql error \n"));
  184. }
  185. mysql_free_result(pRes);
  186. //TRACE(_T("passed\n"));
  187. delete[] sql;
  188. sql = NULL;
  189. Sleep(1);
  190. return 0;
  191. }
  192. DWORD WINAPI _write_error_log(LPVOID lparam)
  193. {
  194. LogInfo* err = (LogInfo*)lparam;
  195. CYAServerDlg* dlg = reinterpret_cast<CYAServerDlg*>(err->handle);
  196. dlg->writeErrorLogEx(err->path, err->strLog, err->useTime);
  197. // malloc
  198. if(err){
  199. free(err->path);
  200. err->path = NULL;
  201. free(err->strLog);
  202. err->strLog = NULL;
  203. delete err;
  204. err = NULL;
  205. }
  206. Sleep(1);
  207. return 0;
  208. }
  209. DWORD WINAPI _parse_package_data(LPVOID lparam)
  210. {
  211. ParseData* data = (ParseData*)lparam;
  212. CYAServerDlg* dlg = reinterpret_cast<CYAServerDlg*>(data->handle);
  213. dlg->parse_package_data(data->buf, data->len, data->dwConnID);
  214. //dlg->parse_data_receive_package(data->buf, data->len, data->dwConnID);
  215. free(data);
  216. Sleep(1);
  217. return 0;
  218. }
  219. DWORD WINAPI _parse_data_server(LPVOID lparam)
  220. {
  221. //TRACE(_T("in thread \n"));
  222. ParseData* data = (ParseData*)lparam;
  223. CYAServerDlg* dlg = reinterpret_cast<CYAServerDlg*>(data->handle);
  224. //dlg->parse_package_data(data->buf, data->len, data->dwConnID);
  225. dlg->parse_data_server(data->buf, data->len, data->dwConnID);
  226. //TRACE(_T("do not come here \n"));
  227. data->handle->m_nMallocTimes--;
  228. //TRACE(_T("use data over %d = \n"),data->handle->m_nMallocTimes);
  229. free(data);
  230. Sleep(1);
  231. return 0;
  232. }
  233. UINT _thread_timer(LPVOID lparam)
  234. {
  235. CYAServerDlg* dlg = reinterpret_cast<CYAServerDlg*>(lparam);
  236. while(!g_exit){
  237. ULONGLONG cur_time =::GetTickCount();
  238. // send_json_counting
  239. if(cur_time - time_send_json_counting > theApp.send_json_counting ){
  240. //time_send_json_counting = cur_time;
  241. //dlg->send_json_data(JSON_CMD_VALUE_PUSH, dlg->get_json_counting());
  242. }
  243. // send_json_alarm
  244. if(cur_time - time_send_json_alarm > theApp.send_json_alarm){
  245. time_send_json_alarm = cur_time;
  246. dlg->send_json_data(JSON_CMD_VALUE_PUSH, dlg->get_json_alarm());
  247. }
  248. // send_json_device
  249. if(cur_time - time_send_json_device_state > theApp.send_json_alarm){
  250. time_send_json_device_state = cur_time;
  251. dlg->deal_readers();
  252. dlg->send_json_data(JSON_CMD_VALUE_PUSH, dlg->get_json_device_state());
  253. }
  254. // send_json_postion
  255. if(cur_time - time_send_json_postion > theApp.send_json_postion){
  256. time_send_json_postion = cur_time;
  257. DWORD dw = ::GetTickCount();
  258. dlg->package_data();
  259. }
  260. //send help
  261. if(cur_time - time_send_help > theApp.send_json_alarm){
  262. if(dlg->get_help_card_nums() > 0){
  263. time_send_help = cur_time;
  264. dlg->send_json_data(JSON_CMD_VALUE_PUSH,dlg->get_json_help());
  265. }
  266. }
  267. // send_call_data
  268. if(cur_time - time_send_call > theApp.send_json_alarm){
  269. time_send_call = cur_time;
  270. dlg->send_call_info();
  271. //dlg->clear_call_info();
  272. }
  273. if(!dlg->is_websocket_login &&cur_time - time_ws_connect > theApp.ws_connect_interval){
  274. time_ws_connect = cur_time;
  275. if(!dlg->is_websocket_ok){
  276. dlg->ws_open();
  277. }
  278. dlg->ws_login();
  279. }
  280. WaitForMS(10);
  281. }
  282. return 0;
  283. }
  284. UINT _thread_monitor(LPVOID lparam)
  285. {
  286. CYAServerDlg* dlg = reinterpret_cast<CYAServerDlg*>(lparam);
  287. time_t time_end = time(NULL);
  288. while (!g_exit){
  289. time_t time_current = time(NULL);
  290. // 判断采集状态, 20s没有接收到数据认为采集中断
  291. dlg->is_server_ok = (difftime(time_current, dlg->m_time_last_rec) > 20) ? false : true;
  292. dlg->set_run_state(); // 更新采集运行状态
  293. if(!IsWindow(theApp.m_hwnd_monitor)){ // 监控程序没有打开
  294. theApp.m_hwnd_monitor = NULL;
  295. //// 启动监控程序
  296. //if(strlen(theApp.m_path_monitor)<=0){
  297. // strcpy(theApp.m_path_monitor, "YAMonitor.exe");//启动同目录下的monitor
  298. //}
  299. //WinExec(theApp.m_path_monitor, SW_HIDE);
  300. }
  301. // 发送给监控程序
  302. if(theApp.m_hwnd_monitor && dlg->m_bListen){
  303. WPARAM wpSERVERSTATE=WPARAM(dlg->m_uint_state);
  304. ::PostMessage(theApp.m_hwnd_monitor, WM_ON_MONITOR, wpSERVERSTATE, LPARAM(dlg->m_hWnd));
  305. }
  306. WaitForS(10);
  307. }
  308. return 0;
  309. }
  310. BOOL CYAServerDlg::OnInitDialog()
  311. {
  312. CDialogEx::OnInitDialog();
  313. // 将“关于...”菜单项添加到系统菜单中。
  314. // IDM_ABOUTBOX 必须在系统命令范围内。
  315. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  316. ASSERT(IDM_ABOUTBOX < 0xF000);
  317. CMenu* pSysMenu = GetSystemMenu(FALSE);
  318. if (pSysMenu != NULL)
  319. {
  320. BOOL bNameValid;
  321. CString strAboutMenu;
  322. bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
  323. ASSERT(bNameValid);
  324. if (!strAboutMenu.IsEmpty())
  325. {
  326. pSysMenu->AppendMenu(MF_SEPARATOR);
  327. pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  328. }
  329. }
  330. //加载系统配置
  331. m_bUseFilter = theApp.use_filter;
  332. if(m_bUseFilter){
  333. m_nFilterType = FILTER_KALMAN;
  334. }else{
  335. m_nFilterType = NO_FILTER;
  336. }
  337. m_log_sys_status = theApp.log_sys_status;
  338. m_log_raw_data = theApp.log_raw_data;
  339. m_log_parse_data = theApp.log_parse_data;
  340. m_log_send_package = theApp.log_send_package;
  341. m_log_recv_package = theApp.log_recv_package;
  342. m_log_locate_data = theApp.log_locate_data;
  343. m_reader_interval_time = theApp.reader_interval_time * 1.0 / 1000.0;
  344. m_nMallocTimes = 0;
  345. //初始化线程池
  346. //m_LogThreadPool.Initialize((void*)100,THREADPOOL_SIZE);
  347. // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
  348. // 执行此操作
  349. SetIcon(m_hIcon, TRUE); // 设置大图标
  350. SetIcon(m_hIcon, FALSE); // 设置小图标
  351. init_queuestring();
  352. init_param();
  353. init_ui();
  354. init_base_data();
  355. load_his_data();
  356. //ReceiveDateTime=COleDateTime::GetCurrentTime();
  357. theApp.set_server_handle(this->m_hWnd);
  358. theApp.load_monitor_conf();
  359. m_thread_monitor = ::AfxBeginThread(_thread_monitor, this, THREAD_PRIORITY_HIGHEST);
  360. RECT rc;
  361. GetWindowRect(&rc);
  362. rc.left=rc.right;
  363. rc.right+=250;
  364. //创建菜单
  365. m_mnMain.LoadMenu(IDR_MENUMAIN);
  366. SetMenu(&m_mnMain);
  367. CString strInfo;
  368. //// 将图标放入系统托盘
  369. //nd.cbSize = sizeof (NOTIFYICONDATA);
  370. //nd.hWnd = m_hWnd;
  371. //nd.uID = IDI_ICON;
  372. //nd.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP;
  373. //nd.uCallbackMessage= WM_NOTIFYICON;
  374. //nd.hIcon = m_hIcon;
  375. //strcpy(nd.szTip, "采集应用服务器");
  376. //Shell_NotifyIcon(NIM_ADD, &nd);
  377. SetWindowText(_T("永安信通数据采集系统"));
  378. OnBnStart();
  379. time_send_json_counting = time_send_json_device_state=time_send_json_alarm=time_send_json_postion=::GetTickCount();
  380. time_sync_reader_time=time_clear_call_time=time_send_call=time_send_help=::GetTickCount();
  381. m_thread_timer = ::AfxBeginThread(_thread_timer, this, THREAD_PRIORITY_HIGHEST);
  382. UpdateData(FALSE);
  383. return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
  384. }
  385. void CYAServerDlg::OnSysCommand(UINT nID, LPARAM lParam)
  386. {
  387. if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  388. {
  389. CAboutDlg dlgAbout;
  390. dlgAbout.DoModal();
  391. }
  392. else
  393. {
  394. CDialogEx::OnSysCommand(nID, lParam);
  395. }
  396. }
  397. // 如果向对话框添加最小化按钮,则需要下面的代码
  398. // 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
  399. // 这将由框架自动完成。
  400. void CYAServerDlg::OnPaint()
  401. {
  402. if (IsIconic())
  403. {
  404. CPaintDC dc(this); // 用于绘制的设备上下文or
  405. SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
  406. // 使图标在工作区矩形中居中
  407. int cxIcon = GetSystemMetrics(SM_CXICON);
  408. int cyIcon = GetSystemMetrics(SM_CYICON);
  409. CRect rect;
  410. GetClientRect(&rect);
  411. int x = (rect.Width() - cxIcon + 1) / 2;
  412. int y = (rect.Height() - cyIcon + 1) / 2;
  413. // 绘制图标
  414. dc.DrawIcon(x, y, m_hIcon);
  415. }
  416. else
  417. {
  418. CDialogEx::OnPaint();
  419. }
  420. }
  421. //当用户拖动最小化窗口时系统调用此函数取得光标
  422. //显示。
  423. HCURSOR CYAServerDlg::OnQueryDragIcon()
  424. {
  425. return static_cast<HCURSOR>(m_hIcon);
  426. }
  427. /*
  428. * 点击启动按钮
  429. * 登录websocket服务器
  430. * 启动tcp server
  431. *
  432. * param
  433. * 无
  434. *
  435. * return
  436. * 无
  437. *
  438. */
  439. void CYAServerDlg::OnBnStart()
  440. {
  441. //Test();
  442. if(!is_websocket_login){
  443. ws_login();
  444. }
  445. start_tcp_server();
  446. }
  447. /*
  448. * 点击停止按钮
  449. * 退出websocket服务器
  450. * 停止tcp server
  451. *
  452. * param
  453. * 无
  454. *
  455. * return
  456. * 无
  457. *
  458. */
  459. void CYAServerDlg::OnBnStop()
  460. {
  461. //if(MessageBoxEx(m_hWnd, _T("确定停止吗?"), _T("询问"), MB_ICONQUESTION|MB_OKCANCEL|MB_DEFBUTTON2,NULL) == IDCANCEL){
  462. // return;
  463. //}
  464. stop_tcp_server();
  465. if(is_websocket_login){
  466. ws_logout();
  467. is_websocket_login = false;
  468. }
  469. }
  470. LRESULT CYAServerDlg::on_monitor(WPARAM wParam, LPARAM lParam)
  471. {
  472. if(m_bListen){
  473. m_uint_state = wParam ;
  474. }
  475. if(wParam == 0xFFFF){
  476. stop_and_exit();
  477. }
  478. return S_OK;
  479. }
  480. /*
  481. * 初始化对话框ui
  482. *
  483. * param
  484. * 无
  485. *
  486. * return
  487. * 无
  488. *
  489. */
  490. void CYAServerDlg::init_ui()
  491. {
  492. set_app_state(ST_STOPPED);
  493. m_listctrl_reader.SetColumnHeader(_T("分站号,60;分站地址,120;状态,60;"));
  494. m_listctrl_reader.SetGridLines(TRUE);
  495. m_listctrl_reader.SetEditable(FALSE);
  496. m_listctrl_reader.SetSortable(FALSE);
  497. Invalidate(FALSE);
  498. }
  499. void CYAServerDlg::set_app_state( EnAppState eas )
  500. {
  501. m_enState = eas;
  502. if(this->GetSafeHwnd() == nullptr)
  503. return;
  504. m_btStart.EnableWindow(m_enState == ST_STOPPED);
  505. m_btStop.EnableWindow(m_enState == ST_STARTED);
  506. //m_Close.EnableWindow(m_enState == ST_STARTED);
  507. //m_SycnTime.EnableWindow(m_enState == ST_STARTED);
  508. //m_HistoryData.EnableWindow(m_enState == ST_STARTED);
  509. }
  510. void CYAServerDlg::init_param()
  511. {
  512. ::SetMainWnd(this);
  513. ::SetInfoList(&m_list_log);
  514. g_last_send_time = ::GetTickCount();
  515. m_time_last_rec = time(NULL);
  516. m_bListen = FALSE;
  517. m_nPort = PORT_SERVER_MASTER;
  518. m_nCountClick = 0;
  519. m_ws_url = TEST_WS_URL;
  520. time_over_count_person = time_over_count_vehicle = 0;
  521. is_server_ok = true;
  522. g_exit = false;
  523. umpRootSyncNum.swap(unordered_map<DWORD, WORD>());
  524. InitializeCriticalSection(&m_csWriteLog);
  525. InitializeCriticalSection(&m_csRefreshList);
  526. InitializeCriticalSection(&m_csRemoveSocket);
  527. InitializeCriticalSection(&m_csParseDataServer);
  528. InitializeCriticalSection(&m_csAddDist);
  529. InitializeCriticalSection(&m_csSyncTime);
  530. InitializeCriticalSection(&m_csCallInfo);
  531. //从配置中读取(regedit)
  532. load_param_from_ini();
  533. database_connect();
  534. ws_open();
  535. //UpdateData(FALSE);
  536. }
  537. void CYAServerDlg::stop_and_exit()
  538. {
  539. stop_tcp_server();
  540. //set_button_state(TRUE);
  541. ws_close();
  542. //m_listctrl_reader.DeleteAllItems();
  543. //if(m_bIsInit) //停止定时器(停止呼叫、通行侦测)
  544. // ::KillTimer(NULL, CLEAR_CALL_TIMER);
  545. //::KillTimer(NULL, CLEAR_PASS_TIMER);
  546. //{
  547. // //m_Comm.Stop(1);
  548. // //?m_Comm
  549. // ShowAppMessage("停止采集数据");
  550. // READER_EX_INFO *pCurReaderEx;
  551. // for(int i=0;i<MaxMineID;i++)
  552. // for(int j=1;j<MAXREADERCOUNT;j++)
  553. // {
  554. // pCurReaderEx=AllReaderData[j][i];
  555. // if(pCurReaderEx==NULL)//没有该分站
  556. // continue;
  557. // SaveReaderData(i,pCurReaderEx);//停止服务
  558. // }
  559. // //停止监听
  560. // m_bIsInit = FALSE;
  561. //}
  562. //if(m_bListen)
  563. //{
  564. // ClearListener();
  565. // ShowAppMessage("停止监听\n");
  566. // m_bListen=FALSE;
  567. //}
  568. g_exit = true;
  569. if(m_thread_monitor){
  570. WaitForSingleObject(m_thread_monitor->m_hThread,INFINITE);
  571. }
  572. m_thread_monitor = NULL;
  573. if(m_thread_timer){
  574. WaitForSingleObject(m_thread_timer->m_hThread, INFINITE);
  575. }
  576. m_thread_timer = NULL;
  577. DeleteCriticalSection(&m_csWriteLog);
  578. DeleteCriticalSection(&m_csParseDataServer);
  579. DeleteCriticalSection(&m_csRemoveSocket);
  580. DeleteCriticalSection(&m_csRefreshList);
  581. DeleteCriticalSection(&m_csAddDist);
  582. DeleteCriticalSection(&m_csSyncTime);
  583. DeleteCriticalSection(&m_csCallInfo);
  584. }
  585. void CYAServerDlg::set_run_state()
  586. {
  587. m_uint_state = 0;
  588. if(!is_server_ok){
  589. m_uint_state |= 0x10; // 长时间未接收到采集数据(网络故障,采集故障)
  590. }
  591. //m_uKJ133State=0;
  592. //UINT uNoClient=0x0002;
  593. //UINT uClientError=0;
  594. //for(POSITION pos = m_connectionList.GetHeadPosition(); pos != NULL;)
  595. //{
  596. // CClientSocket* pSocket = (CClientSocket*)m_connectionList.GetNext(pos);
  597. // uNoClient=0;
  598. // if(pSocket->bError)
  599. // uClientError=0x0004;
  600. //}
  601. //m_uKJ133State |= uNoClient;
  602. //m_uKJ133State |= uClientError;
  603. //m_uKJ133State |= (m_bListen?0:0x0001);
  604. //m_uKJ133State |= uReaderError;
  605. //m_uKJ133State |= iMo;//0x0010,采集数据出问题 0x0000,没问题
  606. //if(g_DisconnectDB)
  607. // m_uKJ133State |=0x0100;
  608. //UINT uDBError=0;
  609. //UINT uDisconnect=0;
  610. //COleDateTime nowTime=COleDateTime::GetCurrentTime();
  611. //COleDateTimeSpan spDateTime;
  612. //spDateTime.SetDateTimeSpan(0,1,0,0);
  613. //if(g_LastDBErrorTime + spDateTime > nowTime)
  614. // uDBError=0x0200;
  615. //if(g_LastDisconnectTime + spDateTime > nowTime)
  616. // uDisconnect=0x0400;
  617. //m_uKJ133State |= uDBError;
  618. //m_uKJ133State |= uDisconnect;
  619. }
  620. int CYAServerDlg::init_staffer(string staff_id /* = "" */, bool is_card /*= false*/ )
  621. {
  622. CMysqlConn* pConn = NULL;
  623. CDBConnGuard pDbGuard(pConn);
  624. if(pConn == NULL){
  625. return 1;
  626. }
  627. MYSQL_RES* pRes;
  628. MYSQL_ROW pRow;
  629. int err = 0;
  630. char buf[LENGTH_SQL] = {0};
  631. if(staff_id.length() == 0){
  632. sprintf_s(buf, "SELECT staff_id, s.card_id, c.card_type_id, s.name, \
  633. s.dept_id, s.group_id, s.occupation_id, \
  634. d.name as dname, g.name as gname, o.name as oname \
  635. FROM dat_staff s \
  636. LEFT JOIN dat_card c ON s.card_id = c.card_id \
  637. LEFT JOIN dat_dept d ON s.dept_id = d.dept_id \
  638. LEFT JOIN dat_group g ON s.group_id = g.group_id \
  639. LEFT JOIN dat_occupation o ON s.occupation_id = o.occupation_id \
  640. WHERE c.card_type_id = 1 and s.state = 0;");
  641. }else if(is_card){
  642. sprintf_s(buf, "SELECT staff_id, s.card_id, c.card_type_id, s.name, \
  643. s.dept_id, s.group_id, s.occupation_id, \
  644. d.name as dname, g.name as gname, o.name as oname \
  645. FROM dat_staff s \
  646. LEFT JOIN dat_card c ON s.card_id = c.card_id \
  647. LEFT JOIN dat_dept d ON s.dept_id = d.dept_id \
  648. LEFT JOIN dat_group g ON s.group_id = g.group_id \
  649. LEFT JOIN dat_occupation o ON s.occupation_id = o.occupation_id \
  650. WHERE c.card_type_id = 1 and s.state = 0 AND s.card_id = '%s';", staff_id.c_str());
  651. }else{
  652. sprintf_s(buf, "SELECT staff_id, s.card_id, c.card_type_id, s.name, \
  653. s.dept_id, s.group_id, s.occupation_id, \
  654. d.name as dname, g.name as gname, o.name as oname \
  655. FROM dat_staff s \
  656. LEFT JOIN dat_card c ON s.card_id = c.card_id \
  657. LEFT JOIN dat_dept d ON s.dept_id = d.dept_id \
  658. LEFT JOIN dat_group g ON s.group_id = g.group_id \
  659. LEFT JOIN dat_occupation o ON s.occupation_id = o.occupation_id \
  660. WHERE c.card_type_id = 1 and s.state = 0 AND staffer_id = '%s';", staff_id.c_str());
  661. }
  662. pRes = pConn->Execute(buf, err);
  663. Card* pCard = NULL;
  664. int nRow = 0;
  665. while(pRow = mysql_fetch_row(pRes)) {
  666. CardMap::iterator it = mp_card_list_all.find(pRow[1]);
  667. if(it != mp_card_list_all.end()){
  668. pCard = it->second;
  669. }else{
  670. pCard = new Card(pRow[1], atoi(pRow[2]), theApp.z_offset);
  671. #ifdef ALGORITHM_TYPE_TOF
  672. pCard->set_reader_path(&mp_reader_path_list);
  673. #elif defined ALGORITHM_TYPE_TDOA
  674. pCard->set_reader_path(&mp_reader_path_list_tdoa);
  675. #endif
  676. mp_card_list_all.insert(make_pair(pCard->card_id, pCard));
  677. }
  678. nRow++;
  679. pCard->id = pRow[0];
  680. pCard->name = pRow[3];
  681. pCard->dept_id = atoi(pRow[4]);
  682. pCard->group_id = atoi(pRow[5]);
  683. pCard->department = (pRow[7] == NULL?"":pRow[7]);
  684. pCard->group = pRow[8];
  685. pCard->occupation = pRow[9];
  686. if(m_bUseFilter){
  687. if(theApp.use_filter_odd){
  688. std::string temp = pRow[1];
  689. int a = atoi(temp.substr(temp.length() - 1 , 1).c_str());
  690. if(0 == a%2){
  691. pCard->EnableFilter(m_nFilterType);
  692. }
  693. }else{
  694. pCard->EnableFilter(m_nFilterType);
  695. }
  696. }
  697. }
  698. mysql_free_result(pRes);
  699. CString strlog;
  700. strlog.Format(_T("%s%d%s"), _T(LOG_INIT_STAFF), nRow, _T(LOG_RECORD_COUNT));
  701. show_log(strlog);
  702. return 0;
  703. }
  704. /*
  705. * 初始化所有车卡信息
  706. *
  707. * param
  708. * vehicle_id ------ 车卡id
  709. * is_card ------ 是否是卡
  710. *
  711. * return
  712. * 成功返回0,失败返回1
  713. *
  714. */
  715. int CYAServerDlg::init_vehicle(string vehicle_id /* = "" */, bool is_card /*= false*/)
  716. {
  717. CMysqlConn* pConn = NULL;
  718. CDBConnGuard pDbGuard(pConn);
  719. if(pConn == NULL){
  720. return 1;
  721. }
  722. MYSQL_RES* pRes;
  723. MYSQL_ROW pRow;
  724. int err = 0;
  725. char buf[LENGTH_SQL] = {0};
  726. if(vehicle_id.length() == 0){
  727. sprintf_s(buf, "SELECT vehicle_id, v.card_id, c.card_type_id, v.name, v.number, \
  728. v.dept_id, v.group_id, v.vehicle_type_id, \
  729. d.name as dname, g.name as gname, vt.name as vtname \
  730. FROM dat_vehicle v \
  731. LEFT JOIN dat_card c ON v.card_id = c.card_id \
  732. LEFT JOIN dat_dept d ON v.dept_id = d.dept_id \
  733. LEFT JOIN dat_group g ON v.group_id = g.group_id \
  734. LEFT JOIN dat_vehicle_type vt ON v.vehicle_type_id = vt.vehicle_type_id \
  735. WHERE c.card_type_id = 2 and v.state = 0;");
  736. }else if(is_card){
  737. sprintf_s(buf, "SELECT vehicle_id, v.card_id, c.card_type_id, v.name, v.number, \
  738. v.dept_id, v.group_id, v.vehicle_type_id, \
  739. d.name as dname, g.name as gname, vt.name as vtname \
  740. FROM dat_vehicle v \
  741. LEFT JOIN dat_card c ON v.card_id = c.card_id \
  742. LEFT JOIN dat_dept d ON v.dept_id = d.dept_id \
  743. LEFT JOIN dat_group g ON v.group_id = g.group_id \
  744. LEFT JOIN dat_vehicle_type vt ON v.vehicle_type_id = vt.vehicle_type_id \
  745. WHERE c.card_type_id = 2 and v.state = 0 AND v.card_id ='%s';", vehicle_id.c_str());
  746. }else{
  747. sprintf_s(buf, "SELECT vehicle_id, v.card_id, c.card_type_id, v.name, v.number, \
  748. v.dept_id, v.group_id, v.vehicle_type_id, \
  749. d.name as dname, g.name as gname, vt.name as vtname \
  750. FROM dat_vehicle v \
  751. LEFT JOIN dat_card c ON v.card_id = c.card_id \
  752. LEFT JOIN dat_dept d ON v.dept_id = d.dept_id \
  753. LEFT JOIN dat_group g ON v.group_id = g.group_id \
  754. LEFT JOIN dat_vehicle_type vt ON v.vehicle_type_id = vt.vehicle_type_id \
  755. WHERE c.card_type_id = 2 and v.state = 0 AND vehicle_id='%s';", vehicle_id.c_str());
  756. }
  757. pRes = pConn->Execute(buf, err);
  758. Card* pCard = NULL;
  759. int nRow = 0;
  760. while(pRow = mysql_fetch_row(pRes)){
  761. CardMap::iterator it = mp_card_list_all.find(pRow[1]);
  762. if(it != mp_card_list_all.end()){
  763. pCard = it->second;
  764. }else{
  765. pCard = new Card(pRow[1], atoi(pRow[2]), theApp.z_offset);
  766. #ifdef ALGORITHM_TYPE_TOF
  767. pCard->set_reader_path(&mp_reader_path_list);
  768. #elif defined ALGORITHM_TYPE_TDOA
  769. pCard->set_reader_path(&mp_reader_path_list_tdoa);
  770. #endif
  771. mp_card_list_all.insert(make_pair(pCard->card_id, pCard));
  772. //return 1;
  773. }
  774. nRow++;
  775. pCard->id = (pRow[0] == NULL) ? "" : pRow[0];
  776. pCard->name = (pRow[3] == NULL) ? "" : pRow[3];
  777. pCard->number = (pRow[4] == NULL) ? "" : pRow[4];
  778. pCard->dept_id = atoi(pRow[5]);
  779. pCard->group_id = atoi(pRow[6]);
  780. pCard->department = (pRow[8] == NULL) ? "" : pRow[8];
  781. pCard->group = (pRow[9] == NULL) ? "" : pRow[9];
  782. pCard->worktype = (pRow[10] == NULL) ? "" : pRow[10];
  783. if(m_bUseFilter){
  784. if(theApp.use_filter_odd){
  785. std::string temp = pRow[1];
  786. int a = atoi(temp.substr(temp.length() - 1 , 1).c_str());
  787. if(0 == a%2){
  788. pCard->EnableFilter(m_nFilterType);
  789. }
  790. }else{
  791. pCard->EnableFilter(m_nFilterType);
  792. }
  793. }
  794. }
  795. mysql_free_result(pRes);
  796. CString strlog;
  797. strlog.Format(_T("%s%d%s"), _T(LOG_INIT_VEHICLE), nRow, _T(LOG_RECORD_COUNT));
  798. show_log(strlog);
  799. return 0;
  800. }
  801. /*
  802. * 初始化所有自组网卡信息
  803. *
  804. * param
  805. * adhoc_id ------ 自组网卡id
  806. * is_card ------ 是否是卡
  807. *
  808. * return
  809. * 成功返回0,失败返回1
  810. *
  811. */
  812. int CYAServerDlg::init_adhoc(string adhoc_id /*= ""*/,bool is_card /*= false*/)
  813. {
  814. CMysqlConn* pConn = NULL;
  815. CDBConnGuard pDbGuard(pConn);
  816. if(pConn == NULL){
  817. return 1;
  818. }
  819. MYSQL_ROW pRow;
  820. MYSQL_RES *pRes = NULL;
  821. int err = 0;
  822. char buf[LENGTH_SQL] = {0};
  823. if(adhoc_id.length() == 0){
  824. sprintf_s(buf,"select adhoc_id,v.card_id,v.dept_id, \
  825. d.name as dname \
  826. from dat_adhoc v \
  827. LEFT JOIN dat_card c ON v.card_id = c.card_id \
  828. LEFT JOIN dat_dept d ON v.dept_id = d.dept_id \
  829. where c.card_type_id = 3 and v.state = 0 ;");
  830. }else if(is_card){
  831. sprintf_s(buf,"select adhoc_id,v.card_id,v.dept_id, \
  832. d.name as dname \
  833. from dat_adhoc v \
  834. LEFT JOIN dat_card c ON v.card_id = c.card_id \
  835. LEFT JOIN dat_dept d ON v.dept_id = d.dept_id \
  836. where c.card_type_id = 3 and v.state = 0 and v.card_id ='%s';",adhoc_id.c_str());
  837. }else{
  838. sprintf_s(buf,"select adhoc_id,v.card_id,v.dept_id, \
  839. d.name as dname \
  840. from dat_adhoc v \
  841. LEFT JOIN dat_card c ON v.card_id = c.card_id \
  842. LEFT JOIN dat_dept d ON v.dept_id = d.dept_id \
  843. where c.card_type_id = 3 and v.state = 0 and v.adhoc_id ='%s';",adhoc_id.c_str());
  844. }
  845. pRes = pConn->Execute(buf, err);
  846. if(pRes == NULL){
  847. return 1;
  848. }
  849. Card* pCard = NULL;
  850. int nRow = 0;
  851. while(pRow = mysql_fetch_row(pRes)){
  852. CardMap::iterator it = mp_card_list_all.find(pRow[1]);
  853. if(it != mp_card_list_all.end()){
  854. pCard = it->second;
  855. }else{
  856. pCard = new Card(pRow[1], CT_ADHOC, theApp.z_offset);
  857. mp_card_list_all.insert(make_pair(pCard->card_id, pCard));
  858. }
  859. pCard->id = (pRow[0] == NULL) ? "" : pRow[0];
  860. pCard->card_id = (pRow[1] == NULL) ? "" : pRow[1];
  861. pCard->dept_id = (pRow[2] == NULL) ? 0:atoi(pRow[2]);
  862. pCard->department = (pRow[3] == NULL) ? "" : pRow[3];
  863. nRow++;
  864. }
  865. mysql_free_result(pRes);
  866. CString strlog;
  867. strlog.Format(_T("%s%d%s"), _T(LOG_INIT_ADHOC), nRow, _T(LOG_RECORD_COUNT));
  868. show_log(strlog);
  869. return 0;
  870. }
  871. int CYAServerDlg::init_map(int map_id /*= 0*/)
  872. {
  873. CMysqlConn* pConn = NULL;
  874. CDBConnGuard pDbGuard(pConn);
  875. if(pConn == NULL){
  876. return 1;
  877. }
  878. MYSQL_ROW pRow;
  879. MYSQL_RES *pRes = NULL;
  880. int err = 0;
  881. char strsql[LENGTH_SQL] = {0};
  882. if(map_id == 0){
  883. sprintf_s(strsql, "SELECT map_id, name, scale FROM dat_map;");
  884. }else{
  885. sprintf_s(strsql, "SELECT map_id, name, scale FROM dat_map WHERE map_id = %d; ", map_id);
  886. }
  887. pRes = pConn->Execute(strsql, err);
  888. MapInfo* pMap = NULL;
  889. int nRow = 0;
  890. while(pRow = mysql_fetch_row(pRes)){
  891. MapInfoMap::iterator it = mp_map_list.find(atoi(pRow[0]));
  892. if(it != mp_map_list.end()){
  893. pMap = it->second;
  894. }else{
  895. pMap = new MapInfo();
  896. pMap->map_id = atoi(pRow[0]);
  897. mp_map_list.insert(make_pair(pMap->map_id, pMap));
  898. nRow++;
  899. }
  900. pMap->map_name = pRow[1];
  901. pMap->map_scale = atof(pRow[2]);
  902. }
  903. mysql_free_result(pRes);
  904. CString strlog;
  905. strlog.Format(_T("%s%d%s"), _T(LOG_INIT_MAP), nRow, _T(LOG_RECORD_COUNT));
  906. show_log(strlog);
  907. return 0;
  908. }
  909. int CYAServerDlg::init_area(int area_id /* = 0 */)
  910. {
  911. CMysqlConn* pConn = NULL;
  912. CDBConnGuard pDbGuard(pConn);
  913. if(pConn == NULL){
  914. return 1;
  915. }
  916. MYSQL_ROW pRow;
  917. MYSQL_RES *pRes = NULL;
  918. int err = 0;
  919. char strsql[LENGTH_SQL] = {0};
  920. if(area_id == 0){
  921. sprintf_s(strsql, "SELECT area_id, name, map_id, area_type_id, path, \
  922. over_count_person, over_count_vehicle, over_time_person, over_time_vehicle, is_attendance \
  923. FROM dat_area;");
  924. }else{
  925. sprintf_s(strsql, "SELECT area_id, name, map_id, area_type_id, path, \
  926. over_count_person, over_count_vehicle, over_time_person, over_time_vehicle, is_attendance \
  927. FROM dat_area WHERE area_id = %d; ", area_id);
  928. }
  929. pRes = pConn->Execute(strsql, err);
  930. Area* pArea = NULL;
  931. int nRow = 0;
  932. while(pRow = mysql_fetch_row(pRes)){
  933. AreaMap::iterator it = mp_area_list.find(atoi(pRow[0]));
  934. if(it != mp_area_list.end()){
  935. pArea = it->second;
  936. }else{
  937. pArea = new Area();
  938. pArea->area_id = atoi(pRow[0]);
  939. mp_area_list.insert(make_pair(pArea->area_id, pArea));
  940. nRow++;
  941. }
  942. pArea->map_id = atoi(pRow[2]);
  943. MapInfoMap::iterator map_it = mp_map_list.find(pArea->map_id);
  944. if(map_it != mp_map_list.end()){
  945. AreaMap::iterator area_it = map_it->second->map_area_list.find(pArea->area_id);
  946. if(area_it == map_it->second->map_area_list.end()){
  947. map_it->second->map_area_list.insert(make_pair(pArea->area_id, pArea));
  948. }
  949. }
  950. pArea->area_name = pRow[1];
  951. pArea->area_type_id = atoi(pRow[3]);
  952. pArea->path = pRow[4]; // 多边形
  953. pArea->over_count_person = atoi(pRow[5]);
  954. pArea->over_count_vehicle = atoi(pRow[6]);
  955. pArea->over_time_person = atoi(pRow[7]);
  956. pArea->under_time_vehicle = atoi(pRow[8]);
  957. pArea->is_att = atoi(pRow[9]);
  958. pArea->init_border(pRow[4]);
  959. //pArea->x1 = atof(pRow[8]);
  960. //pArea->y1 = atof(pRow[9]);
  961. //pArea->z1 = atof(pRow[10]);
  962. //pArea->sr = atof(pRow[11]);
  963. }
  964. mysql_free_result(pRes);
  965. CString strlog;
  966. strlog.Format(_T("%s%d%s"), _T(LOG_INIT_AREA), nRow, _T(LOG_RECORD_COUNT));
  967. show_log(strlog);
  968. return 0;
  969. }
  970. int CYAServerDlg::init_reader(int reader_id /* = 0 */)
  971. {
  972. // 从数据库中读取
  973. CMysqlConn* pConn = NULL;
  974. CDBConnGuard pDbGuard(pConn);
  975. if(pConn == NULL){
  976. return 1;
  977. }
  978. MYSQL_ROW pRow;
  979. MYSQL_RES *pRes = NULL;
  980. int err = 0;
  981. char strsql[LENGTH_SQL] = {0};
  982. if(reader_id == 0){
  983. sprintf_s(strsql, "SELECT reader_id, map_id, area_id, name, x, y, z, angle, \
  984. state, ip, device_type_id, reader_type_id,isSpecial \
  985. FROM dat_reader WHERE state=0;");
  986. }else{
  987. sprintf_s(strsql, "SELECT reader_id, map_id, area_id, name, x, y, z, angle, \
  988. state, ip, device_type_id, reader_type_id,isSpecial \
  989. FROM dat_reader WHERE state=0 AND reader_id = %d; ", reader_id);
  990. }
  991. pRes = pConn->Execute(strsql, err);
  992. Reader* pReader = NULL;
  993. int nRow = 0;
  994. while(pRow = mysql_fetch_row(pRes)) {
  995. ReaderMap::iterator it = mp_reader_list.find(atoi(pRow[0]));
  996. if(it != mp_reader_list.end()){
  997. pReader = it->second;
  998. }else{
  999. pReader = new Reader();
  1000. pReader->reader_interval_time = m_reader_interval_time;
  1001. pReader->reader_id = atoi(pRow[0]);
  1002. mp_reader_list.insert(make_pair(pReader->reader_id, pReader));
  1003. nRow++;
  1004. }
  1005. pReader->map_id = atoi(pRow[1]);
  1006. MapInfoMap::iterator map_it = mp_map_list.find(pReader->map_id);
  1007. if(map_it != mp_map_list.end()){
  1008. ReaderMap::iterator reader_it = map_it->second->map_reader_list.find(pReader->reader_id);
  1009. if(reader_it == map_it->second->map_reader_list.end()){
  1010. map_it->second->map_reader_list.insert(make_pair(pReader->reader_id, pReader));
  1011. }
  1012. pReader->map_scale = map_it->second->map_scale;
  1013. }
  1014. pReader->area_id = atoi(pRow[2]);
  1015. pReader->reader_name = pRow[3];
  1016. pReader->reader_x = atof(pRow[4]);
  1017. pReader->reader_y = atof(pRow[5]);
  1018. pReader->reader_z = atof(pRow[6]);
  1019. pReader->reader_angle = atof(pRow[7]) * M_PI /180;
  1020. pReader->ip = pRow[9];
  1021. pReader->device_type_id = atoi(pRow[10]);
  1022. pReader->pos_state = atoi(pRow[11]);
  1023. pReader->m_nIsSpecial = atoi(pRow[12]);
  1024. }
  1025. mysql_free_result(pRes);
  1026. CString strlog;
  1027. strlog.Format(_T("%s%d%s"), _T(LOG_INIT_READER), nRow, _T(LOG_RECORD_COUNT));
  1028. show_log(strlog);
  1029. return 0;
  1030. }
  1031. int CYAServerDlg::init_antenna(int reader_id /* = 0 */)
  1032. {
  1033. CMysqlConn* pConn = NULL;
  1034. CDBConnGuard pDbGuard(pConn);
  1035. if(pConn == NULL){
  1036. return 1;
  1037. }
  1038. MYSQL_ROW pRow;
  1039. MYSQL_RES *pRes = NULL;
  1040. int err = 0;
  1041. char strsql[LENGTH_SQL] = {0};
  1042. if(reader_id == 0){
  1043. sprintf_s(strsql, "SELECT antenna_id, a.reader_id, reader_idx, a.x, a.y, a.z, a.angle \
  1044. FROM dat_antenna a, dat_reader r \
  1045. WHERE a.reader_id = r.reader_id;");
  1046. }else{
  1047. sprintf_s(strsql, "SELECT antenna_id, a.reader_id, reader_idx, a.x, a.y, a.z, a.angle \
  1048. FROM dat_antenna a, dat_reader r \
  1049. WHERE a.reader_id = r.reader_id AND reader_id = %d; ", reader_id);
  1050. }
  1051. pRes = pConn->Execute(strsql,err);
  1052. int nRow = 0;
  1053. while(pRow = mysql_fetch_row(pRes)){
  1054. ReaderMap::iterator it = mp_reader_list.find(atoi(pRow[1]));
  1055. if(it != mp_reader_list.end()){
  1056. Antenna* ant = new Antenna();
  1057. ant->antenna_id = atoi(pRow[0]);
  1058. ant->antenna_x = atof(pRow[3]);
  1059. ant->antenna_y = atof(pRow[4]);
  1060. ant->antenna_z = atof(pRow[5]);
  1061. ant->antenna_angle = atof(pRow[6]) * M_PI / 180.0;
  1062. int idx = (atoi(pRow[2]) == 1) ? 0 : 1;
  1063. it->second->ant[idx] = ant;
  1064. nRow++;
  1065. }
  1066. }
  1067. mysql_free_result(pRes);
  1068. CString strlog;
  1069. strlog.Format(_T("%s%d%s"), _T(LOG_INIT_ANTENNA), nRow, _T(LOG_RECORD_COUNT));
  1070. show_log(strlog);
  1071. return 0;
  1072. }
  1073. int CYAServerDlg::init_dev_adhoc( int reader_id /*= 0*/ )
  1074. {
  1075. CMysqlConn* pConn = NULL;
  1076. CDBConnGuard pDbGuard(pConn);
  1077. if(pConn == NULL){
  1078. return 1;
  1079. }
  1080. MYSQL_ROW pRow;
  1081. MYSQL_RES *pRes = NULL;
  1082. int err = 0;
  1083. char strsql[LENGTH_SQL] = {0};
  1084. if(reader_id == 0){//dat_dev_adhoc
  1085. sprintf_s(strsql, "select ad.id, ad.reader_id, ad.level, ad.x, ad.y, ad.z from dat_dev_adhoc ad, dat_reader r \
  1086. where ad.reader_id = r.reader_id;");
  1087. }else{
  1088. sprintf_s(strsql, "select ad.id, ad.reader_id, ad.level, ad.x, ad.y, ad.z from dat_dev_adhoc ad, dat_reader r \
  1089. where ad.reader_id = r.reader_id and ad.reader_id = %d; ", reader_id);
  1090. }
  1091. pRes = pConn->Execute(strsql,err);
  1092. if(pRes == NULL){
  1093. return 1;
  1094. }
  1095. int nRow = 0;
  1096. int idx = 0;
  1097. while(pRow = mysql_fetch_row(pRes)){
  1098. ReaderMap::iterator it = mp_reader_list.find(atoi(pRow[1]));
  1099. if(it != mp_reader_list.end()){
  1100. Adhoc* adhoc = new Adhoc();
  1101. adhoc->adhoc_id = atoi(pRow[0]);
  1102. adhoc->idx = atoi(pRow[2]);
  1103. adhoc->x = atof(pRow[3]);
  1104. adhoc->y = atof(pRow[4]);
  1105. adhoc->z = atof(pRow[5]);
  1106. idx = (adhoc->idx < ADHOC_COUNT)?adhoc->idx:0;
  1107. it->second->adhoc[idx] = adhoc;
  1108. nRow++;
  1109. }
  1110. }
  1111. mysql_free_result(pRes);
  1112. CString strlog;
  1113. strlog.Format(_T("%s%d%s"), _T(LOG_INIT_ADHOC_LOCATE), nRow, _T(LOG_RECORD_COUNT));
  1114. show_log(strlog);
  1115. return 0;
  1116. }
  1117. /*
  1118. * 函数名:init_all_readers_coverage
  1119. * 从数据库的dat_reader_path表中读取指定map_id和reader_id的地图范围集,
  1120. * 将此分站的地图范围集保存在分站类中的readerCoverage中;
  1121. * 如果指定了相同的地图范围集的reader_id,则直接将指定的reader_id的地图范围集赋值给此reader_id的地图范围集
  1122. * 然后将地图集赋值给station
  1123. *
  1124. *
  1125. * @param
  1126. * reader_id 分站id号
  1127. *
  1128. * @return
  1129. * -1,表示在分站map中未找到此分站信息或者未正常执行;0,表示正常执行
  1130. *
  1131. */
  1132. int CYAServerDlg::init_all_readers_coverage(int reader_id)
  1133. {
  1134. CMysqlConn* pConn = NULL;
  1135. CDBConnGuard pDbGuard(pConn);
  1136. //如果无可用数据库连接,不执行后续操作
  1137. if(pConn == NULL){
  1138. return 1;
  1139. }
  1140. char sql[LENGTH_SQL] = {0};
  1141. if(reader_id == 0){
  1142. sprintf_s(sql, "select p.start_reader_id,p.end_reader_id,p.idx,p.x,p.y,p.z,p.is_bezier from dat_reader_path_tdoa p ,dat_reader r where p.start_reader_id = r.reader_id;");
  1143. }else{
  1144. sprintf_s(sql, "select p.start_reader_id,p.end_reader_id,p.idx,p.x,p.y,p.z,p.is_bezier from dat_reader_path_tdoa p ,dat_reader r where p.start_reader_id = %d; ", reader_id);
  1145. }
  1146. MYSQL_RES* pRes = NULL;
  1147. MYSQL_ROW pRow;
  1148. int err = 0;
  1149. int nRow = 0;
  1150. //查询数据库
  1151. pRes = pConn->Execute(sql,err);
  1152. //从数据库获得信息赋给分站对象的地图集
  1153. while(pRow = mysql_fetch_row(pRes)){
  1154. int nReaderId = atoi(pRow[1]);
  1155. ReaderMap::iterator it = mp_reader_list.find(nReaderId);
  1156. int nSameConfigReader = atoi(pRow[0]);
  1157. int nIdx = atoi(pRow[2]);
  1158. //判断地图集信息是否可利用其它分站的覆盖范围,如果可用,则使用其它分站的覆盖范围
  1159. //-1表示不可用,否则表示可复用分站id号为nSameConfigReader的地图集覆盖范围
  1160. if(nSameConfigReader == -1){
  1161. _point p;
  1162. p.x = atof(pRow[3]);
  1163. p.y = atof(pRow[4]);
  1164. p.z = atof(pRow[5]);
  1165. it->second->readerCoveragePath.insert(make_pair(nIdx,p));
  1166. it->second->bIsInitCoverage = true;
  1167. nRow++;
  1168. }else{
  1169. it->second->readerCoveragePath = mp_reader_list.find(nSameConfigReader)->second->readerCoveragePath;
  1170. it->second->bIsInitCoverage = true;
  1171. nRow++;
  1172. }
  1173. }
  1174. mysql_free_result(pRes);
  1175. //输出操作数据库的日志信息
  1176. CString strlog;
  1177. strlog.Format(_T("%s%d%s"), _T(LOG_INIT_READER_PATH), nRow, _T(LOG_RECORD_COUNT));
  1178. show_log(strlog);
  1179. //根据获得地图集将其赋给mp_reader_path_list
  1180. ReaderMap::iterator it = mp_reader_list.begin();
  1181. for(it;it!=mp_reader_list.end();it++){
  1182. if(it->second->bIsInitCoverage){
  1183. int nReaderId = it->second->reader_id - 1;
  1184. double dMapScale = mp_map_list.find(it->second->map_id)->second->map_scale;
  1185. ReaderPath* pReaderPath = NULL;
  1186. ReaderPathMap::iterator prpIt = mp_reader_path_list.find(nReaderId);
  1187. if(prpIt != mp_reader_path_list.end()){
  1188. pReaderPath = prpIt->second;
  1189. }else{
  1190. pReaderPath = new ReaderPath();
  1191. mp_reader_path_list.insert(make_pair(nReaderId,pReaderPath));
  1192. }
  1193. pReaderPath->nRealCalcPoints = it->second->readerCoveragePath.size();
  1194. for(int i=0;i<2;i++){
  1195. pReaderPath->x[i] = it->second->ant[i]->antenna_x*dMapScale;
  1196. pReaderPath->y[i] = it->second->ant[i]->antenna_y*dMapScale;
  1197. pReaderPath->z[i] = it->second->ant[i]->antenna_z*dMapScale;
  1198. }
  1199. for(size_t j = 1;j <= it->second->readerCoveragePath.size(); j++){
  1200. pReaderPath->px[j - 1] = it->second->readerCoveragePath.find(j)->second.x*dMapScale;
  1201. pReaderPath->py[j - 1] = it->second->readerCoveragePath.find(j)->second.y*dMapScale;
  1202. pReaderPath->pz[j - 1] = it->second->readerCoveragePath.find(j)->second.z*dMapScale;
  1203. }
  1204. }
  1205. }
  1206. return 0;
  1207. }
  1208. /*
  1209. * 函数名:init_tdoa_all_readers_coverage
  1210. * 实现初始化TDOA方式的地图集描述,并存储冗余数据
  1211. * 冗余数据的主要作用在于:例如存在分站<B1,B2>之间的地图集描述,那么也存在<B2,B1>的对应关系
  1212. *
  1213. * param
  1214. * reader_id ------ 分站id号
  1215. *
  1216. * return
  1217. * 如果执行失败返回-1
  1218. * 正确执行,返回0
  1219. *
  1220. */
  1221. //int CYAServerDlg::init_tdoa_all_readers_coverage(int reader_id)
  1222. //{
  1223. // CMysqlConn* pConn = NULL;
  1224. // CDBConnGuard pDbGuard(pConn);
  1225. //
  1226. // //无可用数据库连接
  1227. // if(pConn == NULL){
  1228. // return 1;
  1229. // }
  1230. //
  1231. // char sql[LENGTH_SQL] = {0};
  1232. // if(reader_id == 0){
  1233. // //dat_reader_path_tdoa_bjd1
  1234. // //dat_reader_path_tdoa
  1235. // sprintf_s(sql, "select p.start_reader_id,p.end_reader_id,p.idx,p.x,p.y,p.z,p.is_bezier from dat_reader_path_tdoa p ,dat_reader r where p.start_reader_id = r.reader_id;");
  1236. // }else{
  1237. // sprintf_s(sql, "select start_reader_id,end_reader_id,idx,x,y,z,is_bezier from dat_reader_path_tdoa where p.start_reader_id =%d; ", reader_id);
  1238. // }
  1239. //
  1240. // MYSQL_RES* pRes = NULL;
  1241. // MYSQL_ROW pRow;
  1242. // int err = 0;
  1243. // int nRow = 0;
  1244. //
  1245. // //查询数据库
  1246. // pRes = pConn->Execute(sql,err);
  1247. //
  1248. // double mapScale = 0.0;
  1249. // while(pRow = mysql_fetch_row(pRes)){
  1250. // int start_reader_id = atoi(pRow[0]);
  1251. // int end_reader_id = atoi(pRow[1]);
  1252. // int ndx = atoi(pRow[2]);
  1253. //
  1254. // //后缀_r都为冗余信息
  1255. // ReaderPath* prp = NULL;
  1256. // ReaderPath* prp_r = NULL;
  1257. //
  1258. // TDOAReaderPathMap::iterator it = mp_reader_path_list_tdoa.find(start_reader_id);
  1259. //
  1260. // if(it == mp_reader_path_list_tdoa.end()){
  1261. // ReaderPathMap* prpm = new ReaderPathMap();
  1262. // ReaderPath* prp1 = new ReaderPath();
  1263. // //prp1->nRealCalcPoints++;
  1264. // prpm->insert(make_pair(end_reader_id,prp1));
  1265. // mp_reader_path_list_tdoa.insert(make_pair(start_reader_id,prpm));
  1266. //
  1267. // //冗余数据
  1268. // ReaderPathMap* prpm_r = new ReaderPathMap();
  1269. // ReaderPath* prp1_r = new ReaderPath();
  1270. // //prp1_r->nRealCalcPoints++;
  1271. // prpm_r->insert(make_pair(start_reader_id,prp1_r));
  1272. // mp_reader_path_list_tdoa.insert(make_pair(end_reader_id,prpm_r));
  1273. // }else{
  1274. // ReaderPathMap::iterator it2;
  1275. // it2 = it->second->find(end_reader_id);
  1276. // if(it2 == it->second->end()){
  1277. // ReaderPath* prp1 = new ReaderPath();
  1278. // //prp1->nRealCalcPoints++;
  1279. // it->second->insert(make_pair(end_reader_id,prp1));
  1280. //
  1281. // //冗余数据
  1282. // ReaderPathMap* prpm_r = new ReaderPathMap();
  1283. // ReaderPath* prp1_r = new ReaderPath();
  1284. // //prp1_r->nRealCalcPoints++;
  1285. // prpm_r->insert(make_pair(start_reader_id,prp1_r));
  1286. // mp_reader_path_list_tdoa.insert(make_pair(end_reader_id,prpm_r));
  1287. // }
  1288. // }
  1289. //
  1290. // ReaderPathMap::iterator it_rpm = mp_reader_path_list_tdoa.find(start_reader_id)->second->find(end_reader_id);
  1291. // if(it_rpm!=mp_reader_path_list_tdoa.find(start_reader_id)->second->end()){
  1292. // prp = it_rpm->second;
  1293. // }else{
  1294. // prp = new ReaderPath();
  1295. // mp_reader_path_list_tdoa.find(start_reader_id)->second->insert(make_pair(end_reader_id,prp));
  1296. // }
  1297. //
  1298. // //冗余信息
  1299. // ReaderPathMap::iterator it_rpm_r = mp_reader_path_list_tdoa.find(end_reader_id)->second->find(start_reader_id);
  1300. // if(it_rpm_r!=mp_reader_path_list_tdoa.find(end_reader_id)->second->end()){
  1301. // prp_r = it_rpm_r->second;
  1302. // }else{
  1303. // prp_r = new ReaderPath();
  1304. // mp_reader_path_list_tdoa.find(end_reader_id)->second->insert(make_pair(start_reader_id,prp));
  1305. // }
  1306. //
  1307. // //获得地图比例
  1308. // int map_id = mp_reader_list.find(start_reader_id)->second->map_id;
  1309. // MapInfoMap::iterator mit = mp_map_list.find(map_id);
  1310. // if(mit == mp_map_list.end()){
  1311. // //没有相关地图信息,要输出错误日志
  1312. // AfxMessageBox(_T("分站所在地图不存在!"));
  1313. // break;
  1314. // }
  1315. // mapScale = mp_map_list.find(map_id)->second->map_scale;
  1316. //
  1317. // if(prp->nRealCalcPoints < ndx){
  1318. // prp->nRealCalcPoints = ndx;
  1319. // }
  1320. // if(prp_r->nRealCalcPoints < ndx){
  1321. // prp_r->nRealCalcPoints = ndx;
  1322. // }
  1323. //
  1324. // if(!prp->bIsInit){
  1325. // //获得分站坐标,其中索引0表示起始分站坐标,索引1表示结束分站坐标
  1326. // prp->x[0] = mp_reader_list.find(start_reader_id)->second->reader_x*mapScale;
  1327. // prp->y[0] = mp_reader_list.find(start_reader_id)->second->reader_y*mapScale;
  1328. // prp->z[0] = 0;
  1329. // prp->x[1] = mp_reader_list.find(end_reader_id)->second->reader_x*mapScale;
  1330. // prp->y[1] = mp_reader_list.find(end_reader_id)->second->reader_y*mapScale;
  1331. // prp->z[1] = 0;
  1332. // prp->px[ndx-1] = atof(pRow[3])*mapScale;
  1333. // prp->py[ndx-1] = atof(pRow[4])*mapScale;
  1334. // prp->bIsInit = true;
  1335. // }
  1336. //
  1337. // if(!prp_r->bIsInit){
  1338. // //冗余信息
  1339. // prp_r->x[0] = mp_reader_list.find(end_reader_id)->second->reader_x*mapScale;
  1340. // prp_r->y[0] = mp_reader_list.find(end_reader_id)->second->reader_y*mapScale;
  1341. // prp_r->z[0] = 0;
  1342. // prp_r->x[1] = mp_reader_list.find(start_reader_id)->second->reader_x*mapScale;
  1343. // prp_r->y[1] = mp_reader_list.find(start_reader_id)->second->reader_y*mapScale;
  1344. // prp_r->z[1] = 0;
  1345. // prp_r->px[ndx-1] = atof(pRow[3])*mapScale;
  1346. // prp_r->py[ndx-1] = atof(pRow[4])*mapScale;
  1347. // prp->bIsInit = true;
  1348. // }
  1349. //
  1350. // //prp_r->nRealCalcPoints++;
  1351. // }
  1352. // mysql_free_result(pRes);
  1353. //
  1354. // //输出操作结果信息
  1355. // CString strlog;
  1356. // strlog.Format(_T("%s%d%s"), _T(LOG_INIT_MAP_PATH), nRow, _T(LOG_RECORD_COUNT));
  1357. // show_log(strlog);
  1358. //
  1359. // return 0;
  1360. //}
  1361. int CYAServerDlg::init_tdoa_all_readers_coverage(int reader_id)
  1362. {
  1363. CMysqlConn* pConn = NULL;
  1364. CDBConnGuard pDbGuard(pConn);
  1365. //无可用数据库连接
  1366. if(pConn == NULL){
  1367. return 1;
  1368. }
  1369. char sql[LENGTH_SQL] = {0};
  1370. if(reader_id == 0){
  1371. //dat_reader_path_tdoa_bjd1
  1372. //dat_reader_path_tdoa
  1373. sprintf_s(sql, "select p.start_reader_id,p.end_reader_id,p.idx,p.x,p.y,p.z,p.is_bezier from dat_reader_path_tdoa p ,dat_reader r where p.start_reader_id = r.reader_id;");
  1374. }else{
  1375. sprintf_s(sql, "select start_reader_id,end_reader_id,idx,x,y,z,is_bezier from dat_reader_path_tdoa where p.start_reader_id =%d; ", reader_id);
  1376. }
  1377. MYSQL_RES* pRes = NULL;
  1378. MYSQL_ROW pRow;
  1379. int err = 0;
  1380. int nRow = 0;
  1381. //查询数据库
  1382. pRes = pConn->Execute(sql,err);
  1383. double mapScale = 0.0;
  1384. while(pRow = mysql_fetch_row(pRes)){
  1385. int start_reader_id = atoi(pRow[0]);
  1386. int end_reader_id = atoi(pRow[1]);
  1387. int ndx = atoi(pRow[2]);
  1388. //后缀_r都为冗余信息
  1389. ReaderPath* prp = NULL;
  1390. ReaderPath* prp_r = NULL;
  1391. TDOAReaderPathMap::iterator it = mp_reader_path_list_tdoa.find(start_reader_id);
  1392. if(it == mp_reader_path_list_tdoa.end()){
  1393. ReaderPathMap* prpm = new ReaderPathMap();
  1394. ReaderPath* prp1 = new ReaderPath();
  1395. //prp1->nRealCalcPoints++;
  1396. prpm->insert(make_pair(end_reader_id,prp1));
  1397. mp_reader_path_list_tdoa.insert(make_pair(start_reader_id,prpm));
  1398. //冗余数据
  1399. ReaderPathMap* prpm_r = new ReaderPathMap();
  1400. ReaderPath* prp1_r = new ReaderPath();
  1401. //prp1_r->nRealCalcPoints++;
  1402. prpm_r->insert(make_pair(start_reader_id,prp1_r));
  1403. mp_reader_path_list_tdoa.insert(make_pair(end_reader_id,prpm_r));
  1404. }else{
  1405. ReaderPathMap::iterator it2;
  1406. it2 = it->second->find(end_reader_id);
  1407. if(it2 == it->second->end()){
  1408. ReaderPath* prp1 = new ReaderPath();
  1409. //prp1->nRealCalcPoints++;
  1410. it->second->insert(make_pair(end_reader_id,prp1));
  1411. }
  1412. }
  1413. TDOAReaderPathMap::iterator it_r = mp_reader_path_list_tdoa.find(end_reader_id);
  1414. if(it_r == mp_reader_path_list_tdoa.end()){
  1415. ReaderPathMap* prpm = new ReaderPathMap();
  1416. ReaderPath* prp1 = new ReaderPath();
  1417. //prp1->nRealCalcPoints++;
  1418. prpm->insert(make_pair(start_reader_id,prp1));
  1419. mp_reader_path_list_tdoa.insert(make_pair(end_reader_id,prpm));
  1420. }else{
  1421. ReaderPathMap::iterator it2;
  1422. it2 = it_r->second->find(start_reader_id);
  1423. if(it2 == it_r->second->end()){
  1424. ReaderPath* prp1 = new ReaderPath();
  1425. //prp1->nRealCalcPoints++;
  1426. it_r->second->insert(make_pair(start_reader_id,prp1));
  1427. }
  1428. }
  1429. ReaderPathMap::iterator it_rpm = mp_reader_path_list_tdoa.find(start_reader_id)->second->find(end_reader_id);
  1430. if(it_rpm!=mp_reader_path_list_tdoa.find(start_reader_id)->second->end()){
  1431. prp = it_rpm->second;
  1432. }else{
  1433. prp = new ReaderPath();
  1434. mp_reader_path_list_tdoa.find(start_reader_id)->second->insert(make_pair(end_reader_id,prp));
  1435. }
  1436. //冗余信息
  1437. ReaderPathMap::iterator it_rpm_r = mp_reader_path_list_tdoa.find(end_reader_id)->second->find(start_reader_id);
  1438. if(it_rpm_r!=mp_reader_path_list_tdoa.find(end_reader_id)->second->end()){
  1439. prp_r = it_rpm_r->second;
  1440. }else{
  1441. prp_r = new ReaderPath();
  1442. mp_reader_path_list_tdoa.find(end_reader_id)->second->insert(make_pair(start_reader_id,prp));
  1443. }
  1444. //获得地图比例
  1445. int map_id = mp_reader_list.find(start_reader_id)->second->map_id;
  1446. MapInfoMap::iterator mit = mp_map_list.find(map_id);
  1447. if(mit == mp_map_list.end()){
  1448. //没有相关地图信息,要输出错误日志
  1449. AfxMessageBox(_T("分站所在地图不存在!"));
  1450. break;
  1451. }
  1452. mapScale = mp_map_list.find(map_id)->second->map_scale;
  1453. if(prp->nRealCalcPoints < ndx){
  1454. prp->nRealCalcPoints = ndx;
  1455. }
  1456. if(prp_r->nRealCalcPoints < ndx){
  1457. prp_r->nRealCalcPoints = ndx;
  1458. }
  1459. if(!prp->bIsInit){
  1460. //获得分站坐标,其中索引0表示起始分站坐标,索引1表示结束分站坐标
  1461. prp->x[0] = mp_reader_list.find(start_reader_id)->second->reader_x*mapScale;
  1462. prp->y[0] = mp_reader_list.find(start_reader_id)->second->reader_y*mapScale;
  1463. prp->z[0] = 0;
  1464. prp->x[1] = mp_reader_list.find(end_reader_id)->second->reader_x*mapScale;
  1465. prp->y[1] = mp_reader_list.find(end_reader_id)->second->reader_y*mapScale;
  1466. prp->z[1] = 0;
  1467. prp->bIsInit = true;
  1468. }
  1469. prp->px[ndx-1] = atof(pRow[3])*mapScale;
  1470. prp->py[ndx-1] = atof(pRow[4])*mapScale;
  1471. if(!prp_r->bIsInit){
  1472. //冗余信息
  1473. prp_r->x[0] = mp_reader_list.find(end_reader_id)->second->reader_x*mapScale;
  1474. prp_r->y[0] = mp_reader_list.find(end_reader_id)->second->reader_y*mapScale;
  1475. prp_r->z[0] = 0;
  1476. prp_r->x[1] = mp_reader_list.find(start_reader_id)->second->reader_x*mapScale;
  1477. prp_r->y[1] = mp_reader_list.find(start_reader_id)->second->reader_y*mapScale;
  1478. prp_r->z[1] = 0;
  1479. prp_r->bIsInit = true;
  1480. }
  1481. prp_r->px[ndx-1] = atof(pRow[3])*mapScale;
  1482. prp_r->py[ndx-1] = atof(pRow[4])*mapScale;
  1483. //prp_r->nRealCalcPoints++;
  1484. }
  1485. mysql_free_result(pRes);
  1486. //输出操作结果信息
  1487. CString strlog;
  1488. strlog.Format(_T("%s%d%s"), _T(LOG_INIT_MAP_PATH), nRow, _T(LOG_RECORD_COUNT));
  1489. show_log(strlog);
  1490. return 0;
  1491. }
  1492. void CYAServerDlg::ws_init()
  1493. {
  1494. is_websocket_ok = false;
  1495. is_websocket_login = false;
  1496. _io->set_reconnect_attempts(3);
  1497. using std::placeholders::_1;
  1498. using std::placeholders::_2;
  1499. using std::placeholders::_3;
  1500. using std::placeholders::_4;
  1501. socket::ptr sock = _io->socket();
  1502. //default socket opened, also we have "set_open_listener" for monitoring physical connection opened.
  1503. //sock->on(JSON_CMD_VALUE_USER, sio::socket::event_listener_aux(std::bind(&CYAServerDlg::OnLoginMessage,this,_1,_2,_3,_4)));
  1504. sock->on(JSON_CMD_VALUE_USER, sio::socket::event_listener_aux(std::bind(&CYAServerDlg::OnLogin, this, _1,_2,_3,_4)));
  1505. sock->on(JSON_CMD_VALUE_CALL, sio::socket::event_listener_aux(std::bind(&CYAServerDlg::OnCallMessage,this,_1,_2,_3,_4)));
  1506. sock->on(JSON_CMD_VALUE_PUSH, sio::socket::event_listener(std::bind(&CYAServerDlg::OnPushMessage, this)));
  1507. //sock->on(JSON_CMD_VALUE_USER, sio::socket::event_listener(std::bind(&CYAServerDlg::OnLoginCallBack, this, std::placeholders::_1)));
  1508. _io->set_socket_open_listener(std::bind(&CYAServerDlg::OnConnected, this));
  1509. //_io->set_open_listener(std::bind(&CYAServerDlg::OnConnected, this));
  1510. //physical connection closed or drop.
  1511. _io->set_close_listener(std::bind(&CYAServerDlg::OnClosed,this, std::placeholders::_1));
  1512. //physical connection fail to establish.
  1513. _io->set_fail_listener(std::bind(&CYAServerDlg::OnFailed,this));
  1514. }
  1515. void CYAServerDlg::ws_close()
  1516. {
  1517. //_io->socket()->off_all();
  1518. //_io->socket()->off_error();
  1519. }
  1520. void CYAServerDlg::ws_login()
  1521. {
  1522. USES_CONVERSION;
  1523. CC2UTF8 conv = (char*)get_json_login().c_str();
  1524. string szlogin = conv.c_str();
  1525. _io->socket()->emit(JSON_CMD_VALUE_USER, szlogin, [&](sio::message::list const& msglist){
  1526. message::ptr msg_ptr = msglist[0];
  1527. int n =(int)msg_ptr->get_map()["code"]->get_int();
  1528. is_websocket_login = (0 == n) ? true : false;
  1529. CString strlog;
  1530. wchar_t* p_url = CFunctions::c2wc(m_ws_url.c_str());
  1531. if(is_websocket_login){
  1532. strlog.Format(_T("%s: %s"), _T(LOG_LOGIN_WEB_SERVER), p_url/*CFunctions::c2wc(m_ws_url.c_str())*/);
  1533. //show_log(strlog);
  1534. }else{
  1535. p_url = CFunctions::c2wc(m_ws_url.c_str());
  1536. strlog.Format(_T("%s: %s, err: %d"), _T(LOG_LOGIN_WEB_SERVER_FAILED), p_url, n/*CFunctions::c2wc(m_ws_url.c_str())*/);
  1537. }
  1538. show_log(strlog);
  1539. if(p_url){
  1540. free(p_url);
  1541. p_url = NULL;
  1542. }
  1543. });
  1544. }
  1545. void CYAServerDlg::ws_logout()
  1546. {
  1547. USES_CONVERSION;
  1548. CC2UTF8 conv = (char*)get_json_logout().c_str();
  1549. string szlogout = conv.c_str();
  1550. _io->socket()->emit(JSON_CMD_VALUE_USER, szlogout, [&](sio::message::list const& msglist){
  1551. message::ptr msg_ptr = msglist[0];
  1552. int n =(int)msg_ptr->get_map()["code"]->get_int();
  1553. CString strlog;
  1554. wchar_t* p_url = CFunctions::c2wc(m_ws_url.c_str());
  1555. if(n == 0){
  1556. strlog.Format(_T("%s: %s"), _T(LOG_LOGOUT_WEB_SERVER), p_url/*CFunctions::c2wc(m_ws_url.c_str())*/);
  1557. //show_log(strlog);
  1558. }else{
  1559. p_url = CFunctions::c2wc(m_ws_url.c_str());
  1560. strlog.Format(_T("%s: %s, err: %d"), _T(LOG_LOGOUT_WEB_SERVER_FAILED), p_url, n/*CFunctions::c2wc(m_ws_url.c_str())*/);
  1561. }
  1562. show_log(strlog);
  1563. if(p_url){
  1564. free(p_url);
  1565. p_url = NULL;
  1566. }
  1567. });
  1568. //send_json_data(JSON_CMD_VALUE_USER, get_json_logout().c_str());
  1569. //CString strlog;
  1570. //wchar_t* p_url = CFunctions::c2wc(m_ws_url.c_str());
  1571. //strlog.Format(_T("%s: %s"), _T(LOG_LOGOUT_WEB_SERVER), p_url/*CFunctions::c2wc(m_ws_url.c_str())*/);
  1572. //show_log(strlog);
  1573. //if(p_url){
  1574. // free(p_url);
  1575. // p_url = NULL;
  1576. //}
  1577. }
  1578. void CYAServerDlg::start_tcp_server()
  1579. {
  1580. set_app_state(ST_STARTING);
  1581. if(_server.Start(LOCAL_ADDRESS, PORT_SERVER_MASTER))
  1582. {
  1583. ::LogServerStart(LOCAL_ADDRESS, PORT_SERVER_MASTER);
  1584. set_app_state(ST_STARTED);
  1585. }
  1586. else
  1587. {
  1588. ::LogServerStartFail(_server.GetLastError(), _server.GetLastErrorDesc());
  1589. set_app_state(ST_STOPPED);
  1590. }
  1591. }
  1592. void CYAServerDlg::stop_tcp_server()
  1593. {
  1594. set_app_state(ST_STOPPING);
  1595. if(_server.Stop()){
  1596. ::LogServerStop();
  1597. set_app_state(ST_STOPPED);
  1598. }
  1599. else{
  1600. //ASSERT(FALSE);
  1601. }
  1602. }
  1603. void CYAServerDlg::clear_listener()
  1604. {
  1605. //SocketMap::iterator it_sock = mp_socket_list.begin();
  1606. //for(; it_sock != mp_socket_list.end();){
  1607. // it_sock->second->Close();
  1608. // mp_socket_list.erase(it_sock++);
  1609. //}
  1610. }
  1611. void CYAServerDlg::clear_all_list()
  1612. {
  1613. // 清空创建的对象
  1614. //mp_card_list_all.clear();
  1615. //mp_reader_list.clear();
  1616. //mp_area_list.clear();
  1617. //mp_map_list.clear();
  1618. }
  1619. void CYAServerDlg::parse_data(BYTE *pData, int nLen, DWORD dwConnID)
  1620. {
  1621. //CString strBuf;
  1622. //formatByteArray(strBuf, (BYTE*)pData, nLen);
  1623. //writeErrorLog(_T("RAW_SS"), strBuf, false);
  1624. WORD tmplen = 0;
  1625. SocketBufferMap::iterator it = mp_socket_buffer_list.find(dwConnID);
  1626. if(it != mp_socket_buffer_list.end()){ // 有此socket数据
  1627. if(0 == it->second->wReadLen){ // 新的数据包
  1628. memset(it->second->pData, 0, LENGTH_MSG_4K);
  1629. tmplen = MAKEWORD(pData[1], pData[0]) + sizeof(WORD); // 加上描述长度的两字节
  1630. it->second->wLen = tmplen;
  1631. if(tmplen > nLen){
  1632. tmplen = nLen;
  1633. }
  1634. //TRACE(_T("1 \n"));
  1635. memcpy(it->second->pData, pData, tmplen);
  1636. }else{ // 接着上一次收取
  1637. tmplen = min(nLen, it->second->wLen - it->second->wReadLen);
  1638. //TRACE(_T("2 \n"));
  1639. memcpy(&it->second->pData[it->second->wReadLen], pData, tmplen);
  1640. }
  1641. it->second->wReadLen += tmplen;
  1642. if(it->second->wReadLen >= it->second->wLen){ // 接收完毕
  1643. parse_data_receive(&it->second->pData[sizeof(WORD)], it->second->wLen - sizeof(WORD), dwConnID); // 减去表示长度的两个字节
  1644. it->second->wReadLen = 0; // 重置
  1645. }
  1646. }else{ // 无此socket数据
  1647. _SOCKET_BUFFER* _sockbuf = new _SOCKET_BUFFER;
  1648. _sockbuf->wReadLen = 0;
  1649. _sockbuf->dwConnID = dwConnID;
  1650. _sockbuf->wLen = MAKEWORD(pData[1], pData[0]) + sizeof(WORD); // 加上描述长度的两个字节
  1651. memset(_sockbuf->pData, 0, LENGTH_MSG_4K);
  1652. //TRACE(_T("3 \n"));
  1653. memcpy(_sockbuf->pData, pData, nLen);
  1654. _sockbuf->wReadLen += nLen;
  1655. mp_socket_buffer_list.insert(make_pair(dwConnID, _sockbuf));
  1656. if(_sockbuf->wReadLen >= _sockbuf->wLen){
  1657. parse_data_receive(&_sockbuf->pData[sizeof(WORD)], nLen - sizeof(WORD), dwConnID); // 减去表示长度的两个字节
  1658. _sockbuf->wReadLen = 0;
  1659. }
  1660. }
  1661. }
  1662. void CYAServerDlg::parse_data_receive(BYTE *pData, int nLen, DWORD dwConnID )
  1663. {
  1664. if(m_log_raw_data){
  1665. //CString strBuf;
  1666. //formatByteArray(strBuf, (BYTE*)pData, nLen);
  1667. //writeErrorLog(_T("RAW_SS"), strBuf, false);
  1668. }
  1669. int total_pos = 0;
  1670. WORD pkg_len = 0;
  1671. while(total_pos < nLen){ // 处理粘包
  1672. if(total_pos + sizeof(WORD) >= nLen){
  1673. int aa = 20;
  1674. //break;
  1675. }
  1676. pkg_len = MAKEWORD(pData[total_pos+1], pData[total_pos]); // 单个数据包长度
  1677. if(total_pos + pkg_len> nLen)
  1678. {
  1679. int aa = 20;
  1680. }
  1681. TRACE("new memory = %d\n",pkg_len);
  1682. BYTE* DataBuffer = new BYTE[pkg_len];
  1683. if(DataBuffer){
  1684. memset(DataBuffer, 0, pkg_len);
  1685. //TRACE(_T("4 \n"));
  1686. memcpy(DataBuffer, &pData[total_pos], pkg_len + sizeof(WORD)); // 一个数据包
  1687. parse_package_data(DataBuffer, pkg_len + sizeof(WORD), dwConnID); // 解析数据包
  1688. }
  1689. //WaitForMS(3);
  1690. //delete[] DataBuffer;
  1691. //DataBuffer = NULL;
  1692. total_pos += pkg_len + sizeof(WORD); // 数据包长度 + 长度自身两个字节
  1693. }
  1694. }
  1695. void CYAServerDlg::parse_package_data(BYTE* DataBuffer, int nLen, DWORD dwConnID )
  1696. {
  1697. if(DataBuffer == NULL){
  1698. return;
  1699. }
  1700. DWORD dw = ::GetTickCount();
  1701. CString strBuf = _T("");
  1702. if(m_log_raw_data){
  1703. formatByteArray(strBuf, DataBuffer, nLen);
  1704. writeErrorLog(_T("RAW_S"), strBuf, false);
  1705. //strBuf = _T("");
  1706. strBuf.Empty();
  1707. }
  1708. int nCurPos = 0;
  1709. nCurPos += sizeof(WORD);
  1710. nLen -= sizeof(WORD); // 减去数据长度
  1711. WORD wCrc = CFunctions::getCRC(&DataBuffer[nCurPos], nLen - sizeof(WORD)); // CRC校验码
  1712. WORD w ;
  1713. CFunctions::getWord(&DataBuffer[nCurPos], &w, nLen - sizeof(WORD));
  1714. if( w != wCrc ){ // 校验不对
  1715. //if(theApp.log_raw_data){
  1716. if(m_log_raw_data){
  1717. strBuf = _T("CRC校验不通过");
  1718. writeErrorLog(_T("RAW_S"), strBuf);
  1719. //strBuf = _T("");
  1720. strBuf.Empty();
  1721. }
  1722. return;
  1723. }
  1724. WORD wChr = 0;
  1725. CFunctions::getWord(DataBuffer, &wChr, nCurPos);
  1726. nCurPos += sizeof(WORD);
  1727. int reader_id = 0;
  1728. int nTick = 0;
  1729. CString strtime = _T("");
  1730. switch (wChr){
  1731. case CHAR_LOCATEDATA: // 定位数据
  1732. {
  1733. parse_data_locate_reader(DataBuffer, nCurPos, nLen, dwConnID, reader_id);
  1734. ReaderMap::iterator it = mp_reader_list.find(reader_id);
  1735. if(it != mp_reader_list.end()){
  1736. while(nCurPos < nLen - (int)sizeof(WORD)){ // 减去crc
  1737. parse_data_locate_card(DataBuffer, nCurPos, reader_id, wChr);
  1738. }
  1739. }
  1740. break;
  1741. }
  1742. case CHAR_LOCATEDATA_TDOA:
  1743. {
  1744. parse_data_locate_reader(DataBuffer, nCurPos, nLen, dwConnID, reader_id);
  1745. ReaderMap::iterator it = mp_reader_list.find(reader_id);
  1746. if(it != mp_reader_list.end()){
  1747. while(nCurPos < nLen - (int)sizeof(WORD)){ // 减去crc
  1748. parse_data_locate_card(DataBuffer, nCurPos, reader_id, wChr);
  1749. }
  1750. }
  1751. break;
  1752. }
  1753. case CHAR_LOCATEDATAHIS:
  1754. {
  1755. g_is_rec_hist = true;
  1756. parse_data_locate_reader_his(DataBuffer, nLen, nCurPos, reader_id, nTick, strtime, wChr);
  1757. while(nCurPos < nLen - (int)sizeof(WORD)){ // 减去crc
  1758. parse_data_locate_card_his(DataBuffer, nCurPos, reader_id, nTick, strtime, wChr);
  1759. }
  1760. break;
  1761. }
  1762. case CHAR_LOCATEDATAHIS_TDOA:
  1763. {
  1764. g_is_rec_hist = true;
  1765. parse_data_locate_reader_his(DataBuffer, nLen, nCurPos, reader_id, nTick, strtime, wChr);
  1766. BYTE* bt = new BYTE[nLen];
  1767. while(nCurPos < nLen - (int)sizeof(WORD)){ // 减去crc
  1768. // 获取一条记录的长度
  1769. WORD wframelen = 0;
  1770. CFunctions::getWord(DataBuffer, &wframelen, nCurPos);
  1771. nCurPos += sizeof(WORD);
  1772. if(bt){
  1773. memset(bt, 0, nLen);
  1774. memcpy(bt, &DataBuffer[nCurPos], wframelen);
  1775. parse_data_locate_card_his_tdoa(bt, wframelen, reader_id, nTick, strtime);
  1776. }
  1777. nCurPos += nLen;
  1778. }
  1779. delete[] bt;
  1780. break;
  1781. }
  1782. case CHAR_HIST_DATA_FINISH:
  1783. {
  1784. g_is_rec_hist = false;
  1785. // 完成历史数据上传,可点名下一分站
  1786. }
  1787. case CHAR_READER_SYNC_TIME:
  1788. {
  1789. parse_data_reader_synctime(DataBuffer ,nLen ,nCurPos);
  1790. break;
  1791. }
  1792. case CHAR_ADHOC:
  1793. {
  1794. parse_data_locate_reader(DataBuffer, nCurPos, nLen, dwConnID, reader_id);
  1795. ReaderMap::iterator it = mp_reader_list.find(reader_id);
  1796. if(it != mp_reader_list.end()){
  1797. while(nCurPos < nLen - (int)sizeof(WORD)){ // 减去crc
  1798. parse_data_adhoc(DataBuffer, nCurPos, reader_id);
  1799. }
  1800. }
  1801. break;
  1802. }
  1803. default:
  1804. //WriteInfoFile("未能解析的命令!");
  1805. break;
  1806. }
  1807. strtime.ReleaseBuffer();
  1808. //TRACE(_T("parse_package_data: id: %Iu, t: %d,total t: %d, len: %d\r\n"),dwConnID,::GetTickCount()-dw,::GetTickCount()-g_testtick,nLen);
  1809. }
  1810. void CYAServerDlg::parse_data_locate_reader(BYTE * DataBuffer, int& nCurPos, int nLen, DWORD dwConnID, int& reader_id )
  1811. {
  1812. // 分站号
  1813. DWORD dwReaderID;
  1814. CFunctions::getDWord(DataBuffer, &dwReaderID, nCurPos);
  1815. nCurPos += sizeof(DWORD);
  1816. reader_id = dwReaderID;
  1817. //_SOCK* sock = get_socket_by_count(dwConnID);
  1818. //if(NULL == sock){ // 列表中不存在
  1819. // if(_server.Disconnect(dwConnID))
  1820. // ::LogDisconnect(dwConnID);
  1821. // else
  1822. // ::LogDisconnectFail(dwConnID);
  1823. // return;
  1824. //}
  1825. ReaderMap::iterator itReader = mp_reader_list.find(dwReaderID);
  1826. Reader* pReader;
  1827. bool isErrorReader = false;
  1828. if(itReader != mp_reader_list.end()){
  1829. pReader = itReader->second;
  1830. add_socket_to_list(dwConnID, reader_id);
  1831. }else{
  1832. return;
  1833. isErrorReader = true;
  1834. pReader = new Reader();
  1835. pReader->reader_id = dwReaderID;
  1836. TRACE(_T("parse_data_locate_reader : new Reader \n"));
  1837. //mp_reader_list.insert(make_pair(dwReaderID, pReader)); // 只处理在数据库中维护的
  1838. }
  1839. // 接收数据时间
  1840. //TRACE(_T("time memcpy \n"));
  1841. pReader->rec_time = time(NULL); // COleDateTime::GetTickCount();
  1842. m_time_last_rec = pReader->rec_time; // 更新最后信号时间
  1843. // 分站时间戳
  1844. WORD wTickCount = 0;
  1845. CFunctions::getWord(DataBuffer, &wTickCount, nCurPos);
  1846. nCurPos += sizeof(WORD);
  1847. pReader->tick_count = wTickCount;
  1848. // 分站时间
  1849. // 7字节 从第一个字节开始,分别表示秒、分、时、天、周、月、年
  1850. BYTE btSec = 0;
  1851. //TRACE(_T("5 \n"));
  1852. memcpy(&btSec, &DataBuffer[nCurPos], sizeof(BYTE));
  1853. nCurPos += sizeof(BYTE);
  1854. BYTE btMin = 0;
  1855. memcpy(&btMin, &DataBuffer[nCurPos], sizeof(BYTE));
  1856. nCurPos += sizeof(BYTE);
  1857. BYTE btHour = 0;
  1858. memcpy(&btHour, &DataBuffer[nCurPos], sizeof(BYTE));
  1859. nCurPos += sizeof(BYTE);
  1860. BYTE btDay = 0;
  1861. memcpy(&btDay, &DataBuffer[nCurPos], sizeof(BYTE));
  1862. nCurPos += sizeof(BYTE);
  1863. BYTE btWeek = 0;
  1864. memcpy(&btWeek, &DataBuffer[nCurPos], sizeof(BYTE));
  1865. nCurPos += sizeof(BYTE);
  1866. BYTE btMonth = 0;
  1867. memcpy(&btMonth, &DataBuffer[nCurPos], sizeof(BYTE));
  1868. nCurPos += sizeof(BYTE);
  1869. BYTE btYear = 0;
  1870. memcpy(&btYear, &DataBuffer[nCurPos], sizeof(BYTE));
  1871. nCurPos += sizeof(BYTE);
  1872. struct tm reader_time;
  1873. reader_time.tm_sec = btSec;
  1874. reader_time.tm_min = btMin;
  1875. reader_time.tm_hour = btHour;
  1876. reader_time.tm_mday = btDay;
  1877. reader_time.tm_wday = btWeek;
  1878. reader_time.tm_mon = btMonth - 1;
  1879. reader_time.tm_year = btYear + 100; // + 2000 - 1900
  1880. pReader->reader_time = mktime(&reader_time);
  1881. // 温度
  1882. BYTE btTemperature = 0;
  1883. memcpy(&btTemperature, &DataBuffer[nCurPos], sizeof(BYTE));
  1884. nCurPos += sizeof(BYTE);
  1885. pReader->temperature = btTemperature;
  1886. // 状态
  1887. WORD wState = 0;
  1888. CFunctions::getWord(DataBuffer, &wState, sizeof(WORD));
  1889. nCurPos += sizeof(WORD);
  1890. // pReader->state = wState;
  1891. //if(theApp.log_parse_data){
  1892. if(m_log_parse_data){
  1893. CString strLog;
  1894. strLog.Format(_T("id:%d, n:%d, %.2d-%.2d-%.2d %.2d:%.2d:%.2d, tep:%d, sta:%d"),
  1895. dwReaderID, wTickCount, btYear, btMonth, btDay, btHour, btMin, btSec, btTemperature, wState);
  1896. writeErrorLog(_T("PARSE_S"), strLog);
  1897. //strLog = _T("");
  1898. strLog.Empty();
  1899. }
  1900. }
  1901. void CYAServerDlg::parse_data_locate_card(BYTE* DataBuffer, int& nCurPos, int reader_id, unsigned short wChr)
  1902. {
  1903. ReaderMap::iterator it = mp_reader_list.find(reader_id);
  1904. // 卡类型
  1905. BYTE btCardType = 0;
  1906. //TRACE(_T("6 \n"));
  1907. memcpy(&btCardType, &DataBuffer[nCurPos], sizeof(BYTE));
  1908. nCurPos += sizeof(BYTE);
  1909. // 卡号
  1910. DWORD dwCardId = 0;
  1911. CFunctions::getDWord(DataBuffer, &dwCardId, nCurPos);
  1912. nCurPos += sizeof(DWORD);
  1913. // 获取标识卡编号, 3位卡类型 + 10位卡号
  1914. string str_card_id = CFunctions::getstrwithzero(btCardType, 3) + CFunctions::getstrwithzero(dwCardId, 10);
  1915. Card* card = NULL;
  1916. bool isErrorCard = false;
  1917. CardMap::iterator it_card = mp_card_list_all.find(str_card_id);
  1918. if(it_card != mp_card_list_all.end()){
  1919. card = it_card->second;
  1920. }else{
  1921. isErrorCard = true;
  1922. card = new Card(str_card_id, btCardType, theApp.z_offset);
  1923. //TRACE(_T("parse_data_locate_card : new Card \n"));
  1924. #ifdef ALGORITHM_TYPE_TOF
  1925. card->set_reader_path(&mp_reader_path_list);
  1926. #elif defined ALGORITHM_TYPE_TDOA
  1927. card->set_reader_path(&mp_reader_path_list_tdoa);
  1928. #endif
  1929. //mp_card_list_all.insert(make_pair(str_card_id, card));
  1930. }
  1931. // 设置当前分站, 进入分站时间、进入区域时间,当前区域,当前地图
  1932. card->set_reader(it->second);
  1933. card->reader_tickcount = it->second->tick_count;
  1934. card->is_hist = false;
  1935. switch(btCardType)
  1936. {
  1937. case CT_VEHICLE:
  1938. {
  1939. //DWORD dw = ::GetTickCount();
  1940. parse_data_locate_card_vehicle(DataBuffer, nCurPos, card, wChr);
  1941. if(isErrorCard){
  1942. //TRACE(_T("delete card: %d \r\n"));
  1943. delete card;
  1944. card = NULL;
  1945. return;
  1946. }
  1947. deal_card_msg(card);
  1948. //TRACE(_T("deal_card: %d \r\n"), ::GetTickCount() - dw);
  1949. break;
  1950. }
  1951. case CT_PERSON:
  1952. {
  1953. parse_data_locate_card_vehicle(DataBuffer, nCurPos, card, wChr);
  1954. if(isErrorCard){
  1955. //TRACE(_T("delete card: %d \r\n"));
  1956. delete card;
  1957. card = NULL;
  1958. return;
  1959. }
  1960. deal_card_msg(card);
  1961. break;
  1962. }
  1963. default:
  1964. {
  1965. // 无法识别的数据
  1966. break;
  1967. }
  1968. }
  1969. /*if(isErrorCard){
  1970. wchar_t* p_card_id = CFunctions::c2wc(card->card_id.c_str());
  1971. TRACE(_T("card_id : %s\n"),p_card_id);
  1972. if(p_card_id){
  1973. free(p_card_id);
  1974. p_card_id = NULL;
  1975. }
  1976. delete card;
  1977. card = NULL;
  1978. }*/
  1979. }
  1980. void CYAServerDlg::parse_data_locate_card_vehicle(BYTE* DataBuffer, int& nCurPos, Card* card, unsigned short wChr )
  1981. {
  1982. if(LT_READER == theApp.locate_type){
  1983. card->isdealed = false;
  1984. card->isreceive = true;
  1985. card->issent = false;
  1986. }
  1987. // 报文时间
  1988. WORD wCardTickCount;
  1989. CFunctions::getWord(DataBuffer, &wCardTickCount, nCurPos);
  1990. nCurPos += sizeof(WORD);
  1991. BYTE btTypeAndPower;
  1992. //TRACE(_T("7 \n"));
  1993. memcpy(&btTypeAndPower, &DataBuffer[nCurPos], sizeof(BYTE));
  1994. nCurPos += sizeof(BYTE);
  1995. //报文类型
  1996. BYTE btType;
  1997. btType = (btTypeAndPower >>4) & 0x0F;
  1998. //电池电量
  1999. BYTE btPower;
  2000. btPower = btTypeAndPower & 0x0F;
  2001. //保留
  2002. nCurPos += sizeof(BYTE);
  2003. //加速度
  2004. BYTE btAcceleration;
  2005. memcpy(&btAcceleration, &DataBuffer[nCurPos], sizeof(BYTE));
  2006. nCurPos += sizeof(BYTE);
  2007. //定位时间戳Tsp // 字序
  2008. LONG64 lTime1 = 0;
  2009. BYTE btTemp = 0;
  2010. int nRangingPos = nCurPos;
  2011. memcpy(&btTemp, &DataBuffer[nCurPos], sizeof(BYTE));
  2012. nCurPos += sizeof(BYTE);
  2013. DWORD dwTemp = 0;
  2014. CFunctions::getDWord(DataBuffer, &dwTemp, nCurPos);
  2015. nCurPos += sizeof(DWORD);
  2016. lTime1 = btTemp;
  2017. lTime1 = lTime1 << 32;
  2018. lTime1 |= ((long long)dwTemp & 0xffffffff);
  2019. // 距离
  2020. double dldist = CFunctions::getDistance(lTime1);
  2021. //dldist *= card->map_scale;
  2022. // 天线
  2023. BYTE btAntenna;
  2024. memcpy(&btAntenna, &DataBuffer[nCurPos], sizeof(BYTE));
  2025. nCurPos += sizeof(BYTE);
  2026. WORD wSyncNum = 0;
  2027. WORD wStrength = 0;
  2028. if(CHAR_LOCATEDATA_TDOA == wChr){
  2029. // 分站时间同步序列号
  2030. CFunctions::getWord(DataBuffer, &wSyncNum, nCurPos);
  2031. nCurPos += sizeof(WORD);
  2032. // 信号强度
  2033. CFunctions::getWord(DataBuffer, &wStrength, nCurPos);
  2034. nCurPos += sizeof(WORD);
  2035. }
  2036. #ifdef ALGORITHM_TYPE_INS
  2037. if(card->accelerate_state != btAcceleration){
  2038. //如果加速度状态发生了改变,就重置惯导的权重值
  2039. card->ins_weight = INS_WEIGHT;
  2040. }
  2041. #endif
  2042. if(LT_COORDINATE == theApp.locate_type){
  2043. card->time_stamp = wCardTickCount;
  2044. card->ranging_type = btType;
  2045. card->power_state = btPower;
  2046. card->accelerate_state = btAcceleration;
  2047. card->flying_time = lTime1;
  2048. card->sync_num = wSyncNum;
  2049. card->antenna_id = ((btAntenna & 0xFF) == 1) ? 0 : 1;
  2050. card->distance = dldist;
  2051. if(m_log_parse_data){
  2052. CString strLog;
  2053. wchar_t* p_card_id = CFunctions::c2wc(card->card_id.c_str());
  2054. strLog.Format(_T("id:%s, n:%d, type:%d, power:%d, acc:%d, flytime:%I64u, d:%f, ant:%d, syncnum:%d, strength:%d"),
  2055. p_card_id/*CFunctions::c2wc(card->card_id.c_str())*/, wCardTickCount, btType, btPower, btAcceleration, lTime1, dldist, btAntenna, wSyncNum, wStrength);
  2056. writeErrorLog(_T("PARSE_S"), strLog, true);
  2057. //strLog = _T("");
  2058. strLog.Empty();
  2059. if(p_card_id){
  2060. free(p_card_id);
  2061. p_card_id = NULL;
  2062. }
  2063. }
  2064. }else if(LT_READER == theApp.locate_type){
  2065. if(card->time_stamp < 0xFF && card->time_stamp < wCardTickCount){
  2066. card->time_stamp = wCardTickCount;
  2067. card->ranging_type = btType;
  2068. card->power_state = btPower;
  2069. card->accelerate_state = btAcceleration;
  2070. card->flying_time = lTime1;
  2071. card->sync_num = wSyncNum;
  2072. card->antenna_id = ((btAntenna & 0xFF) == 1) ? 0 : 1;
  2073. card->distance = dldist;
  2074. }else if(0xFF == card->time_stamp && wCardTickCount == 0){
  2075. card->time_stamp = wCardTickCount;
  2076. card->ranging_type = btType;
  2077. card->power_state = btPower;
  2078. card->accelerate_state = btAcceleration;
  2079. card->flying_time = lTime1;
  2080. card->sync_num = wSyncNum;
  2081. card->antenna_id = ((btAntenna & 0xFF) == 1) ? 0 : 1;
  2082. card->distance = dldist;
  2083. }
  2084. }
  2085. }
  2086. void CYAServerDlg::parse_data_adhoc( BYTE* DataBuffer, int& nCurPos, int reader_id )
  2087. {
  2088. ReaderMap::iterator it = mp_reader_list.find(reader_id);
  2089. BYTE nlen = 0, nDeal = nCurPos;
  2090. //获取自组网数据长度,1字节
  2091. memcpy(&nlen, &DataBuffer[nCurPos], sizeof(BYTE));
  2092. nCurPos += sizeof(BYTE);
  2093. while (nlen > nCurPos - nDeal){
  2094. //获取命令字,1字节
  2095. BYTE btCmd = 0;
  2096. memcpy(&btCmd, &DataBuffer[nCurPos], sizeof(BYTE));
  2097. nCurPos += sizeof(BYTE);
  2098. btCmd = btCmd&0x3F;
  2099. //获取源地址ID,1字节
  2100. BYTE btId = 0;
  2101. memcpy(&btId, &DataBuffer[nCurPos], sizeof(BYTE));
  2102. nCurPos += sizeof(BYTE);
  2103. //时间戳,1字节
  2104. BYTE btTickcount = 0;
  2105. memcpy(&btTickcount, &DataBuffer[nCurPos], sizeof(BYTE));
  2106. nCurPos += sizeof(BYTE);
  2107. //节点级别,1字节
  2108. BYTE btIdx = 0;
  2109. memcpy(&btIdx, &DataBuffer[nCurPos], sizeof(BYTE));
  2110. nCurPos += sizeof(BYTE);
  2111. if(btId != 0){
  2112. string str_card_id = CFunctions::getstrwithzero(CT_ADHOC, 3) + CFunctions::getstrwithzero(btId, 10);
  2113. Card* card = NULL;
  2114. CardMap::iterator it_card = mp_card_list_all.find(str_card_id);
  2115. if(it_card != mp_card_list_all.end()){
  2116. card = it_card->second;
  2117. }else{
  2118. card = new Card(str_card_id, CT_ADHOC, theApp.z_offset);
  2119. mp_card_list_all.insert(make_pair(str_card_id, card));
  2120. }
  2121. CardMap::iterator it_adhoc_card = mp_card_list_down_adhoc.find(str_card_id);
  2122. if(it_adhoc_card==mp_card_list_down_adhoc.end()&&it_card!=mp_card_list_all.end()){
  2123. if(card == NULL){
  2124. mp_card_list_down_adhoc.insert(make_pair(str_card_id, it_card->second));
  2125. }else{
  2126. mp_card_list_down_adhoc.insert(make_pair(str_card_id, card));
  2127. }
  2128. }
  2129. //设置当前分站, 进入分站时间、进入区域时间,当前区域,当前地图
  2130. card->set_reader(it->second);
  2131. if(btIdx < 0 || btIdx >= ADHOC_COUNT){
  2132. btIdx = 0;
  2133. }
  2134. if(it->second->adhoc[btIdx]){
  2135. card->x = it->second->adhoc[btIdx]->x;
  2136. card->y = it->second->adhoc[btIdx]->y;
  2137. card->z = it->second->adhoc[btIdx]->z;
  2138. }
  2139. if(btCmd & 0x01){ // 呼救
  2140. card->status_help = STATUS_ERROR;
  2141. }else if(btCmd & 0x02){ // 呼叫应答,即呼叫成功
  2142. if(STATUS_NORMAL == card->status_call){
  2143. card->state_biz = STATUS_NORMAL;
  2144. }
  2145. }else {
  2146. card->status_call = STATUS_NORMAL;
  2147. card->status_help = STATUS_NORMAL;
  2148. }
  2149. card->issent = false;
  2150. //if(card->status_help != btCmd){
  2151. // card->status_help = btCmd;
  2152. //}
  2153. deal_card_msg(card);
  2154. }
  2155. }
  2156. }
  2157. void CYAServerDlg::add_socket_to_list(DWORD dwConnID, DWORD reader_id )
  2158. {
  2159. TCHAR szAddress[40];
  2160. int iAddressLen = sizeof(szAddress) / sizeof(TCHAR);
  2161. USHORT usPort;
  2162. if( _server.GetRemoteAddress(dwConnID, szAddress, iAddressLen, usPort)){
  2163. SocketMap::iterator itSock = mp_socket_list.find(szAddress);
  2164. if(itSock != mp_socket_list.end()){
  2165. itSock->second->dwConnID = dwConnID;
  2166. itSock->second->state = 0;
  2167. itSock->second->reader_id = reader_id;
  2168. }else{
  2169. _SOCK *sock = new _SOCK();
  2170. sock->sip = szAddress;
  2171. sock->dwConnID = dwConnID;
  2172. sock->state = 0;
  2173. sock->reader_id = reader_id;
  2174. mp_socket_list.insert(make_pair(szAddress, sock));
  2175. ::PostMessage(this->GetSafeHwnd(), WM_REFRESH_IP_LIST, 1, 0);
  2176. }
  2177. }
  2178. }
  2179. void CYAServerDlg::remove_socket(DWORD dwConnID )
  2180. {
  2181. EnterCriticalSection(&m_csRemoveSocket);
  2182. bool bNeedRefresh = false;
  2183. SocketMap::iterator _sock = mp_socket_list.begin();
  2184. while(_sock != mp_socket_list.end()){
  2185. if(_sock->second->dwConnID == dwConnID){
  2186. _SOCK* s = _sock->second;
  2187. mp_socket_list.erase(_sock++);
  2188. bNeedRefresh = true;
  2189. if(s){
  2190. delete s;
  2191. s = NULL;
  2192. }
  2193. }else{
  2194. ++_sock;
  2195. }
  2196. }
  2197. if(bNeedRefresh){
  2198. ::PostMessage(this->GetSafeHwnd(), WM_REFRESH_IP_LIST, 0, 0);
  2199. }
  2200. LeaveCriticalSection(&m_csRemoveSocket);
  2201. }
  2202. // 获取设备状态信息, 分站、红绿灯、道岔、扩音器
  2203. std::string CYAServerDlg::get_json_device_state()
  2204. {
  2205. char _time[STR_LEN_TIME];
  2206. struct tm local_time;
  2207. Json::Value root;
  2208. Json::Value state_maps;
  2209. MapInfoMap::iterator it_map = mp_map_list.begin();
  2210. int nn = 0;
  2211. for(; it_map != mp_map_list.end(); ++it_map){
  2212. Json::Value state_map;
  2213. Json::Value state_devs;
  2214. int n = 0;
  2215. ReaderMap::iterator it = mp_reader_list.begin();
  2216. for(; it != mp_reader_list.end(); ++it){
  2217. if(it->second->map_id != it_map->second->map_id) continue;
  2218. //if(it->second->state != it->second->state_old){
  2219. Json::Value state_dev;
  2220. state_dev[JSON_KEY_DEV_STATE_DEVICE_ID] = it->second->reader_id;
  2221. state_dev[JSON_KEY_DEV_STATE_STATE_DESC] = it->second->get_state_text();
  2222. state_dev[JSON_KEY_DEV_STATE_STATE] = it->second->state;
  2223. state_dev[JSON_KEY_DEV_STATE_DEVICE_TYPE_ID] = it->second->device_type_id;
  2224. localtime_s(&local_time, &it->second->rec_time);
  2225. strftime(_time, STR_LEN_TIME, "%Y-%m-%d %H:%M:%S", &local_time);
  2226. state_dev[JSON_KEY_DEV_STATE_TIME] = _time;
  2227. n++;
  2228. state_devs.append(state_dev);
  2229. it->second->state_old = it->second->state;
  2230. //}
  2231. }
  2232. if(n >0){
  2233. state_map[JSON_KEY_DEV_STATE_MAP_ID] = it_map->second->map_id;
  2234. state_map[JSON_KEY_DEV_STATE_DEVICES] = state_devs;
  2235. nn++;
  2236. state_maps.append(state_map);
  2237. }
  2238. }
  2239. if(nn>0){
  2240. root[JSON_ROOT_KEY_CMD] = JSON_CMD_VALUE_DEV_STATE;
  2241. root[JSON_ROOT_KEY_DATA] = state_maps;
  2242. return root.toFastString();
  2243. }
  2244. return "";
  2245. }
  2246. std::string CYAServerDlg::get_json_alarm()
  2247. {
  2248. Json::Value root;
  2249. Json::Value data;
  2250. Json::Value _global;
  2251. Json::Value _areas;
  2252. Json::Value _readers;
  2253. Json::Value _staff;
  2254. Json::Value _vehicle;
  2255. Json::Value _adhoc;
  2256. unsigned int alarm_count = 0;
  2257. char _time[STR_LEN_TIME];
  2258. struct tm local_time;
  2259. // global
  2260. // 人员超员
  2261. alarm_count = mp_card_list_down_person.size();
  2262. if(alarm_count > sls_setting.over_count_person){ // if(time_over_count_person >0)
  2263. Json::Value alarm;
  2264. Json::Value detail;
  2265. alarm[JSON_KEY_ALARM_ITEM] = JSON_KEY_ALARM_OVER_COUNT_PERSON;
  2266. detail[JSON_KEY_ALARM_MAX] = sls_setting.over_count_person;
  2267. detail[JSON_KEY_ALARM_CURRENT] = alarm_count;
  2268. alarm[JSON_KEY_ALARM_DETAIL] = detail;
  2269. _global.append(alarm);
  2270. }
  2271. // 车辆超员
  2272. alarm_count = mp_card_list_down_vehicle.size();
  2273. if(alarm_count > sls_setting.over_count_vehicle){
  2274. Json::Value alarm;
  2275. Json::Value detail;
  2276. alarm[JSON_KEY_ALARM_ITEM] = JSON_KEY_ALARM_OVER_COUNT_VEHICLE;
  2277. detail[JSON_KEY_ALARM_MAX] = sls_setting.over_count_vehicle;
  2278. detail[JSON_KEY_ALARM_CURRENT] = alarm_count;
  2279. alarm[JSON_KEY_ALARM_DETAIL] = detail;
  2280. _global.append(alarm);
  2281. }
  2282. // 人员超时
  2283. alarm_count = mp_card_list_over_time_person.size();
  2284. if(alarm_count > 0){
  2285. Json::Value alarm;
  2286. Json::Value detail;
  2287. alarm[JSON_KEY_ALARM_ITEM] = JSON_KEY_ALARM_OVER_TIME_PERSON;
  2288. detail[JSON_KEY_ALARM_MAX] = sls_setting.over_time_person;
  2289. detail[JSON_KEY_ALARM_CURRENT] = alarm_count;
  2290. alarm[JSON_KEY_ALARM_DETAIL] = detail;
  2291. _global.append(alarm);
  2292. }
  2293. // 车辆超时
  2294. alarm_count = mp_card_list_over_time_vehicle.size();
  2295. if(alarm_count > 0){
  2296. Json::Value alarm;
  2297. Json::Value detail;
  2298. alarm[JSON_KEY_ALARM_ITEM] = JSON_KEY_ALARM_OVER_TIME_VEHICLE;
  2299. detail[JSON_KEY_ALARM_MAX] = sls_setting.over_time_vehicle;
  2300. detail[JSON_KEY_ALARM_CURRENT] = alarm_count;
  2301. alarm[JSON_KEY_ALARM_DETAIL] = detail;
  2302. _global.append(alarm);
  2303. }
  2304. // 车辆超速
  2305. alarm_count = mp_card_list_over_speed_vehicle.size();
  2306. if(alarm_count > 0){
  2307. Json::Value alarm;
  2308. Json::Value detail;
  2309. alarm[JSON_KEY_ALARM_ITEM] = JSON_KEY_ALARM_OVER_TIME_VEHICLE;
  2310. detail[JSON_KEY_ALARM_MAX] = sls_setting.over_speed;
  2311. detail[JSON_KEY_ALARM_CURRENT] = alarm_count;
  2312. alarm[JSON_KEY_ALARM_DETAIL] = detail;
  2313. _global.append(alarm);
  2314. }
  2315. // areas
  2316. // 人员超员
  2317. AreaMap::iterator it_area = mp_area_list.begin();
  2318. bool is_alarm = false;
  2319. for(; it_area != mp_area_list.end(); ++it_area){
  2320. is_alarm = false;
  2321. Json::Value area;
  2322. Json::Value alarms;
  2323. if(it_area->second->count_area_over_count_person > 0){
  2324. is_alarm = true;
  2325. Json::Value alarm;
  2326. Json::Value detail;
  2327. alarm[JSON_KEY_ALARM_ITEM] = JSON_KEY_ALARM_OVER_COUNT_PERSON;
  2328. detail[JSON_KEY_ALARM_MAX] = it_area->second->over_count_person;
  2329. detail[JSON_KEY_ALARM_CURRENT] = it_area->second->count_person;
  2330. alarm[JSON_KEY_ALARM_DETAIL] = detail;
  2331. alarms.append(alarm);
  2332. }
  2333. if(it_area->second->count_area_over_count_vehicle > 0){
  2334. is_alarm = true;
  2335. Json::Value alarm;
  2336. Json::Value detail;
  2337. alarm[JSON_KEY_ALARM_ITEM] = JSON_KEY_ALARM_OVER_COUNT_VEHICLE;
  2338. detail[JSON_KEY_ALARM_MAX] = it_area->second->over_count_vehicle;
  2339. detail[JSON_KEY_ALARM_CURRENT] = it_area->second->count_vehicle;
  2340. alarm[JSON_KEY_ALARM_DETAIL] = detail;
  2341. alarms.append(alarm);
  2342. }
  2343. if(it_area->second->count_area_over_time_person > 0){
  2344. is_alarm = true;
  2345. Json::Value alarm;
  2346. Json::Value detail;
  2347. alarm[JSON_KEY_ALARM_ITEM] = JSON_KEY_ALARM_OVER_TIME_PERSON;
  2348. detail[JSON_KEY_ALARM_MAX] = it_area->second->over_time_person;
  2349. detail[JSON_KEY_ALARM_CURRENT] = it_area->second->count_area_over_time_person;
  2350. alarm[JSON_KEY_ALARM_DETAIL] = detail;
  2351. alarms.append(alarm);
  2352. }
  2353. if(it_area->second->count_area_over_time_vehicle > 0){
  2354. is_alarm = true;
  2355. Json::Value alarm;
  2356. Json::Value detail;
  2357. alarm[JSON_KEY_ALARM_ITEM] = JSON_KEY_ALARM_OVER_TIME_VEHICLE;
  2358. detail[JSON_KEY_ALARM_MAX] = it_area->second->over_time_vehicle;
  2359. detail[JSON_KEY_ALARM_CURRENT] = it_area->second->count_area_over_time_vehicle;
  2360. alarm[JSON_KEY_ALARM_DETAIL] = detail;
  2361. alarms.append(alarm);
  2362. }
  2363. if(it_area->second->count_area_forbidden_person > 0 || it_area->second->count_area_forbidden_vehicle > 0){
  2364. is_alarm = true;
  2365. Json::Value alarm;
  2366. Json::Value detail;
  2367. alarm[JSON_KEY_ALARM_ITEM] = JSON_KEY_ALARM_AREA_FORBIDDEN;
  2368. detail[JSON_KEY_ALARM_PERSON] = it_area->second->count_area_forbidden_person;
  2369. detail[JSON_KEY_ALARM_VEHICLE] = it_area->second->count_area_forbidden_vehicle;
  2370. alarm[JSON_KEY_ALARM_DETAIL] = detail;
  2371. alarms.append(alarm);
  2372. }
  2373. if(is_alarm){
  2374. area[JSON_KEY_ALARM_AREA_ID] = it_area->first;//it_area->second->area_id;
  2375. area[JSON_KEY_ALARM_ALARMS] = alarms;
  2376. _areas.append(area);
  2377. }
  2378. }
  2379. // 分站
  2380. ReaderMap::iterator it_reader = mp_reader_list.begin();
  2381. alarm_count = 0;
  2382. for(; it_reader != mp_reader_list.end(); ++it_reader){
  2383. if (it_reader->second->state == STATUS_DEVICE_ERROR){
  2384. Json::Value alarm;
  2385. int r_id = it_reader->second->reader_id;
  2386. alarm[JSON_KEY_ALARM_READER_ID] = it_reader->second->reader_id;
  2387. alarm[JSON_KEY_ALARM_TYPE_ID] = ATID_READER;
  2388. AlarmTypeMap::iterator it_alarm = mp_alarm_type_list.find(ATID_READER);
  2389. if(it_alarm != mp_alarm_type_list.end()){
  2390. alarm[JSON_KEY_ALARM_TYPE_NAME] = it_alarm->second;
  2391. }
  2392. localtime_s(&local_time, &it_reader->second->rec_time);
  2393. strftime(_time, STR_LEN_TIME, "%Y-%m-%d %H:%M:%S", &local_time);
  2394. //strftime(_time, STR_LEN_TIME, "%m-%d %H:%M", &local_time);
  2395. alarm[JSON_KEY_ALARM_START_TIME] = _time;
  2396. _readers.append(alarm);
  2397. }
  2398. }
  2399. CardMap::iterator it_staff = mp_card_list_down_person.begin();
  2400. for(; it_staff != mp_card_list_down_person.end(); ++it_staff){
  2401. if(it_staff->second->status_area_over_time == STATUS_NORMAL &&
  2402. it_staff->second->status_area_forbidden == STATUS_NORMAL &&
  2403. it_staff->second->status_over_time == STATUS_NORMAL &&
  2404. it_staff->second->status_power == STATUS_NORMAL) {
  2405. continue;
  2406. }
  2407. Json::Value alarms;
  2408. Json::Value staff;
  2409. if(it_staff->second->status_area_forbidden == STATUS_ERROR){
  2410. time_t tt = it_staff->second->time_area_forbidden;
  2411. Json::Value alarm;
  2412. AlarmTypeMap::iterator it_alarm = mp_alarm_type_list.find(ATID_AREA_FORBIDDEN_PERSON);
  2413. if(it_alarm != mp_alarm_type_list.end()){
  2414. alarm[JSON_KEY_ALARM_TYPE_NAME] = it_alarm->second;
  2415. }
  2416. localtime_s(&local_time, &tt);
  2417. strftime(_time, STR_LEN_TIME, "%Y-%m-%d %H:%M:%S", &local_time);
  2418. alarm[JSON_KEY_ALARM_START_TIME] = _time;
  2419. alarms.append(alarm);
  2420. }
  2421. if(it_staff->second->status_area_over_time == STATUS_ERROR){
  2422. Json::Value alarm;
  2423. AlarmTypeMap::iterator it_alarm = mp_alarm_type_list.find(ATID_AREA_OVER_TIME_PERSON);
  2424. if(it_alarm != mp_alarm_type_list.end()){
  2425. alarm[JSON_KEY_ALARM_TYPE_NAME] = it_alarm->second;
  2426. }
  2427. localtime_s(&local_time, &it_staff->second->time_area_over_time);
  2428. strftime(_time, STR_LEN_TIME, "%Y-%m-%d %H:%M:%S", &local_time);
  2429. alarm[JSON_KEY_ALARM_START_TIME] = _time;
  2430. alarms.append(alarm);
  2431. }
  2432. if(it_staff->second->status_over_time == STATUS_ERROR){
  2433. Json::Value alarm;
  2434. AlarmTypeMap::iterator it_alarm = mp_alarm_type_list.find(ATID_OVER_TIME_PERSON);
  2435. if(it_alarm != mp_alarm_type_list.end()){
  2436. alarm[JSON_KEY_ALARM_TYPE_NAME] = it_alarm->second;
  2437. }
  2438. localtime_s(&local_time, &it_staff->second->time_over_time);
  2439. strftime(_time, STR_LEN_TIME, "%m-%d %H:%M", &local_time);
  2440. alarm[JSON_KEY_ALARM_START_TIME] = _time;
  2441. alarms.append(alarm);
  2442. }
  2443. if(it_staff->second->status_power == STATUS_ERROR){
  2444. Json::Value alarm;
  2445. AlarmTypeMap::iterator it_alarm = mp_alarm_type_list.find(ATID_POWER);
  2446. if(it_alarm != mp_alarm_type_list.end()){
  2447. alarm[JSON_KEY_ALARM_TYPE_NAME] = it_alarm->second;
  2448. }
  2449. localtime_s(&local_time, &it_staff->second->time_low_power);
  2450. strftime(_time, STR_LEN_TIME, "%Y-%m-%d %H:%M:%S", &local_time);
  2451. alarm[JSON_KEY_ALARM_START_TIME] = _time;
  2452. alarms.append(alarm);
  2453. }
  2454. if(alarms != NULL){
  2455. staff[JSON_KEY_ALARM_STAFFER_ID] = it_staff->first;//it_staff->second->id;
  2456. staff[JSON_KEY_ALARM_ALARMS] = alarms;
  2457. _staff.append(staff);
  2458. }
  2459. }
  2460. CardMap::iterator it_vehicle = mp_card_list_down_vehicle.begin();
  2461. for(; it_vehicle != mp_card_list_down_vehicle.end(); ++it_vehicle){
  2462. if(it_vehicle->second->status_area_forbidden == STATUS_NORMAL &&
  2463. it_vehicle->second->status_area_over_time == STATUS_NORMAL &&
  2464. it_vehicle->second->status_over_speed == STATUS_NORMAL &&
  2465. it_vehicle->second->status_over_time == STATUS_NORMAL &&
  2466. it_vehicle->second->status_power == STATUS_NORMAL ){
  2467. continue;
  2468. }
  2469. Json::Value alarms;
  2470. Json::Value vehichle;
  2471. if(it_vehicle->second->status_area_forbidden == STATUS_ERROR){
  2472. Json::Value alarm;
  2473. AlarmTypeMap::iterator it_alarm = mp_alarm_type_list.find(ATID_AREA_FORBIDDEN_VEHICLE);
  2474. if(it_alarm != mp_alarm_type_list.end()){
  2475. alarm[JSON_KEY_ALARM_TYPE_NAME] = it_alarm->second;
  2476. }
  2477. localtime_s(&local_time, &it_vehicle->second->time_area_forbidden);
  2478. strftime(_time, STR_LEN_TIME, "%Y-%m-%d %H:%M:%S", &local_time);
  2479. alarm[JSON_KEY_ALARM_START_TIME] = _time;
  2480. alarms.append(alarm);
  2481. }
  2482. if(it_vehicle->second->status_area_over_time == STATUS_ERROR){
  2483. Json::Value alarm;
  2484. AlarmTypeMap::iterator it_alarm = mp_alarm_type_list.find(ATID_AREA_OVER_TIME_VEHICLE);
  2485. if(it_alarm != mp_alarm_type_list.end()){
  2486. alarm[JSON_KEY_ALARM_TYPE_NAME] = it_alarm->second;
  2487. }
  2488. localtime_s(&local_time, &it_vehicle->second->time_area_over_time);
  2489. strftime(_time, STR_LEN_TIME, "%Y-%m-%d %H:%M:%S", &local_time);
  2490. alarm[JSON_KEY_ALARM_START_TIME] = _time;
  2491. alarms.append(alarm);
  2492. }
  2493. if(it_vehicle->second->status_over_time == STATUS_ERROR){
  2494. Json::Value alarm;
  2495. AlarmTypeMap::iterator it_alarm = mp_alarm_type_list.find(ATID_OVER_TIME_VEHICLE);
  2496. if(it_alarm != mp_alarm_type_list.end()){
  2497. alarm[JSON_KEY_ALARM_TYPE_NAME] = it_alarm->second;
  2498. }
  2499. localtime_s(&local_time, &it_vehicle->second->time_over_time);
  2500. strftime(_time, STR_LEN_TIME, "%Y-%m-%d %H:%M:%S", &local_time);
  2501. alarm[JSON_KEY_ALARM_START_TIME] = _time;
  2502. alarms.append(alarm);
  2503. }
  2504. if(it_vehicle->second->status_power == STATUS_ERROR){
  2505. Json::Value alarm;
  2506. AlarmTypeMap::iterator it_alarm = mp_alarm_type_list.find(ATID_POWER);
  2507. if(it_alarm != mp_alarm_type_list.end()){
  2508. alarm[JSON_KEY_ALARM_TYPE_NAME] = it_alarm->second;
  2509. }
  2510. localtime_s(&local_time, &it_vehicle->second->time_low_power);
  2511. strftime(_time, STR_LEN_TIME, "%Y-%m-%d %H:%M:%S", &local_time);
  2512. alarm[JSON_KEY_ALARM_START_TIME] = _time;
  2513. alarms.append(alarm);
  2514. }
  2515. if(it_vehicle->second->status_over_speed == STATUS_ERROR){
  2516. Json::Value alarm;
  2517. AlarmTypeMap::iterator it_alarm = mp_alarm_type_list.find(ATID_OVER_SPEED);
  2518. if(it_alarm != mp_alarm_type_list.end()){
  2519. alarm[JSON_KEY_ALARM_TYPE_NAME] = it_alarm->second;
  2520. }
  2521. localtime_s(&local_time, &it_vehicle->second->time_over_speed);
  2522. strftime(_time, STR_LEN_TIME, "%Y-%m-%d %H:%M:%S", &local_time);
  2523. alarm[JSON_KEY_ALARM_START_TIME] = _time;
  2524. alarms.append(alarm);
  2525. }
  2526. if(alarms != NULL){
  2527. vehichle[JSON_KEY_ALARM_STAFFER_ID] = it_vehicle->first;
  2528. vehichle[JSON_KEY_ALARM_ALARMS] = alarms;
  2529. _vehicle.append(vehichle);
  2530. }
  2531. }
  2532. if(_global != NULL){
  2533. data[JSON_KEY_ALARM_GLOBAL] = _global;
  2534. }
  2535. if(_areas != NULL){
  2536. data[JSON_KEY_ALARM_AREA] = _areas;
  2537. }
  2538. if(_readers != NULL){
  2539. data[JSON_KEY_ALARM_READER] = _readers;
  2540. }
  2541. if(_staff != NULL){
  2542. data[JSON_KEY_ALARM_STAFF] = _staff;
  2543. }
  2544. if(_vehicle != NULL){
  2545. data[JSON_KEY_ALARM_VEHICLE] = _vehicle;
  2546. }
  2547. if(data != NULL){
  2548. root[JSON_ROOT_KEY_CMD] = JSON_CMD_VALUE_ALARM;
  2549. root[JSON_ROOT_KEY_DATA] = data;
  2550. return root.toFastString();
  2551. }
  2552. return "";
  2553. }
  2554. int CYAServerDlg::get_help_card_nums()
  2555. {
  2556. int nRet = 0;
  2557. CardMap::iterator it = mp_card_list_down_adhoc.begin();
  2558. for(it;it!=mp_card_list_down_adhoc.end();++it){
  2559. if(it->second->status_help == STATUS_ERROR){
  2560. nRet++;
  2561. }
  2562. }
  2563. return nRet;
  2564. }
  2565. std::string CYAServerDlg::get_json_help()
  2566. {
  2567. Json::Value root;
  2568. Json::Value alarms;
  2569. Json::Value adhoc;
  2570. char _time[STR_LEN_TIME];
  2571. struct tm local_time;
  2572. CardMap::iterator it_adhoc = mp_card_list_down_adhoc.begin();
  2573. for(;it_adhoc!=mp_card_list_down_adhoc.end();++it_adhoc){
  2574. if(it_adhoc->second->status_help == STATUS_NORMAL){
  2575. continue;
  2576. }
  2577. Json::Value alarm;
  2578. if(it_adhoc->second->status_help == STATUS_ERROR){
  2579. alarm[JSON_KEY_CARD_ID] = it_adhoc->second->card_id;
  2580. alarm[JSON_KEY_CARD_TYPE_ID] = it_adhoc->second->card_type;
  2581. localtime_s(&local_time, &it_adhoc->second->enter_reader_time);
  2582. strftime(_time, STR_LEN_TIME, "%Y-%m-%d %H:%M:%S", &local_time);
  2583. alarm["start_time"] = _time;
  2584. }
  2585. if(!alarm.isNull()){
  2586. //alarms.append(alarm);
  2587. //alarms=alarm;
  2588. alarms.append(alarm);
  2589. string sss = "";
  2590. sss = alarms.toStyledString();
  2591. //adhoc.append(alarms);
  2592. }
  2593. }
  2594. if(!alarms.isNull()){
  2595. root[JSON_ROOT_KEY_CMD] = "helpme_req";
  2596. root[JSON_ROOT_KEY_DATA] = alarms;
  2597. }
  2598. string aa = "";
  2599. aa = root.toStyledString();
  2600. return root.toFastString();
  2601. }
  2602. std::string CYAServerDlg::get_json_down_and_up( Card* card )
  2603. {
  2604. //新json格式
  2605. Json::Value root;
  2606. Json::Value val_card;
  2607. Json::Value val_cards;
  2608. //卡号
  2609. val_card[JSON_KEY_CARD_ID] = card->card_id;
  2610. val_cards.append(val_card[JSON_KEY_CARD_ID]);
  2611. if(card->pos_state == DT_DOWN){
  2612. //x,y坐标
  2613. val_card[JSON_KEY_CORDINATE_X] = CFunctions::round(card->x,2);
  2614. val_cards.append(val_card[JSON_KEY_CORDINATE_X]);
  2615. val_card[JSON_KEY_CORDINATE_Y] = CFunctions::round(card->y,2);
  2616. val_cards.append(val_card[JSON_KEY_CORDINATE_Y]);
  2617. }else{
  2618. val_card[JSON_KEY_CORDINATE_X] = 0;
  2619. val_cards.append(val_card[JSON_KEY_CORDINATE_X]);
  2620. val_card[JSON_KEY_CORDINATE_Y] = 0;
  2621. val_cards.append(val_card[JSON_KEY_CORDINATE_Y]);
  2622. }
  2623. int ms = 1000;
  2624. //入井时间戳
  2625. double t = *((int64_t*)&card->down_time)*ms; //转为ms
  2626. val_card[JSON_KEY_DOWN_TIME] = t;
  2627. val_cards.append(val_card[JSON_KEY_DOWN_TIME]);
  2628. //进入区域时间戳
  2629. t = *((int64_t*)&card->enter_area_time)*ms;
  2630. val_card[JSON_KEY_ENTER_AREA_TIME] = t;
  2631. val_cards.append(val_card[JSON_KEY_ENTER_AREA_TIME]);
  2632. if(card->pos_state == DT_DOWN){
  2633. //接收时间戳
  2634. t = *((int64_t*)&card->rec_time)*ms;
  2635. val_card[JSON_KEY_REC_TIME] = t;
  2636. val_cards.append(val_card[JSON_KEY_REC_TIME]);
  2637. //工作时长
  2638. t = (int)(difftime(time(NULL), card->down_time))*ms;
  2639. val_card[JSON_KEY_WORK_TIME] = t;
  2640. val_cards.append(val_card[JSON_KEY_WORK_TIME]);
  2641. }else{
  2642. val_card[JSON_KEY_REC_TIME] = 0;
  2643. val_cards.append(val_card[JSON_KEY_REC_TIME]);
  2644. //工作时长
  2645. //t = (int)(difftime(time(NULL), card->down_time));
  2646. val_card[JSON_KEY_WORK_TIME] = 0;
  2647. val_cards.append(val_card[JSON_KEY_WORK_TIME]);
  2648. }
  2649. //地图编号
  2650. val_card[JSON_KEY_MAP_ID] = card->map_id;
  2651. val_cards.append(val_card[JSON_KEY_MAP_ID]);
  2652. //区域编号
  2653. val_card[JSON_KEY_AREA_ID] = card->area_id;
  2654. val_cards.append(val_card[JSON_KEY_AREA_ID]);
  2655. //部门编号
  2656. val_card[JSON_KEY_DEPT_ID] = card->dept_id;
  2657. val_cards.append(val_card[JSON_KEY_DEPT_ID]);
  2658. if(card->pos_state == DT_DOWN){
  2659. card->get_state_text();
  2660. //状态
  2661. val_card[JSON_KEY_STATE] = card->state;
  2662. val_cards.append(val_card[JSON_KEY_STATE]);
  2663. //运行状态
  2664. val_card[JSON_KEY_STATE_MOVING] = card->state_moving;
  2665. val_cards.append(val_card[JSON_KEY_STATE_MOVING]);
  2666. //业务状态
  2667. val_card[JSON_KEY_STATE_BIZ] = card->state_biz;
  2668. val_cards.append(val_card[JSON_KEY_STATE_BIZ]);
  2669. //速度
  2670. val_card[JSON_KEY_SPEED] = CFunctions::round(card->v,2);
  2671. val_cards.append(val_card[JSON_KEY_SPEED]);
  2672. }else{
  2673. //状态
  2674. val_card[JSON_KEY_STATE] = 0;
  2675. val_cards.append(val_card[JSON_KEY_STATE]);
  2676. //运行状态
  2677. val_card[JSON_KEY_STATE_MOVING] = 0;
  2678. val_cards.append(val_card[JSON_KEY_STATE_MOVING]);
  2679. //业务状态
  2680. val_card[JSON_KEY_STATE_BIZ] = 0;
  2681. val_cards.append(val_card[JSON_KEY_STATE_BIZ]);
  2682. //速度
  2683. val_card[JSON_KEY_SPEED] = 0;
  2684. val_cards.append(val_card[JSON_KEY_SPEED]);
  2685. }
  2686. root[JSON_ROOT_KEY_CMD] = (DT_DOWN == card->pos_state)? JSON_CMD_VALUE_DOWN_MINE : JSON_CMD_VALUE_UP_MINE;
  2687. root[JSON_ROOT_KEY_DATA].append(val_cards);
  2688. string ss = root.toStyledString();
  2689. return root.toFastString();
  2690. //旧版本json
  2691. //Json::Value root;
  2692. //Json::Value val_map;
  2693. //Json::Value val_maps;
  2694. //Json::Value val_card;
  2695. //Json::Value val_cards;
  2696. //char _time[STR_LEN_TIME];
  2697. //struct tm local_time;
  2698. //val_card[JSON_KEY_CARD_ID] = card->card_id;
  2699. //val_card[JSON_KEY_CARD_TYPE_ID] = card->card_type;
  2700. //val_card[JSON_KEY_CARD_NUM] = card->id;
  2701. //localtime_s(&local_time, &card->down_time);
  2702. //strftime(_time, STR_LEN_TIME, "%Y-%m-%d %H:%M:%S", &local_time);
  2703. //val_card[JSON_KEY_DOWN_TIME] = _time;
  2704. //val_card[JSON_KEY_WORK_TIME] = CFunctions::getworktimebysec((int)difftime(time(NULL), card->down_time));
  2705. //localtime_s(&local_time, &card->enter_area_time);
  2706. //strftime(_time, STR_LEN_TIME, "%Y-%m-%d %H:%M:%S", &local_time);
  2707. //val_card[JSON_KEY_ENTER_AREA_TIME] = _time;
  2708. //val_card[JSON_KEY_AREA_ID] = card->area_id;
  2709. //val_card[JSON_KEY_DEPT_ID] = card->dept_id;
  2710. //val_card[JSON_KEY_STATE] = card->state;
  2711. //localtime_s(&local_time, &card->rec_time);
  2712. //strftime(_time, 30, "%Y-%m-%d %H:%M:%S", &local_time);
  2713. //val_card[JSON_KEY_REC_TIME] = _time;
  2714. //val_card[JSON_KEY_CORDINATE_X] = card->x;
  2715. //val_card[JSON_KEY_CORDINATE_Y] = card->y;
  2716. //val_card[JSON_KEY_CORDINATE_Z] = 0; // card->z;
  2717. //val_cards.append(val_card);
  2718. //val_map[JSON_KEY_MAP_ID] = card->map_id;
  2719. //val_map[JSON_KEY_POS_CARD] = val_cards;
  2720. //val_maps.append(val_map);
  2721. //root[JSON_ROOT_KEY_CMD] = (DT_DOWN == card->pos_state)? JSON_CMD_VALUE_DOWN_MINE : JSON_CMD_VALUE_UP_MINE;
  2722. //root[JSON_ROOT_KEY_DATA] = val_maps;
  2723. //string ss = root.toStyledString();
  2724. //return root.toFastString();
  2725. }
  2726. std::string CYAServerDlg::get_json_position()
  2727. {
  2728. Json::Value root;
  2729. int cnt = 0;
  2730. MapInfoMap::iterator it_map = mp_map_list.begin();
  2731. for(; it_map != mp_map_list.end(); ++it_map){
  2732. CardMap::iterator it = mp_card_list_all.begin();
  2733. for(; it != mp_card_list_all.end(); ++it){
  2734. /*if(it->second->pos_state != DT_DOWN){
  2735. continue;
  2736. }*/
  2737. if(it->second->issent) {
  2738. continue;
  2739. }
  2740. if(it->second->map_id != it_map->second->map_id){
  2741. continue;
  2742. }
  2743. if(!it->second->isdealed){
  2744. continue;
  2745. }
  2746. if(_isnan(it->second->x) || _isnan(it->second->y) || _isnan(it->second->v)){
  2747. continue;
  2748. }
  2749. Json::Value pos_cards;
  2750. Json::Value pos_card;
  2751. it->second->isdealed = false;
  2752. it->second->issent = true;
  2753. //卡号
  2754. pos_card[JSON_KEY_CARD_ID] = it->second->card_id;
  2755. pos_cards.append(pos_card[JSON_KEY_CARD_ID]);
  2756. //x,y坐标
  2757. pos_card[JSON_KEY_CORDINATE_X] = CFunctions::round(it->second->x, 2);
  2758. pos_cards.append(pos_card[JSON_KEY_CORDINATE_X]);
  2759. pos_card[JSON_KEY_CORDINATE_Y] = CFunctions::round(it->second->y, 2);
  2760. pos_cards.append(pos_card[JSON_KEY_CORDINATE_Y]);
  2761. int ms = 1000; //转为ms
  2762. //入井时间戳
  2763. double t = *((int64_t*)&it->second->down_time)*ms;
  2764. pos_card[JSON_KEY_DOWN_TIME] = t;
  2765. pos_cards.append(pos_card[JSON_KEY_DOWN_TIME]);
  2766. //进入区域时间戳
  2767. t = *((int64_t*)&it->second->enter_area_time)*ms;
  2768. pos_card[JSON_KEY_ENTER_AREA_TIME] = t;
  2769. pos_cards.append(pos_card[JSON_KEY_ENTER_AREA_TIME]);
  2770. //最后接收时间戳
  2771. t = *((int64_t*)&it->second->rec_time)*ms;
  2772. pos_card[JSON_KEY_REC_TIME] = t;
  2773. pos_cards.append(pos_card[JSON_KEY_REC_TIME]);
  2774. //工作时长
  2775. t = (int)difftime(time(NULL), it->second->down_time)*ms;
  2776. pos_card[JSON_KEY_WORK_TIME] = t;
  2777. pos_cards.append(pos_card[JSON_KEY_WORK_TIME]);
  2778. //地图编号
  2779. pos_card[JSON_KEY_MAP_ID] = it->second->map_id;
  2780. pos_cards.append(pos_card[JSON_KEY_MAP_ID]);
  2781. //区域编号
  2782. pos_card[JSON_KEY_AREA_ID] = it->second->area_id;
  2783. pos_cards.append(pos_card[JSON_KEY_AREA_ID]);
  2784. //部门编号
  2785. pos_card[JSON_KEY_DEPT_ID] = it->second->dept_id;
  2786. pos_cards.append(pos_card[JSON_KEY_DEPT_ID]);
  2787. it->second->get_state_text();
  2788. //状态
  2789. pos_card[JSON_KEY_STATE] = it->second->state;
  2790. pos_cards.append(pos_card[JSON_KEY_STATE]);
  2791. //运行状态
  2792. pos_card[JSON_KEY_STATE_MOVING] = it->second->state_moving;
  2793. pos_cards.append(pos_card[JSON_KEY_STATE_MOVING]);
  2794. //业务状态
  2795. pos_card[JSON_KEY_STATE_BIZ] = it->second->state_biz;
  2796. pos_cards.append(pos_card[JSON_KEY_STATE_BIZ]);
  2797. //速度
  2798. pos_card[JSON_KEY_SPEED] = CFunctions::round(it->second->v,2);
  2799. pos_cards.append(pos_card[JSON_KEY_SPEED]);
  2800. if(!pos_cards.isNull()){
  2801. root[JSON_ROOT_KEY_DATA].append(pos_cards);
  2802. cnt++;
  2803. }
  2804. }
  2805. }
  2806. std::string ret = "";
  2807. if(cnt > 0){
  2808. root[JSON_ROOT_KEY_CMD] = JSON_CMD_VALUE_POS_MAP;
  2809. ret = root.toFastString().c_str();
  2810. }
  2811. return ret;
  2812. }
  2813. std::string CYAServerDlg::get_json_position_all()
  2814. {
  2815. Json::Value root;
  2816. int cnt = 0;
  2817. MapInfoMap::iterator it_map = mp_map_list.begin();
  2818. for(; it_map != mp_map_list.end(); ++it_map){
  2819. CardMap::iterator it = mp_card_list_all.begin();
  2820. for(; it != mp_card_list_all.end(); ++it){
  2821. if(it->second->map_id != it_map->second->map_id){
  2822. continue;
  2823. }
  2824. if(_isnan(it->second->x) || _isnan(it->second->y) || _isnan(it->second->v)){
  2825. continue;
  2826. }
  2827. it->second->issent = true;
  2828. Json::Value pos_cards;
  2829. Json::Value pos_card;
  2830. //卡号
  2831. pos_card[JSON_KEY_CARD_ID] = it->second->card_id;
  2832. pos_cards.append(pos_card[JSON_KEY_CARD_ID]);
  2833. //x,y坐标
  2834. pos_card[JSON_KEY_CORDINATE_X] = CFunctions::round(it->second->x, 2);
  2835. pos_cards.append(pos_card[JSON_KEY_CORDINATE_X]);
  2836. pos_card[JSON_KEY_CORDINATE_Y] = CFunctions::round(it->second->y, 2);
  2837. pos_cards.append(pos_card[JSON_KEY_CORDINATE_Y]);
  2838. int ms = 1000; //转为ms
  2839. //入井时间戳
  2840. double t = *((int64_t*)&it->second->down_time)*ms;
  2841. pos_card[JSON_KEY_DOWN_TIME] = t;
  2842. pos_cards.append(pos_card[JSON_KEY_DOWN_TIME]);
  2843. //进入区域时间戳
  2844. t = *((int64_t*)&it->second->enter_area_time)*ms;
  2845. pos_card[JSON_KEY_ENTER_AREA_TIME] = t;
  2846. pos_cards.append(pos_card[JSON_KEY_ENTER_AREA_TIME]);
  2847. //最后接收时间戳
  2848. t = *((int64_t*)&it->second->rec_time)*ms;
  2849. pos_card[JSON_KEY_REC_TIME] = t;
  2850. pos_cards.append(pos_card[JSON_KEY_REC_TIME]);
  2851. //工作时长
  2852. t = (int)difftime(time(NULL), it->second->down_time)*ms;
  2853. pos_card[JSON_KEY_WORK_TIME] = t;
  2854. pos_cards.append(pos_card[JSON_KEY_WORK_TIME]);
  2855. //地图编号
  2856. pos_card[JSON_KEY_MAP_ID] = it->second->map_id;
  2857. pos_cards.append(pos_card[JSON_KEY_MAP_ID]);
  2858. //区域编号
  2859. pos_card[JSON_KEY_AREA_ID] = it->second->area_id;
  2860. pos_cards.append(pos_card[JSON_KEY_AREA_ID]);
  2861. //部门编号
  2862. pos_card[JSON_KEY_DEPT_ID] = it->second->dept_id;
  2863. pos_cards.append(pos_card[JSON_KEY_DEPT_ID]);
  2864. it->second->get_state_text();
  2865. //状态
  2866. pos_card[JSON_KEY_STATE] = it->second->state;
  2867. pos_cards.append(pos_card[JSON_KEY_STATE]);
  2868. //运行状态
  2869. pos_card[JSON_KEY_STATE_MOVING] = it->second->state_moving;
  2870. pos_cards.append(pos_card[JSON_KEY_STATE_MOVING]);
  2871. //业务状态
  2872. pos_card[JSON_KEY_STATE_BIZ] = it->second->state_biz;
  2873. pos_cards.append(pos_card[JSON_KEY_STATE_BIZ]);
  2874. //速度
  2875. pos_card[JSON_KEY_SPEED] = CFunctions::round(it->second->v,2);
  2876. pos_cards.append(pos_card[JSON_KEY_SPEED]);
  2877. if(!pos_cards.isNull()){
  2878. root[JSON_ROOT_KEY_DATA].append(pos_cards);
  2879. cnt++;
  2880. }
  2881. }
  2882. }
  2883. std::string ret = "";
  2884. if(cnt > 0){
  2885. root[JSON_ROOT_KEY_CMD] = JSON_CMD_VALUE_POS_MAP;
  2886. ret = root.toFastString().c_str();
  2887. }
  2888. return ret;
  2889. }
  2890. std::string CYAServerDlg::get_json_login()
  2891. {
  2892. Json::Value root;
  2893. Json::Value data;
  2894. data[JSON_KEY_USERNAME] = JSON_VALUE_USERNAME;
  2895. data[JSON_KEY_PASSWORD] = JSON_VALUE_PASSWORD;
  2896. root[JSON_ROOT_KEY_CMD] = JSON_CMD_VALUE_LOGIN;
  2897. root[JSON_ROOT_KEY_DATA] = data;
  2898. return root.toFastString();
  2899. }
  2900. std::string CYAServerDlg::get_json_logout()
  2901. {
  2902. Json::Value root;
  2903. Json::Value data;
  2904. //data[JSON_KEY_USERNAME] = JSON_VALUE_USERNAME;
  2905. data["name"] = JSON_VALUE_USERNAME;
  2906. root[JSON_ROOT_KEY_CMD] = JSON_CMD_VALUE_LOGOUT;
  2907. //root[JSON_ROOT_KEY_DATA] = data;
  2908. root["user"] = data;
  2909. return root.toFastString();
  2910. }
  2911. void CYAServerDlg::send_json_data(string cmd, string data, bool is_login /* = false*/)
  2912. {
  2913. USES_CONVERSION;
  2914. CC2UTF8 conv = (char*)data.c_str();
  2915. string utf8_data = conv.c_str();
  2916. CString strlog;
  2917. if(is_login){
  2918. if(is_websocket_ok){
  2919. _io->socket()->emit(cmd, utf8_data);
  2920. is_websocket_login = true;
  2921. strlog.Format(_T("%s: %s"), _T(LOG_SEND_JSON_DATA), _T("登录数据"));
  2922. show_log(strlog);
  2923. }
  2924. }else if(is_websocket_login){
  2925. strlog.Format(_T("%s: %s"), _T(LOG_SEND_JSON_DATA), _T("常规数据"));
  2926. _io->socket()->emit(cmd, utf8_data);
  2927. if(m_log_send_package){
  2928. wchar_t* p_data = CFunctions::c2wc(data.c_str());
  2929. writeErrorLog(L"JSON_S", p_data/*CFunctions::c2wc(data.c_str())*/,false);
  2930. if(p_data){
  2931. free(p_data);
  2932. p_data = NULL;
  2933. }
  2934. }
  2935. }
  2936. //strlog.Format(_T("%s: %s"), _T(LOG_SEND_JSON_DATA), CFunctions::c2wc(cmd.c_str()));
  2937. //show_log(strlog);
  2938. }
  2939. // 处理分站状态
  2940. void CYAServerDlg::deal_readers()
  2941. {
  2942. ReaderMap::iterator it = mp_reader_list.begin();
  2943. for(; it != mp_reader_list.end(); ++ it){
  2944. int ndiff = (int)difftime(time(NULL), it->second->rec_time);
  2945. if(STATUS_DEVICE_ERROR == it->second->state){ // 异常
  2946. if(ndiff < READER_TIMEOUT){ // 恢复正常
  2947. store_data_reader(it->second, ALARM_READER_LOST_END);
  2948. it->second->state = STATUS_DEVICE_NORMAL;
  2949. }
  2950. }else{
  2951. if(ndiff >= READER_TIMEOUT){ //异常
  2952. it->second->state = STATUS_DEVICE_ERROR;
  2953. it->second->lost_time = time(NULL);
  2954. store_data_reader(it->second, ALARM_READER_LOST_START);
  2955. }
  2956. }
  2957. }
  2958. }
  2959. void CYAServerDlg::deal_areas()
  2960. {
  2961. // 区域人数,区域超员数,区域超时数
  2962. int count_person, count_vehicle, count_total, count_over_time_person, count_over_time_vehicle;
  2963. int over_time_vehicle, over_time_person, over_time;
  2964. //TRACE(_T("time memcpy 9\n"));
  2965. time_t current_time(time(NULL));
  2966. AreaMap::iterator it_Area = mp_area_list.begin();
  2967. bool is_true;
  2968. for(; it_Area != mp_area_list.end(); ++it_Area){
  2969. count_person = count_vehicle = count_total = count_over_time_vehicle = count_over_time_person = 0;
  2970. over_time_person = it_Area->second->over_time_person * 60; // 转为秒
  2971. over_time_vehicle = it_Area->second->over_time_vehicle * 60; // 转为秒
  2972. over_time = over_time_person;
  2973. // 遍历卡,计数
  2974. CardMap::iterator it_card_person = it_Area->second->area_card_list_person.begin();
  2975. for(; it_card_person != it_Area->second->area_card_list_person.end(); ++it_card_person){
  2976. // 计数
  2977. count_total++;
  2978. count_person++;
  2979. // 超时
  2980. is_true = difftime(current_time, it_card_person->second->enter_area_time) > over_time;
  2981. if(is_true){
  2982. if(!it_card_person->second->is_area_over_time){
  2983. it_card_person->second->is_area_over_time = true;
  2984. it_card_person->second->time_area_over_time = current_time;
  2985. store_data_card(it_card_person->second, ALARM_CARD_OVER_TIME_AREA_START);
  2986. deal_alarm_card(it_card_person->second, &mp_card_list_area_over_time_person, is_true, AF_CARD_AREA_OVER_TIME);
  2987. }
  2988. over_time_person++;
  2989. }else if(it_card_person->second->is_area_over_time){ // 理论上不会走这条分支,应该走cards_leave_area()
  2990. it_card_person->second->is_area_over_time = false;
  2991. deal_alarm_card(it_card_person->second, &mp_card_list_area_over_time_person, is_true, AF_CARD_AREA_OVER_TIME);
  2992. }
  2993. }
  2994. over_time = over_time_vehicle;
  2995. CardMap::iterator it_card_vehicle = it_Area->second->area_card_list_vehicle.begin();
  2996. for(;it_card_vehicle != it_Area->second->area_card_list_vehicle.end(); ++it_card_vehicle){
  2997. // 计数
  2998. count_total++;
  2999. // 区域超速,暂无此逻辑
  3000. count_vehicle++;
  3001. // 超时
  3002. if(difftime(current_time, it_card_vehicle->second->enter_area_time) > over_time){
  3003. if(!it_card_vehicle->second->is_area_over_time){
  3004. it_card_vehicle->second->is_area_over_time = true;
  3005. it_card_vehicle->second->time_area_over_time = current_time;
  3006. store_data_card(it_card_person->second, ALARM_CARD_OVER_TIME_AREA_START);
  3007. deal_alarm_card(it_card_vehicle->second, &mp_card_list_area_over_time_vehicle, is_true, AF_CARD_AREA_OVER_TIME);
  3008. }
  3009. over_time_vehicle++;
  3010. }else if(it_card_vehicle->second->is_area_over_time){ // 理论上不会走这条分支,应该走cards_leave_area()
  3011. it_card_vehicle->second->is_area_over_time = false;
  3012. deal_alarm_card(it_card_vehicle->second, &mp_card_list_area_over_time_vehicle, is_true, AF_CARD_AREA_OVER_TIME);
  3013. }
  3014. }
  3015. it_Area->second->count_person = count_person;
  3016. it_Area->second->count_vehicle = count_vehicle;
  3017. it_Area->second->count_area_over_time_person = count_over_time_person;
  3018. it_Area->second->count_area_over_time_vehicle = count_over_time_vehicle;
  3019. // 区域禁入 人员
  3020. //if(it_Area->second->over_count_person == 0){
  3021. if(it_Area->second->area_type_id == 3){
  3022. if(count_person > 0){
  3023. if(!it_Area->second->is_area_forbidden_person){
  3024. it_Area->second->is_area_forbidden_person = true;
  3025. it_Area->second->count_area_forbidden_person = count_person;
  3026. it_Area->second->time_forbidden_person = current_time;
  3027. store_data_area(it_Area->second, current_time, current_time, ALARM_AREA_FORBIDDEN_PERSON_START);
  3028. deal_alarm_area(it_Area->second, &mp_area_forbidden_person, true, AF_AREA_FORBIDDEN);
  3029. }
  3030. }else{
  3031. if(it_Area->second->is_area_forbidden_person){
  3032. it_Area->second->is_area_forbidden_person = false; // 结束报警
  3033. store_data_area(it_Area->second, current_time, it_Area->second->time_forbidden_person, ALARM_AREA_FORBIDDEN_PERSON_END);
  3034. deal_alarm_area(it_Area->second, &mp_area_forbidden_person, false, AF_AREA_FORBIDDEN);
  3035. }
  3036. }
  3037. } else {
  3038. if(count_person > it_Area->second->over_count_person ){ // 区域人员超员
  3039. if(!it_Area->second->is_area_over_count_person){
  3040. it_Area->second->is_area_over_count_person = true;
  3041. it_Area->second->count_area_over_count_person = count_person - it_Area->second->over_count_person;
  3042. it_Area->second->time_over_count_person = current_time;
  3043. store_data_area(it_Area->second, current_time, current_time, ALARM_AREA_OVER_COUNT_PERSON_START);
  3044. deal_alarm_area(it_Area->second, &mp_area_over_count_person, true, AF_AREA_OVER_COUNT);
  3045. }
  3046. }else{
  3047. if(it_Area->second->is_area_over_count_person){ // 结束超员
  3048. it_Area->second->is_area_over_count_person = false;
  3049. store_data_area(it_Area->second, current_time, it_Area->second->time_over_count_person, ALARM_AREA_OVER_COUNT_PERSON_END);
  3050. deal_alarm_area(it_Area->second, &mp_area_over_count_person, false, AF_AREA_OVER_COUNT);
  3051. }
  3052. }
  3053. // 区域人员超时
  3054. if(count_over_time_person > 0){
  3055. if(!it_Area->second->is_area_over_time_person){
  3056. it_Area->second->is_area_over_time_person = true;
  3057. it_Area->second->time_over_time_person = current_time;
  3058. deal_alarm_area(it_Area->second, &mp_area_over_time_person, true, AF_AREA_OVER_TIME);
  3059. }
  3060. }else{
  3061. if(it_Area->second->is_area_over_time_person){ // 结束
  3062. it_Area->second->is_area_over_time_person = false;
  3063. deal_alarm_area(it_Area->second, &mp_area_over_time_person, false, AF_AREA_OVER_TIME);
  3064. }
  3065. }
  3066. }
  3067. // 区域禁入 车辆
  3068. //if(it_Area->second->over_count_vehicle == 0){
  3069. if(it_Area->second->area_type_id == 3){
  3070. if(count_vehicle > 0){
  3071. if(!it_Area->second->is_area_forbidden_vehicle){
  3072. it_Area->second->is_area_forbidden_vehicle = true;
  3073. it_Area->second->count_area_forbidden_vehicle = count_vehicle;
  3074. it_Area->second->time_forbidden_vehicle = current_time;
  3075. store_data_area(it_Area->second, current_time, current_time, ALARM_AREA_FORBIDDEN_VEHICLE_START);
  3076. deal_alarm_area(it_Area->second, &mp_area_forbidden_vehicle, true, AF_AREA_FORBIDDEN);
  3077. }
  3078. }else{
  3079. if(it_Area->second->is_area_forbidden_vehicle){
  3080. it_Area->second->is_area_forbidden_vehicle = false; // 结束报警
  3081. store_data_area(it_Area->second, current_time, it_Area->second->time_forbidden_vehicle, ALARM_AREA_FORBIDDEN_VEHICLE_END);
  3082. deal_alarm_area(it_Area->second, &mp_area_forbidden_vehicle, false, AF_AREA_FORBIDDEN);
  3083. }
  3084. }
  3085. }else {
  3086. if(count_vehicle > it_Area->second->over_count_vehicle){ // 区域车辆超员
  3087. if(!it_Area->second->is_area_over_count_vehicle){
  3088. it_Area->second->is_area_over_count_vehicle = true;
  3089. it_Area->second->count_area_over_count_vehicle = count_vehicle - it_Area->second->over_count_vehicle;
  3090. it_Area->second->time_over_count_vehicle = current_time;
  3091. store_data_area(it_Area->second, current_time, current_time, ALARM_AREA_OVER_COUNT_VEHICLE_START);
  3092. deal_alarm_area(it_Area->second, &mp_area_over_count_vehicle, true, AF_AREA_OVER_COUNT);
  3093. }
  3094. }else{
  3095. it_Area->second->is_area_over_count_vehicle = false; // 结束
  3096. store_data_area(it_Area->second, current_time, it_Area->second->time_over_count_vehicle, ALARM_AREA_OVER_COUNT_VEHICLE_END);
  3097. deal_alarm_area(it_Area->second, &mp_area_over_count_vehicle, false, AF_AREA_OVER_COUNT);
  3098. }
  3099. // 区域车辆超时
  3100. if(count_over_time_vehicle > 0){
  3101. if(!it_Area->second->is_area_over_time_vehicle){
  3102. it_Area->second->is_area_over_time_vehicle = true;
  3103. it_Area->second->time_over_time_vehicle = current_time;
  3104. deal_alarm_area(it_Area->second, &mp_area_over_time_vehicle, true, AF_AREA_OVER_TIME);
  3105. }
  3106. }else{
  3107. if(it_Area->second->is_area_over_time_vehicle){ // 结束
  3108. it_Area->second->is_area_over_time_vehicle = false;
  3109. deal_alarm_area(it_Area->second, &mp_area_over_time_vehicle, false, AF_AREA_OVER_TIME);
  3110. // 写入数据库
  3111. }
  3112. }
  3113. }
  3114. }
  3115. }
  3116. void CYAServerDlg::card_enter_mine( Card* card )
  3117. {
  3118. if(!card->is_pos_state_changed(TEST_CONFIRM_COUNT)){ // 位置没有变化
  3119. if(DT_DOWN == card->pos_state){
  3120. if(CT_PERSON == card->card_type){
  3121. if(difftime(time(NULL), card->get_working_time()) > sls_setting.over_time_person){
  3122. store_data_card(card, ALARM_CARD_OVER_TIME_START);
  3123. deal_alarm_card(card, &mp_card_list_over_time_person, true, AF_CARD_OVER_TIME);
  3124. }
  3125. }else if(CT_VEHICLE == card->card_type){
  3126. if(difftime(time(NULL), card->get_working_time()) > sls_setting.over_time_vehicle){
  3127. store_data_card(card, ALARM_CARD_OVER_TIME_START);
  3128. deal_alarm_card(card, &mp_card_list_over_time_vehicle, true, AF_CARD_OVER_TIME);
  3129. }
  3130. if(card->get_speed() > sls_setting.over_speed){
  3131. store_data_card(card, ALARM_CARD_OVER_SPEED_START);
  3132. deal_alarm_card(card, &mp_card_list_over_speed_vehicle, true, AF_CARD_OVER_SPEED);
  3133. }
  3134. }
  3135. }
  3136. }else{
  3137. if(DT_UP == card->pos_state){ // 升井
  3138. card_up_mine(card);
  3139. // 升井,补全离开区域时间
  3140. store_data_card(card, HIS_AREA_LOCATION_LEAVE);
  3141. }else if(DT_DOWN == card->pos_state){ // 入井
  3142. card_down_mine(card);
  3143. }
  3144. send_json_data(JSON_CMD_VALUE_PUSH, get_json_down_and_up(card));
  3145. }
  3146. }
  3147. void CYAServerDlg::card_enter_park( Card* card )
  3148. {
  3149. if(card->is_pos_state_pack_changed(TEST_CONFIRM_COUNT)){ // 位置没有变化
  3150. if(AAT_ENTER == card->pos_state_park){ //
  3151. //card->up_time = card->deal_time;
  3152. card->up_time = CFunctions::systime_to_timet(card->deal_time);
  3153. store_data_card(card, RPT_ATTEND_UP);
  3154. }else if(AAT_LEAVE == card->pos_state_park){ // 入井
  3155. //card->down_time = card->deal_time;
  3156. card->down_time = CFunctions::systime_to_timet(card->deal_time);
  3157. store_data_card(card, RPT_ATTEND_DOWN);
  3158. }
  3159. }
  3160. }
  3161. void CYAServerDlg::card_enter_map( Card* card )
  3162. {
  3163. if(card->map_id == card->map_id_old) return ;
  3164. // 离开原地图,进入新地图
  3165. MapInfoMap::iterator it_map_old = mp_map_list.find(card->map_id_old);
  3166. if(it_map_old != mp_map_list.end()){
  3167. if(CT_PERSON == card->card_type){
  3168. CardMap::iterator it_card = it_map_old->second->map_card_list_person.find(card->card_id);
  3169. if(it_card != it_map_old->second->map_card_list_person.end()){
  3170. it_map_old->second->map_card_list_person.erase(it_card);
  3171. }
  3172. }else if(CT_VEHICLE == card->card_type){
  3173. CardMap::iterator it_card = it_map_old->second->map_card_list_vehicle.find(card->card_id);
  3174. if(it_card != it_map_old->second->map_card_list_vehicle.end()){
  3175. it_map_old->second->map_card_list_vehicle.erase(it_card);
  3176. }
  3177. }
  3178. }
  3179. card->map_id_old = card->map_id;
  3180. MapInfoMap::iterator it_map = mp_map_list.find(card->map_id);
  3181. if(it_map != mp_map_list.end()){
  3182. card->map_scale = it_map->second->map_scale;
  3183. if(CT_PERSON == card->card_type){
  3184. it_map->second->map_card_list_person.insert(make_pair(card->card_id, card));
  3185. }else if(CT_VEHICLE == card->card_type){
  3186. it_map->second->map_card_list_vehicle.insert(make_pair(card->card_id, card));
  3187. }
  3188. }
  3189. }
  3190. //卡card进入区域
  3191. void CYAServerDlg::card_enter_area( Card* card)
  3192. {
  3193. _point p1, p2;
  3194. double r, scale;
  3195. bool b_in_area = false;
  3196. p1.x = card->x, p1.y = card->y, p1.z = card->z;
  3197. //TRACE(_T("x: %f , y: %f ,z: %f \n"),p1.x,p1.y,p1.z);
  3198. AreaMap::iterator it_area_cur = mp_area_list.find(card->area_id);
  3199. if(it_area_cur != mp_area_list.end()){ // 在区域中
  3200. if(it_area_cur->second->is_in_polygon(p1)) { // 区域没有变化
  3201. return;
  3202. }
  3203. }
  3204. int old_area_id = card->area_id;
  3205. AreaMap::iterator it_area = mp_area_list.begin();
  3206. for(; it_area != mp_area_list.end(); ++it_area){
  3207. if(card->map_id == it_area->second->map_id){ // 必须在同一地图内
  3208. if(it_area->second->is_in_polygon(p1)){ // 在区域内
  3209. if(it_area->second->area_id == old_area_id){
  3210. return;
  3211. }
  3212. if(it_area_cur != mp_area_list.end()){ // 离开区域
  3213. store_data_card(card, HIS_AREA_LOCATION_LEAVE);
  3214. card_leave_area(card, it_area_cur->second);
  3215. }
  3216. card->area_id = it_area->second->area_id;
  3217. //card->enter_area_time = card->deal_time;
  3218. card->enter_area_time = CFunctions::systime_to_timet(card->deal_time);
  3219. card->pos_state = (0 == it_area->second->area_type_id) ? DT_UP :DT_DOWN;
  3220. card->pos_state_park = it_area->second->is_att;
  3221. if(CT_PERSON == card->card_type){
  3222. it_area->second->area_card_list_person.insert(make_pair(card->card_id, card));
  3223. //if(it_area->second->over_count_person == 0){
  3224. if(it_area->second->area_type_id == 3){
  3225. store_data_card(card, ALARM_CARD_AREA_FORBIDDEN_START);
  3226. deal_alarm_card(card, &mp_card_list_forbidden_person, true, AF_CARD_AREA_FORBIDDEN);
  3227. }
  3228. }else if(CT_VEHICLE == card->card_type){
  3229. it_area->second->area_card_list_vehicle.insert(make_pair(card->card_id, card));
  3230. //if(it_area->second->over_count_vehicle == 0){
  3231. if(it_area->second->area_type_id == 3){
  3232. store_data_card(card, ALARM_CARD_AREA_FORBIDDEN_START);
  3233. deal_alarm_card(card, &mp_card_list_forbidden_vehicle, true, AF_CARD_AREA_FORBIDDEN);
  3234. }
  3235. }
  3236. b_in_area = true;
  3237. break;
  3238. }
  3239. }
  3240. }
  3241. if(!b_in_area){
  3242. // 找不到区域,使用分站所属区域
  3243. //从区域列表中查找卡所属分站的区域ID
  3244. AreaMap::iterator it_area_reader = mp_area_list.find(card->p_reader->area_id);
  3245. if(it_area_reader == mp_area_list.end()){
  3246. return;
  3247. }
  3248. if(card->area_id == it_area_reader->second->area_id){
  3249. return;
  3250. }
  3251. if(it_area_cur != mp_area_list.end()){
  3252. store_data_card(card, HIS_AREA_LOCATION_LEAVE);
  3253. card_leave_area(card, it_area_cur->second);
  3254. }
  3255. card->area_id = it_area_reader->second->area_id;
  3256. //card->enter_area_time = card->deal_time;
  3257. card->enter_area_time = CFunctions::systime_to_timet(card->deal_time);
  3258. card->pos_state = (0 == it_area_reader->second->area_type_id) ? DT_UP :DT_DOWN;
  3259. card->pos_state_park = it_area_reader->second->is_att;
  3260. if(CT_PERSON == card->card_type){
  3261. it_area_reader->second->area_card_list_person.insert(make_pair(card->card_id, card));
  3262. //if(it_area_reader->second->over_count_person == 0){
  3263. if(it_area_reader->second->area_type_id == 3){
  3264. store_data_card(card, ALARM_CARD_AREA_FORBIDDEN_START);
  3265. deal_alarm_card(card, &mp_card_list_forbidden_person, true, AF_CARD_AREA_FORBIDDEN);
  3266. }
  3267. }else if(CT_VEHICLE == card->card_type){
  3268. it_area_reader->second->area_card_list_vehicle.insert(make_pair(card->card_id, card));
  3269. //if(it_area_reader->second->over_count_vehicle == 0){
  3270. if(it_area_reader->second->area_type_id == 3){
  3271. store_data_card(card, ALARM_CARD_AREA_FORBIDDEN_START);
  3272. deal_alarm_card(card, &mp_card_list_forbidden_vehicle, true, AF_CARD_AREA_FORBIDDEN);
  3273. }
  3274. }
  3275. }
  3276. // 保存区域信息
  3277. store_data_card(card, HIS_AREA_LOCATION_ENTER);
  3278. // 升入井判断
  3279. card_enter_mine(card);
  3280. if(CT_VEHICLE == card->card_type){
  3281. card_enter_park(card);
  3282. }
  3283. }
  3284. void CYAServerDlg::card_leave_area( Card* card, Area* area)
  3285. {
  3286. // 从列表中删除
  3287. CardMap *card_map, *alarm_card_map, *alarm_forbidden_map;
  3288. if(CT_PERSON == card->card_type){
  3289. card_map = &area->area_card_list_person;
  3290. alarm_card_map = &mp_card_list_area_over_time_person;
  3291. alarm_forbidden_map = &mp_card_list_forbidden_person;
  3292. }else if(CT_VEHICLE == card->card_type){
  3293. card_map = &area->area_card_list_vehicle;
  3294. alarm_card_map = &mp_card_list_area_over_time_vehicle;
  3295. alarm_forbidden_map = &mp_card_list_forbidden_vehicle;
  3296. }
  3297. CardMap::iterator it_card = card_map->find(card->card_id);
  3298. if(it_card != card_map->end()){
  3299. // 如果区域超时
  3300. if(it_card->second->is_area_over_time){
  3301. it_card->second->is_area_over_time = false;
  3302. store_data_card(card, ALARM_CARD_OVER_TIME_AREA_END);
  3303. deal_alarm_card(card, alarm_card_map, false, AF_CARD_AREA_OVER_TIME);
  3304. }
  3305. store_data_card(card, ALARM_CARD_AREA_FORBIDDEN_END);
  3306. deal_alarm_card(card, alarm_forbidden_map, false, AF_CARD_AREA_FORBIDDEN);
  3307. // 先处理,后删除
  3308. card_map->erase(it_card);
  3309. }
  3310. }
  3311. void CYAServerDlg::reset_map_card()
  3312. {
  3313. MapInfoMap::iterator it_map = mp_map_list.begin();
  3314. for(; it_map != mp_map_list.end(); ++ it_map){
  3315. //用map.erase(map.begin(),map.end())比较好 清空元素
  3316. it_map->second->map_card_list_person.erase(it_map->second->map_card_list_person.begin(), it_map->second->map_card_list_person.end());
  3317. it_map->second->map_card_list_vehicle.erase(it_map->second->map_card_list_vehicle.begin(), it_map->second->map_card_list_vehicle.end());
  3318. //it_map->second->map_card_list.clear(); // 删除map
  3319. }
  3320. }
  3321. bool CYAServerDlg::is_in_rectangle( _point p, double dblleft, double dbltop, double dblright, double dblbottom )
  3322. {
  3323. return (p.x >= dblleft && p.x <= dblright && p.y >= dbltop && p.y <= dblbottom);
  3324. }
  3325. bool CYAServerDlg::is_in_circle( _point p1, _point p2, double r, double scale )
  3326. {
  3327. return sqrt((p2.x - p1.x) * (p2.x - p1.x) + (p2.y - p1.y) * (p2.y - p1.y)) <= r * scale;
  3328. }
  3329. void CYAServerDlg::package_data()
  3330. {
  3331. string strJson = get_json_position();
  3332. // 定位数据
  3333. if(strJson == "") return ;
  3334. send_json_data(JSON_CMD_VALUE_PUSH, strJson);
  3335. g_last_send_time = ::GetTickCount();
  3336. }
  3337. void CYAServerDlg::package_data_test()
  3338. {
  3339. Json::Value root;
  3340. Json::Value valStaffer;
  3341. Json::Value valStaffers;
  3342. Json::Value valDistance;
  3343. Json::Value valDist;
  3344. Json::Value valReaders;
  3345. Json::Value valReader;
  3346. int nCnt = 0;
  3347. std::string strJson;
  3348. for(int i = 1; i < 4; i++){
  3349. valStaffer["id"] = i;
  3350. valStaffer["x"] = 50 * (m_nCountClick + i);
  3351. valStaffer["y"] = 50 * sin(20.0) * (m_nCountClick + i);
  3352. valStaffers.append(valStaffer);
  3353. nCnt++;
  3354. }
  3355. root["staffer"] = valStaffers;
  3356. //map<DWORD, READERINFO*>::iterator itReader = m_mpReaderInfo.begin();
  3357. //for(; itReader != m_mpReaderInfo.end(); ++itReader)
  3358. //{
  3359. // valReader["id"] = (unsigned int)itReader->second->readerid;
  3360. // valReader["x"] = itReader->second->X;
  3361. // valReader["y"] = itReader->second->Y;
  3362. // valReaders.append(valReader);
  3363. //}
  3364. root["reader"] = valReaders;
  3365. if(nCnt == 0){
  3366. return;
  3367. }
  3368. strJson = root.toFastString();
  3369. send_json_data(JSON_CMD_VALUE_PUSH, strJson.c_str());
  3370. }
  3371. void CYAServerDlg::formatByteArray( CString &strBuf, BYTE * buf, int nLen )
  3372. {
  3373. CString strBuf1 = _T("");
  3374. for(int i = 0; i < nLen; i++){
  3375. strBuf1.Format(_T("%.2X "),buf[i]);
  3376. strBuf += strBuf1;
  3377. if((i + 1) % 16 == 0){
  3378. strBuf += _T("\n");
  3379. }
  3380. }
  3381. }
  3382. void CYAServerDlg::writeErrorLog( const CString strFile, const CString strErr, bool bTime /*= true*/ )
  3383. {
  3384. LogInfo* err = new LogInfo;
  3385. err->handle = NULL;
  3386. err->useTime = false;
  3387. err->path = NULL;
  3388. err->strLog = NULL;
  3389. err->handle = this;
  3390. err->useTime = bTime;
  3391. err->path = CFunctions::CString2char(strFile);
  3392. err->strLog = CFunctions::CString2char(strErr);
  3393. QueueUserWorkItem(_write_error_log, (LPVOID)err, WT_EXECUTEDEFAULT);
  3394. }
  3395. BOOL CYAServerDlg::openLogFile(CString strFile)
  3396. {
  3397. TCHAR lpstrCurDir[MAX_PATH] = _T("");
  3398. CString ctemp;
  3399. GetModuleFileName(NULL,lpstrCurDir,MAX_PATH);
  3400. ctemp = lpstrCurDir;
  3401. int index = ctemp.ReverseFind('\\');
  3402. CString strFilePath = ctemp.Left(index+1);
  3403. CString strFileName;
  3404. strFileName.Format(_T("%s_%s.log"), strFile, COleDateTime::GetCurrentTime().Format(_T("%Y%m%d")));
  3405. strFilePath += _T("error\\");
  3406. strFilePath += strFileName;
  3407. if (cfErrorLog == NULL){
  3408. return FALSE;
  3409. }
  3410. BOOL bOpenFile=FALSE;//是否需要重新打开文件
  3411. if(cfErrorLog.m_pStream==NULL){
  3412. bOpenFile=TRUE;
  3413. }else{
  3414. if(cfErrorLog.GetFilePath()!=strFilePath){
  3415. bOpenFile=TRUE;
  3416. cfErrorLog.Close();
  3417. }
  3418. }
  3419. if(bOpenFile){
  3420. return cfErrorLog.Open(strFilePath, CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite|CFile::shareDenyNone);
  3421. }else{
  3422. return TRUE;
  3423. }
  3424. }
  3425. BOOL CYAServerDlg::openLogFile(const char* strFile)
  3426. {
  3427. TCHAR lpstrCurDir[MAX_PATH] = _T("");
  3428. CString ctemp;
  3429. GetModuleFileName(NULL,lpstrCurDir,MAX_PATH);
  3430. ctemp = lpstrCurDir;
  3431. int index = ctemp.ReverseFind('\\');
  3432. CString strFilePath = ctemp.Left(index+1);
  3433. CString strFileName;
  3434. //CString strTemp;
  3435. //strTemp.Format(_T("%S"),strFile);
  3436. strFileName.Format(_T("%S_%s.log"), strFile, COleDateTime::GetCurrentTime().Format(_T("%Y%m%d")));
  3437. strFilePath += _T("error\\");
  3438. strFilePath += strFileName;
  3439. if (cfErrorLog == NULL){
  3440. return FALSE;
  3441. }
  3442. BOOL bOpenFile=FALSE;//是否需要重新打开文件
  3443. if(cfErrorLog.m_pStream==NULL){
  3444. bOpenFile=TRUE;
  3445. }else{
  3446. if(cfErrorLog.GetFilePath()!=strFilePath){
  3447. bOpenFile=TRUE;
  3448. cfErrorLog.Close();
  3449. }
  3450. }
  3451. if(bOpenFile){
  3452. return cfErrorLog.Open(strFilePath, CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite|CFile::shareDenyNone);
  3453. }else{
  3454. return TRUE;
  3455. }
  3456. }
  3457. void CYAServerDlg::OnBnExit()
  3458. {
  3459. stop_tcp_server();
  3460. ws_logout();
  3461. is_websocket_login = false;
  3462. clear_all_list();
  3463. GetConnPool().CloseAllConn();
  3464. CDialogEx::OnCancel();
  3465. }
  3466. void CYAServerDlg::OnBnSyncTime()
  3467. {
  3468. send_sync_reader();
  3469. }
  3470. CYAServerDlg::~CYAServerDlg()
  3471. {
  3472. release_memory();
  3473. ws_close();
  3474. }
  3475. void CYAServerDlg::OnConnected()
  3476. {
  3477. is_websocket_ok = true;
  3478. //Sleep(50); // need delay
  3479. time_ws_connect = ::GetTickCount();
  3480. }
  3481. void CYAServerDlg::OnClosed( client::close_reason const& reason )
  3482. {
  3483. int i = -1;
  3484. if(reason == client::close_reason_drop){
  3485. i = (int) reason;
  3486. }else{
  3487. i = (int) reason;
  3488. }
  3489. }
  3490. void CYAServerDlg::OnFailed()
  3491. {
  3492. is_websocket_login = false;
  3493. is_websocket_ok = false;
  3494. _io->close();
  3495. }
  3496. void CYAServerDlg::ws_open()
  3497. {
  3498. //m_ws_url="ws://localhost:8086/";
  3499. _io->connect(m_ws_url);
  3500. CString strlog = _T("");
  3501. //strlog.Format(_T("%s: %s"), _T(LOG_CONNECT_WEB_SERVER), CFunctions::c2wc(m_ws_url.c_str()));
  3502. wchar_t* p = CFunctions::c2wc(m_ws_url.c_str());
  3503. strlog.Format(_T("%s: %s"), _T(LOG_CONNECT_WEB_SERVER), p);
  3504. if(p){
  3505. free(p);
  3506. p = NULL;
  3507. }
  3508. show_log(strlog);
  3509. }
  3510. void CYAServerDlg::OnPushMessage()
  3511. {
  3512. string aa = "";
  3513. }
  3514. void CYAServerDlg::store_data_card( Card* card, int tag )
  3515. {
  3516. char sql[LENGTH_SQL] = {0};
  3517. char _time[STR_LEN_TIME], _time_ex[STR_LEN_TIME];
  3518. struct tm local_time, local_time_ex;
  3519. //localtime_s(&local_time, &card->deal_time);
  3520. //strftime(_time, 30, "%Y-%m-%d %H:%M:%S", &local_time);
  3521. bool b_exec = false;
  3522. sprintf_s(_time,
  3523. STR_LEN_TIME,
  3524. "%u-%u-%u %u:%u:%u.%u",
  3525. card->deal_time.wYear,card->deal_time.wMonth,card->deal_time.wDay,
  3526. card->deal_time.wHour + 8,card->deal_time.wMinute,card->deal_time.wSecond,card->deal_time.wMilliseconds);
  3527. switch(tag){
  3528. case TEST_LOCATE_COMPARE:
  3529. {
  3530. b_exec = true;
  3531. sprintf_s(sql, LENGTH_SQL,
  3532. "INSERT INTO test_locate_compare(x, y, xx, yy, x1, x2, x3, x4, y1, y2, y3, y4, rec_time)\
  3533. VALUES(%.5f, %.5f, %.5f, %.5f, %.5f, %.5f, %.5f, %.5f, %.5f, %.5f, %.5f, %.5f, '%s');",
  3534. card->x, card->y, card->xx, card->yy, card->x1, card->x2, card->x3, card->x4,
  3535. card->y1, card->y2, card->y3, card->y4, _time);
  3536. break;
  3537. }
  3538. case TEST_LOCATE_DATA:
  3539. {
  3540. b_exec = true;
  3541. sprintf_s(sql, LENGTH_SQL,
  3542. "INSERT INTO test_locatedata(card_id, reader_id, antenna_id, \
  3543. reader_stamp, card_stamp, locatetime, distance, stamp_type, power_state,\
  3544. accelerate, rec_time, card_x, card_y) \
  3545. VALUES(%s, %d, %d, %d, %d, %lld, %f, %d, %d, %d, '%s', %.4f, %.4f);",
  3546. card->card_id.c_str(), card->reader_id, card->antenna_id, card->p_reader->tick_count, card->time_stamp,
  3547. card->flying_time, card->distance, card->ranging_type, card->power_state, card->accelerate_state,
  3548. _time, card->x, card->y);
  3549. break;
  3550. }
  3551. case HIS_LOCATION:
  3552. {
  3553. if(card->map_id != 0 && card->area_id != 0){
  3554. b_exec = true;
  3555. sprintf_s(sql, LENGTH_SQL,
  3556. "INSERT INTO his_location(card_id, cur_time, x, y, z, map_id, area_id, state) VALUES(%s, '%s', %.3f, %.3f, %.3f, %d, %d, %d);",
  3557. card->card_id.c_str(), _time, card->x, card->y, card->z, card->map_id, card->area_id, card->state);
  3558. }
  3559. break;
  3560. }
  3561. case HIS_RAW_DATA:
  3562. {
  3563. b_exec = true;
  3564. sprintf_s(sql, LENGTH_SQL,
  3565. "INSERT INTO his_raw_data(card_id, reader_id, antenna_id, reader_stamp, card_stamp, \
  3566. fly_time, distance, ranging_type, power_state, accelerate, his_time, rec_time ) \
  3567. VALUES(%s, %d, %d, %d, %d, %lld, %4.f, %d, %d, %d, '%s', '%s');",
  3568. card->card_id.c_str(), card->reader_id, card->antenna_id, card->reader_tickcount, card->time_stamp,
  3569. card->flying_time, card->distance, card->ranging_type, card->power_state, card->accelerate_state,
  3570. card->str_his_time.c_str(), card->str_rec_time.c_str());
  3571. break;
  3572. }
  3573. case HIS_AREA_LOCATION_ENTER:
  3574. {
  3575. if(card->map_id != 0 && card->area_id != 0){
  3576. b_exec = true;
  3577. sprintf_s(sql, LENGTH_SQL,
  3578. "INSERT INTO his_location_area(card_id, area_id, map_id, enter_time) VALUES(%s, %d, %d, '%s');",
  3579. card->card_id.c_str() , card->area_id, card->map_id, _time);
  3580. }
  3581. break;
  3582. }
  3583. case HIS_AREA_LOCATION_LEAVE:
  3584. {
  3585. if(card->map_id != 0 && card->area_id != 0){
  3586. b_exec = true;
  3587. localtime_s(&local_time_ex, &card->enter_area_time);
  3588. strftime(_time_ex, 30, "%Y-%m-%d %H:%M:%S", &local_time_ex);
  3589. sprintf_s(sql, LENGTH_SQL,
  3590. "UPDATE his_location_area SET leave_time = '%s' WHERE card_id = %s AND area_id=%d AND enter_time = '%s';",
  3591. _time, card->card_id.c_str(), card->area_id, _time_ex);
  3592. }
  3593. break;
  3594. }
  3595. case RPT_ATTEND_DOWN:
  3596. {
  3597. if(card->map_id != 0 && card->area_id != 0){
  3598. b_exec = true;
  3599. //sprintf_s(sql, LENGTH_SQL,
  3600. // "INSERT INTO rpt_attendance(card_id, start_time, att_date) VALUES(%s, '%s', '%s');",
  3601. // card->card_id.c_str(), _time, _time);
  3602. sprintf_s(sql, LENGTH_SQL,
  3603. "CALL add_att(%s, '%s', '%s');", card->card_id.c_str(), _time, _time);
  3604. }
  3605. break;
  3606. }
  3607. case RPT_ATTEND_UP:
  3608. {
  3609. if(card->map_id != 0 && card->area_id != 0){
  3610. TRACE(_T(" 6 "));
  3611. b_exec = true;
  3612. localtime_s(&local_time_ex, &card->down_time);
  3613. strftime(_time_ex, 30, "%Y-%m-%d %H:%M:%S", &local_time_ex);
  3614. //sprintf_s(sql, LENGTH_SQL,
  3615. // "UPDATE rpt_attendance SET end_time = '%s' WHERE card_id = %s AND start_time = '%s';",
  3616. // _time, card->card_id.c_str(), _time_ex);
  3617. sprintf_s(sql, LENGTH_SQL,
  3618. "CALL add_att(%s, '%s', '%s');", card->card_id.c_str(), _time, _time_ex);
  3619. }
  3620. break;
  3621. }
  3622. case ALARM_CARD_LOW_POWER_START:
  3623. {
  3624. b_exec = true;
  3625. int alarm_type_id = ATID_POWER;
  3626. sprintf_s(sql, LENGTH_SQL,
  3627. "INSERT INTO his_alarm_card(card_id, alarm_type_id, card_type_id, start_time) \
  3628. VALUES(%s, %d, %d, '%s');",
  3629. card->card_id.c_str(), alarm_type_id, card->card_type, _time);
  3630. break;
  3631. }
  3632. case ALARM_CARD_LOW_POWER_END:
  3633. {
  3634. b_exec = true;
  3635. localtime_s(&local_time_ex, &card->low_power_time);
  3636. strftime(_time_ex, 30, "%Y-%m-%d %H:%M:%S", &local_time_ex);
  3637. int alarm_type_id = ATID_POWER;
  3638. sprintf_s(sql, LENGTH_SQL,
  3639. "UPDATE his_alarm_card SET end_time = '%s' WHERE card_id=%s AND alarm_type_id=%d AND start_time = '%s';",
  3640. _time, card->card_id.c_str(), alarm_type_id, _time_ex);
  3641. break;
  3642. }
  3643. //case ALARM_CARD_OVER_TIME_AREA_START:
  3644. // {
  3645. // int alarm_type_id = ATID_AREA_OVER_TIME_PERSON;
  3646. // if(CT_VEHICLE == card->card_type){
  3647. // alarm_type_id = ATID_AREA_OVER_TIME_VEHICLE;
  3648. // }
  3649. // sprintf_s(sql, LENGTH_SQL,
  3650. // "INSERT INTO his_alarm_card(card_id, alarm_type_id, card_type_id, start_time) \
  3651. // VALUES(%s, %d, %d, '%s')",
  3652. // card->card_id.c_str(), alarm_type_id, card->card_type, _time);
  3653. // break;
  3654. // }
  3655. //case ALARM_CARD_OVER_TIME_AREA_END:
  3656. // {
  3657. // localtime_s(&local_time_ex, &card->time_area_over_time);
  3658. // strftime(_time_ex, 30, "%Y-%m-%d %H:%M:%S", &local_time_ex);
  3659. // int alarm_type_id = ATID_AREA_OVER_TIME_PERSON;
  3660. // if(CT_VEHICLE == card->card_type){
  3661. // alarm_type_id = ATID_AREA_OVER_TIME_VEHICLE;
  3662. // }
  3663. // sprintf_s(sql, LENGTH_SQL,
  3664. // "UPDATE his_alarm_card SET end_time = '%s' \
  3665. // WHERE card_id=%s AND alarm_type_id=%d AND start_time = '%s';",
  3666. // _time, card->card_id.c_str(), alarm_type_id, _time_ex);
  3667. // break;
  3668. // }
  3669. //case ALARM_CARD_OVER_TIME_START:
  3670. // {
  3671. // int alarm_type_id = ATID_OVER_TIME_PERSON;
  3672. // if(CT_VEHICLE == card->card_type){
  3673. // alarm_type_id = ATID_OVER_TIME_VEHICLE;
  3674. // }
  3675. // sprintf_s(sql, LENGTH_SQL,
  3676. // "INSERT INTO his_alarm_card(card_id, alarm_type_id, card_type_id, start_time) \
  3677. // VALUES(%s, %d, %d, '%s')",
  3678. // card->card_id.c_str(), alarm_type_id, card->card_type, _time);
  3679. // break;
  3680. // }
  3681. //case ALARM_CARD_OVER_TIME_END:
  3682. // {
  3683. // localtime_s(&local_time_ex, &card->time_over_time);
  3684. // strftime(_time_ex, 30, "%Y-%m-%d %H:%M:%S", &local_time_ex);
  3685. // int alarm_type_id = ATID_OVER_TIME_PERSON;
  3686. // if(CT_VEHICLE == card->card_type){
  3687. // alarm_type_id = ATID_OVER_TIME_VEHICLE;
  3688. // }
  3689. // sprintf_s(sql, LENGTH_SQL,
  3690. // "UPDATE his_alarm_card SET end_time = '%s' \
  3691. // WHERE card_id=%s AND alarm_type_id=%d AND start_time = '%s';",
  3692. // _time, card->card_id.c_str(), alarm_type_id, _time_ex);
  3693. // break;
  3694. // }
  3695. default:
  3696. return;
  3697. }
  3698. try
  3699. {
  3700. if(b_exec){
  3701. execute_sql(sql);
  3702. }
  3703. }
  3704. catch (...)
  3705. {
  3706. CString str = _T("");
  3707. //str.Format(_T("%s\n"), CFunctions::c2wc(sql));
  3708. wchar_t* p = CFunctions::c2wc(sql);
  3709. str.Format(_T("%s\n"), p);
  3710. writeErrorLog(_T("SQL_S"), str);
  3711. //str = _T("");
  3712. str.Empty();
  3713. if(p){
  3714. free(p);
  3715. p = NULL;
  3716. }
  3717. }
  3718. }
  3719. std::string CYAServerDlg::get_json_counting()
  3720. {
  3721. Json::Value root;
  3722. Json::Value data;
  3723. Json::Value mapcounts;
  3724. int total_count = 0,total_count_vehicle = 0,total_count_person = 0;
  3725. int map_count_total, map_count_vehicle, map_count_person;
  3726. int area_count_total, area_count_vehicle, area_count_person;
  3727. MapInfoMap::iterator it_map = mp_map_list.begin();
  3728. for(; it_map != mp_map_list.end(); ++it_map){
  3729. Json::Value mapcount;
  3730. Json::Value areacounts;
  3731. // area
  3732. map_count_total = map_count_vehicle = map_count_person = 0;
  3733. AreaMap::iterator it_area = it_map->second->map_area_list.begin();
  3734. for(; it_area != it_map->second->map_area_list.end(); ++it_area){
  3735. area_count_total = area_count_vehicle = area_count_person = 0;
  3736. Json::Value areacount;
  3737. // person
  3738. CardMap::iterator it_card = it_area->second->area_card_list_person.begin();
  3739. for(; it_card != it_area->second->area_card_list_person.end(); ++ it_card){
  3740. if(DT_DOWN == it_card->second->pos_state){
  3741. area_count_person++;
  3742. area_count_total++;
  3743. } else {
  3744. continue;
  3745. }
  3746. }
  3747. // vehicle
  3748. it_card = it_area->second->area_card_list_vehicle.begin();
  3749. for(; it_card != it_area->second->area_card_list_vehicle.end(); ++ it_card){
  3750. if(DT_DOWN == it_card->second->pos_state){
  3751. area_count_vehicle++;
  3752. area_count_total++;
  3753. } else {
  3754. continue;
  3755. }
  3756. }
  3757. //if(area_count_total > 0){
  3758. areacount[JSON_KEY_COUNTING_AREA_COUNT_PERSON] = area_count_person;
  3759. areacount[JSON_KEY_COUNTING_AREA_COUNT_VEHICLE] = area_count_vehicle;
  3760. areacount[JSON_KEY_COUNTING_AREA_COUNT] = area_count_total;
  3761. areacount[JSON_KEY_COUNTING_AREA_ID] = it_area->second->area_id;
  3762. map_count_total += area_count_total;
  3763. map_count_person += area_count_person;
  3764. map_count_vehicle += area_count_vehicle;
  3765. areacounts.append(areacount);
  3766. //}
  3767. }
  3768. //if(map_count_total > 0){
  3769. mapcount[JSON_KEY_COUNTING_MAP_ID] = it_map->second->map_id;
  3770. mapcount[JSON_KEY_COUNTING_MAP_COUNT_PERSON] = map_count_person;
  3771. mapcount[JSON_KEY_COUNTING_MAP_COUNT_VEHICLE] = map_count_vehicle;
  3772. mapcount[JSON_KEY_COUNTING_MAP_COUNT_TOTAL] = map_count_total;
  3773. mapcount[JSON_KEY_COUNTING_AREA_COUNT] = areacounts;
  3774. total_count += map_count_total;
  3775. total_count_person += map_count_person;
  3776. total_count_vehicle += map_count_vehicle;
  3777. mapcounts.append(mapcount);
  3778. //}
  3779. }
  3780. // dept
  3781. Json::Value deptcounts;
  3782. Json::Value deptcount;
  3783. int dept_person_count, dept_vehicle_count, total_dept_count = 0;
  3784. DeptMap::iterator it_dept = mp_dept_list.begin();
  3785. for(; it_dept != mp_dept_list.end(); ++it_dept){
  3786. deptcount[JSON_KEY_COUNTING_DEPT_ID] = it_dept->second->dept_id;
  3787. //deptcount[JSON_KEY_COUNTING_DEPT_NAME] = it_dept->second->dept_name;
  3788. dept_person_count = it_dept->second->dept_card_list_person.size();
  3789. dept_vehicle_count = it_dept->second->dept_card_list_vehicle.size();
  3790. deptcount[JSON_KEY_COUNTING_DEPT_COUNT_TOTAL] = dept_person_count + dept_vehicle_count;
  3791. deptcount[JSON_KEY_COUNTING_DEPT_COUNT_PERSON] = dept_person_count;
  3792. deptcount[JSON_KEY_COUNTING_DEPT_COUNT_VEHICLE] = dept_vehicle_count;
  3793. //if(dept_vehicle_count + dept_person_count > 0){
  3794. // total_dept_count += dept_vehicle_count + dept_person_count;
  3795. deptcounts.append(deptcount);
  3796. //}
  3797. }
  3798. //if(total_dept_count>0){
  3799. data[JSON_KEY_COUNTING_DEPT_COUNT] = deptcounts;
  3800. //}
  3801. data[JSON_KEY_COUNTING_MAP_COUNT] = mapcounts;
  3802. data[JSON_KEY_COUNTING_COUNT_TOTAL] = total_count;
  3803. data[JSON_KEY_COUNTING_COUNT_VEHICLE] = total_count_vehicle;
  3804. data[JSON_KEY_COUNTING_COUNT_PERSON] = total_count_person;
  3805. root[JSON_ROOT_KEY_DATA] = data;
  3806. root[JSON_ROOT_KEY_CMD] = JSON_CMD_VALUE_COUNTING;
  3807. //string ss = root.toStyledString();
  3808. return root.toFastString();
  3809. }
  3810. void CYAServerDlg::OnTimer( UINT nIDEvent )
  3811. {
  3812. // 需要优化,如果数据没有变化,则不重复发送数据,数据变化后再发送
  3813. switch ( nIDEvent)
  3814. {
  3815. case TMR_SEND_COUNTING:
  3816. {
  3817. send_json_data(JSON_CMD_VALUE_PUSH, get_json_counting());
  3818. break;
  3819. }
  3820. case TMR_SEND_ALARM:
  3821. {
  3822. send_json_data(JSON_CMD_VALUE_PUSH, get_json_alarm());
  3823. break;
  3824. }
  3825. case TMR_SEND_DEVICE_STATE:
  3826. {
  3827. deal_readers();
  3828. send_json_data(JSON_CMD_VALUE_PUSH, get_json_device_state());
  3829. break;
  3830. }
  3831. case TMR_SEND_POSTION:
  3832. {
  3833. package_data();
  3834. break;
  3835. }
  3836. case TMR_SYNC_READER_TIME:
  3837. {
  3838. send_sync_reader();
  3839. break;
  3840. }
  3841. case TMR_CLEAR_CALL_TIMER:
  3842. {
  3843. clear_call_info();
  3844. break;
  3845. }
  3846. case TMR_SEND_CALL:
  3847. {
  3848. send_call_info();
  3849. break;
  3850. }
  3851. default:
  3852. break;
  3853. }
  3854. }
  3855. /*
  3856. * 从配置文件中载入数据库配置
  3857. *
  3858. * param
  3859. * 无
  3860. *
  3861. * return
  3862. * 无
  3863. */
  3864. void CYAServerDlg::load_param_from_ini()
  3865. {
  3866. IniFile ini;
  3867. string strvalue;
  3868. int nTemp = 0;
  3869. //show_log(_T(LOG_LOAD_CONFIG), FALSE);
  3870. //输出操作日志到日志文件
  3871. show_log(_T(LOG_LOAD_CONFIG));
  3872. if(ini.open(FILEPATH_SERVER_CONFIG)){
  3873. strvalue = ini.read(CONF_SECT_SERVER_SETTING, CONF_SERVER_WS_URL);
  3874. m_ws_url = strvalue;
  3875. int nBackup = atoi(theApp.dbbackup.c_str());
  3876. switch(nBackup){
  3877. case 0:
  3878. m_db_setting.host = ini.read(CONF_SECT_DB, CONF_DB_KEY_HOST);
  3879. m_db_setting.user = ini.read(CONF_SECT_DB, CONF_DB_KEY_USER);
  3880. m_db_setting.password = ini.read(CONF_SECT_DB, CONF_DB_KEY_PWD);
  3881. m_db_setting.dbname = ini.read(CONF_SECT_DB, CONF_DB_KEY_DBNAME);
  3882. m_db_setting.encoding = ini.read(CONF_SECT_DB, CONF_DB_KEY_ENCODING);
  3883. m_db_setting.port = atoi(ini.read(CONF_SECT_DB, CONF_DB_KEY_PORT).c_str());
  3884. break;
  3885. case 1:
  3886. m_db_setting.host = ini.read(CONF_SECT_DB_BK, CONF_DB_KEY_HOST);
  3887. m_db_setting.user = ini.read(CONF_SECT_DB_BK, CONF_DB_KEY_USER);
  3888. m_db_setting.password = ini.read(CONF_SECT_DB_BK, CONF_DB_KEY_PWD);
  3889. m_db_setting.dbname = ini.read(CONF_SECT_DB_BK, CONF_DB_KEY_DBNAME);
  3890. m_db_setting.encoding = ini.read(CONF_SECT_DB_BK, CONF_DB_KEY_ENCODING);
  3891. m_db_setting.port = atoi(ini.read(CONF_SECT_DB_BK, CONF_DB_KEY_PORT).c_str());
  3892. break;
  3893. }
  3894. /*m_db_setting.host = ini.read(CONF_SECT_DB, CONF_DB_KEY_HOST);
  3895. m_db_setting.user = ini.read(CONF_SECT_DB, CONF_DB_KEY_USER);
  3896. m_db_setting.password = ini.read(CONF_SECT_DB, CONF_DB_KEY_PWD);
  3897. m_db_setting.dbname = ini.read(CONF_SECT_DB, CONF_DB_KEY_DBNAME);
  3898. m_db_setting.encoding = ini.read(CONF_SECT_DB, CONF_DB_KEY_ENCODING);
  3899. m_db_setting.port = atoi(ini.read(CONF_SECT_DB, CONF_DB_KEY_PORT).c_str());*/
  3900. //show_log(_T(LOG_LOAD_CONFIG_SUCCESS), FALSE);
  3901. show_log(_T(LOG_LOAD_CONFIG_SUCCESS));
  3902. }else{
  3903. //show_log(_T(LOG_LOAD_CONFIG_FAIL));
  3904. show_log(_T(LOG_LOAD_CONFIG_FAIL));
  3905. }
  3906. }
  3907. int CYAServerDlg::init_dept()
  3908. {
  3909. CMysqlConn* pConn = NULL;
  3910. CDBConnGuard pDbGuard(pConn);
  3911. if(pConn == NULL){
  3912. return 1;
  3913. }
  3914. MYSQL_ROW pRow;
  3915. MYSQL_RES *pRes = NULL;
  3916. int err = 0;
  3917. pRes = pConn->Execute("select dept_id, name from dat_dept order by rank;", err);
  3918. Dept* dept = NULL;
  3919. int nRow = 0;
  3920. while(pRow = mysql_fetch_row(pRes)) {
  3921. DeptMap::iterator it = mp_dept_list.find(atoi(pRow[0]));
  3922. if(it != mp_dept_list.end()){
  3923. dept = it->second;
  3924. }else{
  3925. dept = new Dept(atoi(pRow[0]), pRow[1]);
  3926. mp_dept_list.insert(make_pair(dept->dept_id, dept));
  3927. nRow++;
  3928. }
  3929. }
  3930. mysql_free_result(pRes);
  3931. CString strlog;
  3932. strlog.Format(_T("%s%d%s"), _T(LOG_INIT_DEPT), nRow, _T(LOG_RECORD_COUNT));
  3933. show_log(strlog);
  3934. return 0;
  3935. }
  3936. /*
  3937. * 从数据库的dat_setting表初始化系统阈值,
  3938. * 包括:井下人员阈值,井下车辆阈值,人员超时阈值,车辆超时阈值,车辆超速阈值
  3939. *
  3940. * param
  3941. * 无
  3942. *
  3943. * return
  3944. * 无
  3945. */
  3946. int CYAServerDlg::init_setting()
  3947. {
  3948. CMysqlConn* pConn = NULL;
  3949. CDBConnGuard pDbGuard(pConn);
  3950. if(pConn == NULL){
  3951. return 1;
  3952. }
  3953. MYSQL_ROW pRow;
  3954. MYSQL_RES *pRes = NULL;
  3955. int err = 0;
  3956. pRes = pConn->Execute("select setting_id, name, type, value from dat_setting;", err);
  3957. string name, val, type;
  3958. while(pRow = mysql_fetch_row(pRes)) {
  3959. name = pRow[1], type = pRow[2], val = pRow[3];
  3960. if("over_count_person" == name){
  3961. sls_setting.over_count_person = atoi(val.c_str());
  3962. }else if("over_count_vehicle" == name){
  3963. sls_setting.over_count_vehicle = atoi(val.c_str());
  3964. }else if("over_time_person" == name){
  3965. sls_setting.over_time_person = atoi(val.c_str());
  3966. }else if("over_time_vehicle" == name){
  3967. sls_setting.over_time_vehicle = atoi(val.c_str());
  3968. }else if("over_speed" == name){
  3969. sls_setting.over_speed = atof(val.c_str());
  3970. }
  3971. }
  3972. mysql_free_result(pRes);
  3973. show_log(_T(LOG_INIT_SETTING));
  3974. return 0;
  3975. }
  3976. void CYAServerDlg::deal_alarm_card(Card* card, CardMap* dest_card_list, bool is_alarm, ALARM_FLAG tag)
  3977. {
  3978. //TRACE(_T("start \n"));
  3979. CardMap::iterator it_card = dest_card_list->find(card->card_id);
  3980. //TRACE(_T("end \n"));
  3981. if(it_card != dest_card_list->end()){
  3982. if(!is_alarm){ // 取消报警
  3983. dest_card_list->erase(it_card);
  3984. }
  3985. }else {
  3986. if(is_alarm){
  3987. dest_card_list->insert(make_pair(card->card_id, card));
  3988. }
  3989. }
  3990. switch (tag) // savetodb
  3991. {
  3992. case AF_CARD_AREA_FORBIDDEN:
  3993. {
  3994. card->time_area_forbidden = is_alarm ? time(NULL) : 0;
  3995. card->status_area_forbidden = is_alarm ? 1 : 0;
  3996. break;
  3997. }
  3998. case AF_CARD_AREA_OVER_TIME:
  3999. {
  4000. card->time_area_over_time = is_alarm ? time(NULL) : 0;
  4001. card->status_area_over_time = is_alarm ? 1 : 0;
  4002. break;
  4003. }
  4004. case AF_AREA_OVER_TIME:
  4005. {
  4006. card->time_over_time = is_alarm ? time(NULL) : 0;
  4007. card->status_over_time = is_alarm ? 1 : 0;
  4008. break;
  4009. }
  4010. case AF_CARD_OVER_SPEED:
  4011. {
  4012. card->time_over_speed = is_alarm ? time(NULL) : 0;
  4013. card->status_over_speed = is_alarm ? 1 : 0;
  4014. break;
  4015. }
  4016. default:
  4017. break;
  4018. }
  4019. }
  4020. void CYAServerDlg::deal_alarm_area( Area* area, AreaMap* dest_area_list, bool is_alarm, ALARM_FLAG tag )
  4021. {
  4022. AreaMap::iterator it_area = dest_area_list->find(area->area_id);
  4023. if(it_area != dest_area_list->end()){
  4024. if(!is_alarm){
  4025. //savetodb
  4026. dest_area_list->erase(it_area);
  4027. }
  4028. }else{
  4029. if(is_alarm){
  4030. // savetodb
  4031. dest_area_list->insert(make_pair(area->area_id, area));
  4032. }
  4033. }
  4034. }
  4035. /*
  4036. * 从数据库的dat_alarm_type表初始化告警类型和名称
  4037. *
  4038. * param
  4039. * 无
  4040. *
  4041. * return
  4042. * 无
  4043. */
  4044. int CYAServerDlg::init_alarm_type()
  4045. {
  4046. CMysqlConn* pConn = NULL;
  4047. CDBConnGuard pDbGuard(pConn);
  4048. if(pConn == NULL){
  4049. return 1;
  4050. }
  4051. MYSQL_ROW pRow;
  4052. MYSQL_RES *pRes = NULL;
  4053. int err = 0;
  4054. pRes = pConn->Execute("select alarm_type_id, name from dat_alarm_type;", err);
  4055. while(pRow = mysql_fetch_row(pRes)) {
  4056. AlarmTypeMap::iterator it = mp_alarm_type_list.find(atoi(pRow[0]));
  4057. if(it != mp_alarm_type_list.end()){
  4058. it->second = pRow[1];
  4059. }else{
  4060. mp_alarm_type_list.insert(make_pair(atoi(pRow[0]), pRow[1]));
  4061. }
  4062. }
  4063. mysql_free_result(pRes);
  4064. show_log(_T(LOG_INIT_ALARM_TYPE));
  4065. return 0;
  4066. }
  4067. void CYAServerDlg::AddItem( CString strvalue, int readerid, BOOL is_closed /*= false*/ )
  4068. {
  4069. CString strRow;
  4070. int nRow = 0;
  4071. bool bFind = false;
  4072. for(int i = 0; i < m_listctrl_reader.GetItemCount(); i++){
  4073. if(strvalue == m_listctrl_reader.GetItemText(i, 1)){
  4074. nRow = i;
  4075. bFind = true;
  4076. break;
  4077. }
  4078. }
  4079. if(!bFind){
  4080. nRow = m_listctrl_reader.GetItemCount();
  4081. //strRow.Format(_T("%d"), nRow + 1);
  4082. nRow = m_listctrl_reader.InsertItem(nRow, CFunctions::formatInt(readerid));
  4083. }
  4084. m_listctrl_reader.SetItemText(nRow, 1, strvalue);
  4085. m_listctrl_reader.SetItemText(nRow, 2, is_closed ? _T("中断"): _T("已连接"));
  4086. }
  4087. void CYAServerDlg::show_log( LPCTSTR szlog, BOOL bSave )
  4088. {
  4089. CString sMsg, sLog;
  4090. CString sTime=COleDateTime::GetCurrentTime().Format(_T(LOG_TIME_FORMAT));
  4091. sMsg.Format(_T("%s %s\n"), sTime, szlog);
  4092. try{
  4093. ::LogMsg(sMsg);
  4094. }
  4095. catch(...){
  4096. }
  4097. /*if(bSave && theApp.log_sys_status){
  4098. writeErrorLog(_T("LOG_S"), sMsg);
  4099. }*/
  4100. if(m_log_sys_status){
  4101. writeErrorLog(_T("LOG_S"), sMsg,false);
  4102. //sMsg = _T("");
  4103. sMsg.Empty();
  4104. }
  4105. }
  4106. /*
  4107. * 初始化数据库连接
  4108. *
  4109. * param
  4110. * 无
  4111. *
  4112. * return
  4113. * 无
  4114. *
  4115. */
  4116. void CYAServerDlg::database_connect()
  4117. {
  4118. //show_log(_T(LOG_CONNECT_DB), FALSE);
  4119. show_log(_T(LOG_CONNECT_DB));
  4120. GetConnPool().Init(m_db_setting.encoding.c_str(), m_db_setting.host.c_str(), m_db_setting.user.c_str(),
  4121. m_db_setting.password.c_str(), m_db_setting.dbname.c_str(), m_db_setting.port, NULL, 0);
  4122. int nConn = GetConnPool().InitAllConn();
  4123. if(nConn > 0){
  4124. show_log(_T(LOG_CONNECT_DB_SUCCESS));
  4125. }else{
  4126. show_log(_T(LOG_CONNECT_DB_FAIL));
  4127. }
  4128. }
  4129. void CYAServerDlg::stop_timer()
  4130. {
  4131. KillTimer(TMR_SEND_COUNTING);
  4132. KillTimer(TMR_SEND_ALARM);
  4133. KillTimer(TMR_SEND_DEVICE_STATE);
  4134. KillTimer(TMR_SEND_POSTION);
  4135. }
  4136. void CYAServerDlg::OnMenuDb()
  4137. {
  4138. CDbSettingDlg dlg;
  4139. dlg.DoModal();
  4140. }
  4141. void CYAServerDlg::OnCallMessage(string const& name, message::ptr const& data, bool isAck,message::list &ack_resp )
  4142. {
  4143. if(data->get_flag() == message::flag_object){
  4144. /*string jsonString = name;
  4145. if(m_log_recv_package){
  4146. CString strlog = _T("");
  4147. strlog.Format(_T("1%s"),CFunctions::c2wc(jsonString.c_str()));
  4148. writeErrorLog(_T("JSON_R"),strlog,false);
  4149. }*/
  4150. string cmd = data->get_map()[JSON_ROOT_KEY_CMD]->get_string();
  4151. if(JSON_CMD_VALUE_META_DATA_CHANGED == cmd){
  4152. map<string,message::ptr> data_map = data->get_map()[JSON_ROOT_KEY_DATA]->get_map();
  4153. string name = data_map[JSON_KEY_NAME]->get_string().c_str();
  4154. string op_type = data_map[JSON_KEY_OP_TYPE]->get_string().c_str();
  4155. EDIT_TYPE_ID edit_type_id = (JSON_KEY_OP_TYPE_INSERT == op_type)? ET_INSERT: ((JSON_KEY_OP_TYPE_UPDATE == op_type)? ET_UPDATE: ET_DELETE);
  4156. if(JSON_KEY_NAME_VEHICLE == name){
  4157. string id = data_map[JSON_KEY_ID]->get_string().c_str();
  4158. deal_call_edit_vehicle(id, edit_type_id);
  4159. }else if(JSON_KEY_NAME_STAFF == name){
  4160. string id = data_map[JSON_KEY_ID]->get_string().c_str();
  4161. deal_call_edit_staff(id, edit_type_id);
  4162. }else if(JSON_KEY_NAME_READER == name){
  4163. int id = atoi(data_map[JSON_KEY_ID]->get_string().c_str());
  4164. deal_call_edit_reader(id, edit_type_id);
  4165. }else if(JSON_KEY_NAME_CARD == name){
  4166. string id = data_map[JSON_KEY_ID]->get_string().c_str();
  4167. deal_call_edit_card(id, edit_type_id);
  4168. }else if(JSON_KEY_NAME_AREA == name){
  4169. int id = atoi(data_map[JSON_KEY_ID]->get_string().c_str());
  4170. deal_call_edit_area(id, edit_type_id);
  4171. }else if(JSON_KEY_NAME_MAP == name){
  4172. int id = atoi(data_map[JSON_KEY_ID]->get_string().c_str());
  4173. deal_call_edit_map(id, edit_type_id);
  4174. }else if(JSON_KEY_NAME_PATH == name){
  4175. //int id = data_map[JSON_KEY_ID]->get_int();
  4176. //deal_call_edit_path(id, edit_type_id);
  4177. }
  4178. }else if(JSON_CMD_VALUE_SET_LIMIT_VALUE == cmd){
  4179. //阈值限制接口
  4180. string json_data = data->get_map()[JSON_ROOT_KEY_DATA]->get_string();
  4181. parse_json_data_set_limit_value(json_data.c_str());
  4182. } else if(JSON_CMD_VALUE_REQUEST_ALL_POSTION == cmd){
  4183. //请求全部位置信息
  4184. send_json_data(JSON_CMD_VALUE_REQUEST_ALL_POSTION, get_json_position_all());
  4185. } else if(JSON_CMD_VALUE_DEAL_HELP == cmd){
  4186. // 处理呼救信息
  4187. string json_data = data->get_map()[JSON_ROOT_KEY_DATA]->get_string();
  4188. parse_json_data_deal_help(json_data.c_str());
  4189. } else if(JSON_CMD_VALUE_CALL_CARD_START == cmd){
  4190. //呼叫
  4191. parse_json_data_call_card(data);
  4192. } else if(JSON_CMD_VALUE_CALL_CARD_CANCEL == cmd){
  4193. //取消呼叫
  4194. parse_json_data_call_card_cancel(data);
  4195. } else if(JSON_CMD_VALUE_CLEAR_CARD == cmd) {
  4196. // 清楚盲区卡
  4197. //map<string,message::ptr> data_map = data->get_map()[JSON_ROOT_KEY_DATA]->get_map();
  4198. //parse_json_data_clear_card(data_map);
  4199. }
  4200. }
  4201. }
  4202. void CYAServerDlg::parse_json_data_set_limit_value( const char* sz )
  4203. {
  4204. //USES_CONVERSION;
  4205. //CUTF82C strJson(szJson);
  4206. Json::Value root;
  4207. Json::Reader reader;
  4208. CString strlog;
  4209. if (!reader.parse(sz,root)){
  4210. strlog.Format(_T("%s%s"), _T(LOG_SET_LIMIT_VALUE), _T(LOG_FAIL));
  4211. show_log(strlog);
  4212. return ;
  4213. }
  4214. sls_setting.over_count_person = root[JSON_KEY_ALARM_OVER_COUNT_PERSON].asInt();
  4215. sls_setting.over_count_vehicle = root[JSON_KEY_ALARM_OVER_COUNT_VEHICLE].asInt();
  4216. sls_setting.over_time_person = root[JSON_KEY_ALARM_OVER_TIME_PERSON].asInt();
  4217. sls_setting.over_time_vehicle = root[JSON_KEY_ALARM_OVER_TIME_VEHICLE].asInt();
  4218. sls_setting.over_speed = root[JSON_KEY_ALARM_OVER_SPEED_VEHICLE].asDouble();
  4219. strlog.Format(_T("%s%s"), _T(LOG_SET_LIMIT_VALUE), _T(LOG_SUCCESS));
  4220. show_log(strlog);
  4221. if(m_log_recv_package){
  4222. strlog = _T("");
  4223. strlog.Format(_T("%s"),sz);
  4224. writeErrorLog(_T("JSON_R"),strlog,false);
  4225. //strlog = _T("");
  4226. strlog.Empty();
  4227. }
  4228. }
  4229. void CYAServerDlg::parse_json_data_call_card(message::ptr const& data /*const char* sz*/ )
  4230. {
  4231. CString strlog;
  4232. string call_id, user_name, call_time;
  4233. string cardid, readerid;
  4234. int call_time_out, reader_count, card_count, call_type_id;
  4235. map<string,message::ptr> data_map = data->get_map()[JSON_ROOT_KEY_DATA]->get_map();
  4236. call_id = data_map[JSON_KEY_CALL_CARD_CALL_ID]->get_string();
  4237. call_time_out = data_map[JSON_KEY_CALL_CARD_CALL_TIME_OUT]->get_int();
  4238. call_type_id = data_map[JSON_KEY_CALL_CARD_CALL_TYPE]->get_int();
  4239. user_name = data_map[JSON_KEY_CALL_CARD_USER_NAME]->get_string();
  4240. call_time = data_map[JSON_KEY_CALL_CARD_CALL_TIME]->get_string();
  4241. vector<message::ptr> reader_vec = data_map[JSON_KEY_CALL_CARD_STATIONS]->get_vector();
  4242. vector<message::ptr> card_vec = data_map[JSON_KEY_CALL_CARD_CARDS]->get_vector();
  4243. if(reader_vec.size() == 0 && card_vec.size() == 0)
  4244. {
  4245. return;
  4246. }
  4247. int reader_id, npos;
  4248. SocketMap::iterator it_sock;
  4249. BYTE buf[LENGTH_SEND_BUF];
  4250. _call_info_reader* call_reader;
  4251. _call_info_card* call_card;
  4252. //呼叫发起有两种,
  4253. //一种通过分站发起呼叫即为对此分站下的所有自组网卡全员呼叫
  4254. //一种是对单卡发起的呼叫
  4255. vector<message::ptr>::const_iterator it_reader = reader_vec.begin();
  4256. if(reader_vec.size() > 0){
  4257. for(; it_reader != reader_vec.end(); ++it_reader){
  4258. string s_reader_id = "";
  4259. s_reader_id = (*it_reader)->get_map()[JSON_KEY_CALL_CARD_STATION_ID]->get_string();
  4260. reader_id = atoi(s_reader_id.c_str());
  4261. CallInfoReaderMap::iterator it_call_reader = mp_call_info.find(reader_id);
  4262. if(it_call_reader != mp_call_info.end()){
  4263. call_reader = it_call_reader->second;
  4264. if(call_reader->call_type > call_type_id){
  4265. call_reader->call_type = call_type_id;
  4266. }
  4267. }else{
  4268. call_reader = new _call_info_reader;
  4269. call_reader->call_type = call_type_id;
  4270. mp_call_info.insert(make_pair(reader_id, call_reader));
  4271. }
  4272. vector<message::ptr>::const_iterator it_card = card_vec.begin();
  4273. if(card_vec.size() == 0 || "" == (*it_card)->get_map()[JSON_KEY_CALL_CARD_CARD_ID]->get_string()){
  4274. call_reader->cards_count = 0;
  4275. call_reader->is_call_all = true;
  4276. call_reader->is_start_call = true;
  4277. }else{
  4278. call_reader->cards_count = card_vec.size();
  4279. call_reader->is_call_all = false;
  4280. call_reader->is_start_call = true;
  4281. BYTE card_type = 0;
  4282. for(; it_card != card_vec.end(); ++it_card){
  4283. if( "" == (*it_card)->get_map()[JSON_KEY_CALL_CARD_CARD_ID]->get_string()){
  4284. call_reader->cards_count = 0;
  4285. call_reader->is_call_all = true;
  4286. }else{
  4287. string s_card_id = (*it_card)->get_map()[JSON_KEY_CALL_CARD_CARD_ID]->get_string();
  4288. string s_card_type = (*it_card)->get_map()[JSON_KEY_CALL_CARD_CARD_TYPE_ID]->get_string();
  4289. //string str_card_id = CFunctions::getstrwithzero(card_type, 3) + CFunctions::getstrwithzero(card_id, 10);
  4290. CallInfoCardMap::iterator it_call_card = call_reader->mpCard.find(s_card_id);
  4291. int card_id = atoi(s_card_id.c_str());
  4292. int card_type = atoi(s_card_type.c_str());
  4293. if(it_call_card != call_reader->mpCard.end()){ // 已在呼叫列表
  4294. call_card = it_call_card->second;
  4295. if(call_card->call_type < call_type_id){ // 原呼叫优先级低
  4296. call_card->card_type = card_type;
  4297. call_card->call_type = call_type_id;
  4298. call_card->start_time = time(NULL);
  4299. call_card->time_out = call_time_out;
  4300. }else {
  4301. call_card->start_time = time(NULL);
  4302. call_card->time_out = call_time_out;
  4303. }
  4304. }else{ // 未在呼叫列表
  4305. call_card = new _call_info_card;
  4306. //call_card->card_id = card_id;
  4307. call_card->card_type = card_type;
  4308. call_card->start_time = time(NULL);
  4309. call_card->time_out = call_time_out;
  4310. call_card->call_type = call_type_id;
  4311. call_reader->mpCard.insert(make_pair(s_card_id, call_card));
  4312. }
  4313. }
  4314. }
  4315. }
  4316. }
  4317. }
  4318. //单卡发送呼叫
  4319. it_reader = reader_vec.begin();
  4320. if(it_reader == reader_vec.end() && card_vec.size() > 0 ){
  4321. int nCounts = 0;
  4322. int card_id = 0;
  4323. BYTE card_type = 0;
  4324. string s_card_id = "";
  4325. string s_card_type = "";
  4326. vector<message::ptr>::const_iterator it_card = card_vec.begin();
  4327. for(; it_card != card_vec.end(); ++it_card){
  4328. card_type = 0;
  4329. s_card_id = "";
  4330. s_card_type = "";
  4331. call_type_id = 0;
  4332. nCounts++;
  4333. s_card_id = (*it_card)->get_map()[JSON_KEY_CALL_CARD_CARD_ID]->get_string();
  4334. s_card_type =(*it_card)->get_map()[JSON_KEY_CALL_CARD_CARD_TYPE_ID]->get_string();
  4335. string new_card_id = s_card_id.substr(3,s_card_id.length());
  4336. card_id = atoi(new_card_id.c_str());
  4337. card_type = CT_ADHOC;
  4338. reader_id = mp_card_list_down_adhoc.find(s_card_id)->second->reader_id;
  4339. CallInfoReaderMap::iterator it_call_reader = mp_call_info.find(reader_id);
  4340. if(it_call_reader != mp_call_info.end()){
  4341. call_reader = it_call_reader->second;
  4342. call_reader->is_start_call = true;
  4343. call_reader->is_call_all = false;
  4344. call_reader->cards_count = 1;
  4345. if(call_reader->call_type > call_type_id){
  4346. call_reader->call_type = call_type_id;
  4347. }
  4348. }else{
  4349. call_reader = new _call_info_reader;
  4350. call_reader->call_type = call_type_id;
  4351. call_reader->is_call_all = false;
  4352. call_reader->cards_count = 1;
  4353. call_reader->is_start_call = true;
  4354. mp_call_info.insert(make_pair(reader_id, call_reader));
  4355. }
  4356. CallInfoCardMap::iterator it_call_card = call_reader->mpCard.find(s_card_id);
  4357. if(it_call_card != call_reader->mpCard.end()){ // 已在呼叫列表
  4358. call_card = it_call_card->second;
  4359. if(call_card->call_type < call_type_id){ // 原呼叫优先级低
  4360. call_card->card_type = card_type;
  4361. call_card->card_id = 1;
  4362. call_card->call_type = call_type_id;
  4363. call_card->start_time = time(NULL);
  4364. call_card->time_out = call_time_out;
  4365. }else {
  4366. call_card->start_time = time(NULL);
  4367. call_card->time_out = call_time_out;
  4368. }
  4369. }else{ // 未在呼叫列表
  4370. call_card = new _call_info_card;
  4371. call_card->card_id = card_id;
  4372. call_card->card_type = card_type;
  4373. call_card->start_time = time(NULL);
  4374. call_card->time_out = call_time_out;
  4375. call_card->call_type = call_type_id;
  4376. call_reader->mpCard.insert(make_pair(s_card_id, call_card));
  4377. }
  4378. }
  4379. }
  4380. strlog.Format(_T("%s%s"), _T(LOG_CALL_CARD), _T(LOG_SUCCESS));
  4381. show_log(strlog);
  4382. }
  4383. void CYAServerDlg::parse_json_data_clear_card( const char* sz )
  4384. {
  4385. Json::Value root;
  4386. Json::Reader reader;
  4387. CString strlog = _T("");
  4388. if (!reader.parse(sz,root)){
  4389. strlog.Format(_T("%s%s"), _T(LOG_CLEAR_CARD), _T(LOG_FAIL));
  4390. show_log(strlog);
  4391. return ;
  4392. }
  4393. if(root.isNull() || !root.isArray()){
  4394. return;
  4395. }
  4396. int card_type_id, edit_type_id;
  4397. string cardid = "";
  4398. for(unsigned int i = 0; i < root.size(); i++){
  4399. cardid = root[i][JSON_KEY_EDIT_CARD_ID].asString();
  4400. edit_type_id = root[i][JSON_KEY_EDIT_EDIT_TYPE_ID].asInt();
  4401. CardMap::iterator it_card = mp_card_list_all.find(cardid);
  4402. if(it_card != mp_card_list_all.end()){
  4403. if(STATUS_ERROR == it_card->second->status_lost){
  4404. // 升井
  4405. //TRACE(_T("time memcpy 8\n"));
  4406. it_card->second->up_time = time(NULL);
  4407. it_card->second->pos_state = DT_UP;
  4408. card_enter_mine(it_card->second);
  4409. remove_card(cardid); // reset_card_status();
  4410. }
  4411. }
  4412. }
  4413. strlog.Format(_T("%s%s"), _T(LOG_CLEAR_CARD), _T(LOG_SUCCESS));
  4414. show_log(strlog);
  4415. if(m_log_recv_package){
  4416. strlog = _T("");
  4417. strlog.Format(_T("%s"),sz);
  4418. writeErrorLog(_T("JSON_R"),strlog,false);
  4419. }
  4420. }
  4421. void CYAServerDlg::parse_json_data_deal_help( const char* sz )
  4422. {
  4423. Json::Value root;
  4424. Json::Reader reader;
  4425. CString strlog;
  4426. if (!reader.parse(sz,root)){
  4427. strlog.Format(_T("%s%s"), _T(LOG_DEAL_HELP), _T(LOG_FAIL));
  4428. show_log(strlog);
  4429. return ;
  4430. }
  4431. int card_type_id, edit_type_id;
  4432. string cardid = root[JSON_KEY_EDIT_CARD_ID].asString();
  4433. card_type_id = root[JSON_KEY_CARD_TYPE_ID].asInt();
  4434. edit_type_id = root[JSON_KEY_EDIT_EDIT_TYPE_ID].asInt();
  4435. CardMap::iterator it_card = mp_card_list_help.find(cardid);
  4436. if(it_card != mp_card_list_help.end()){
  4437. it_card->second->status_help = STATUS_HELP_DEALED;
  4438. }
  4439. strlog.Format(_T("%s%s"), _T(LOG_DEAL_HELP), _T(LOG_SUCCESS));
  4440. show_log(strlog);
  4441. if(m_log_recv_package){
  4442. strlog = _T("");
  4443. strlog.Format(_T("%s"),sz);
  4444. writeErrorLog(_T("JSON_R"),strlog,false);
  4445. strlog.Empty();
  4446. }
  4447. }
  4448. void CYAServerDlg::deal_call_edit_map(int id, EDIT_TYPE_ID edit_type_id)
  4449. {
  4450. CString strlog = _T("");
  4451. switch (edit_type_id)
  4452. {
  4453. case ET_INSERT:
  4454. {
  4455. init_map(id);
  4456. break;
  4457. }
  4458. case ET_UPDATE:
  4459. {
  4460. init_map(id);
  4461. break;
  4462. }
  4463. case ET_DELETE:
  4464. {
  4465. MapInfoMap::iterator it_map = mp_map_list.find(id);
  4466. if(it_map != mp_map_list.end()){
  4467. mp_map_list.erase(it_map);
  4468. }
  4469. break;
  4470. }
  4471. default:
  4472. break;
  4473. }
  4474. strlog.Format(_T("%s%s"), _T(LOG_EDIT_MAP), _T(LOG_SUCCESS));
  4475. show_log(strlog);
  4476. }
  4477. void CYAServerDlg::deal_call_edit_area(int id, EDIT_TYPE_ID edit_type_id)
  4478. {
  4479. CString strlog;
  4480. switch (edit_type_id)
  4481. {
  4482. case ET_INSERT:
  4483. {
  4484. init_area(id);
  4485. break;
  4486. }
  4487. case ET_UPDATE:
  4488. {
  4489. init_area(id);
  4490. break;
  4491. }
  4492. case ET_DELETE:
  4493. {
  4494. AreaMap::iterator it_area = mp_area_list.find(id);
  4495. MapInfoMap::iterator it_map = mp_map_list.find(it_area->second->map_id);
  4496. if(it_map != mp_map_list.end()){
  4497. AreaMap::iterator it_map_area = it_map->second->map_area_list.find(id);
  4498. it_map->second->map_area_list.erase(it_map_area);
  4499. }
  4500. if(it_area != mp_area_list.end()){
  4501. mp_area_list.erase(it_area);
  4502. }
  4503. it_area = mp_area_over_count_person.find(id);
  4504. if(it_area != mp_area_over_count_person.end()){
  4505. mp_area_over_count_person.erase(it_area);
  4506. }
  4507. it_area = mp_area_over_time_person.find(id);
  4508. if(it_area != mp_area_over_time_person.end()){
  4509. mp_area_over_time_person.erase(it_area);
  4510. }
  4511. it_area = mp_area_forbidden_person.find(id);
  4512. if(it_area != mp_area_forbidden_person.end()){
  4513. mp_area_forbidden_person.erase(it_area);
  4514. }
  4515. it_area = mp_area_over_count_vehicle.find(id);
  4516. if(it_area != mp_area_over_count_vehicle.end()){
  4517. mp_area_over_count_vehicle.erase(it_area);
  4518. }
  4519. it_area = mp_area_over_time_vehicle.find(id);
  4520. if(it_area != mp_area_over_time_vehicle.end()){
  4521. mp_area_over_time_vehicle.erase(it_area);
  4522. }
  4523. it_area = mp_area_forbidden_vehicle.find(id);
  4524. if(it_area != mp_area_forbidden_vehicle.end()){
  4525. mp_area_forbidden_vehicle.erase(it_area);
  4526. }
  4527. break;
  4528. }
  4529. default:
  4530. break;
  4531. }
  4532. strlog.Format(_T("%s%s"), _T(LOG_EDIT_AREA), _T(LOG_SUCCESS));
  4533. show_log(strlog);
  4534. }
  4535. void CYAServerDlg::deal_call_edit_reader(int id, EDIT_TYPE_ID edit_type_id)
  4536. {
  4537. CString strlog;
  4538. switch (edit_type_id)
  4539. {
  4540. case ET_INSERT:
  4541. {
  4542. init_reader(id);
  4543. init_antenna(id);
  4544. //init_all_readers_coverage(id);
  4545. //init_tdoa_all_readers_coverage(id);
  4546. #ifdef ALGORITHM_TYPE_TOF
  4547. init_all_readers_coverage();
  4548. #elif defined ALGORITHM_TYPE_TDOA
  4549. init_tdoa_all_readers_coverage(id);
  4550. #endif
  4551. break;
  4552. }
  4553. case ET_UPDATE:
  4554. {
  4555. init_reader(id);
  4556. init_reader(id);
  4557. //init_all_readers_coverage(id);
  4558. //init_tdoa_all_readers_coverage(id);
  4559. #ifdef ALGORITHM_TYPE_TOF
  4560. init_all_readers_coverage();
  4561. #elif defined ALGORITHM_TYPE_TDOA
  4562. init_tdoa_all_readers_coverage(id);
  4563. #endif
  4564. break;
  4565. }
  4566. case ET_DELETE:
  4567. {
  4568. ReaderMap::iterator it_reader = mp_reader_list.find(id);
  4569. MapInfoMap::iterator it_map = mp_map_list.find(it_reader->second->map_id);
  4570. if(it_map != mp_map_list.end()){
  4571. ReaderMap::iterator it_map_reader = it_map->second->map_reader_list.find(id);
  4572. if(it_map_reader != it_map->second->map_reader_list.end()){
  4573. it_map->second->map_reader_list.erase(it_map_reader);
  4574. }
  4575. }
  4576. if(it_reader != mp_reader_list.end()){
  4577. mp_reader_list.erase(it_reader);
  4578. }
  4579. break;
  4580. }
  4581. default:
  4582. break;
  4583. }
  4584. strlog.Format(_T("%s%s"), _T(LOG_EDIT_READER), _T(LOG_SUCCESS));
  4585. show_log(strlog);
  4586. }
  4587. void CYAServerDlg::deal_call_edit_card(string id, EDIT_TYPE_ID edit_type_id)
  4588. {
  4589. CString strlog;
  4590. CardMap::iterator it_card = mp_card_list_all.find(id);
  4591. if(it_card == mp_card_list_all.end()){
  4592. return;
  4593. }
  4594. int card_type_id = it_card->second->card_type;
  4595. switch (edit_type_id)
  4596. {
  4597. case ET_INSERT:
  4598. {
  4599. if(CT_VEHICLE == card_type_id){
  4600. init_vehicle(id, true);
  4601. }else if(CT_PERSON == card_type_id) {
  4602. init_staffer(id, true);
  4603. }else if(CT_ADHOC == card_type_id){
  4604. init_adhoc(id, true);
  4605. }
  4606. break;
  4607. }
  4608. case ET_UPDATE:
  4609. {
  4610. if(CT_VEHICLE == card_type_id){
  4611. init_vehicle(id, true);
  4612. }else if(CT_PERSON == card_type_id) {
  4613. init_staffer(id, true);
  4614. }else if(CT_ADHOC == card_type_id){
  4615. init_adhoc(id, true);
  4616. }
  4617. break;
  4618. }
  4619. case ET_DELETE:
  4620. {
  4621. remove_card(id);
  4622. break;
  4623. }
  4624. default:
  4625. break;
  4626. }
  4627. strlog.Format(_T("%s%s"), _T(LOG_EDIT_CARD), _T(LOG_SUCCESS));
  4628. show_log(strlog);
  4629. }
  4630. void CYAServerDlg::deal_call_edit_staff(string id, EDIT_TYPE_ID edit_type_id)
  4631. {
  4632. CString strlog;
  4633. switch (edit_type_id)
  4634. {
  4635. case ET_INSERT:
  4636. {
  4637. init_staffer(id);
  4638. break;
  4639. }
  4640. case ET_UPDATE:
  4641. {
  4642. init_staffer(id);
  4643. break;
  4644. }
  4645. case ET_DELETE:
  4646. {
  4647. string cardid = "";
  4648. CardMap::iterator it_card = mp_card_list_down_person.begin();
  4649. for(; it_card != mp_card_list_down_person.end(); ++it_card){
  4650. if(it_card->second->id == id){
  4651. cardid = it_card->second->card_id;
  4652. break;
  4653. }
  4654. }
  4655. remove_card(cardid);
  4656. break;
  4657. }
  4658. default:
  4659. break;
  4660. }
  4661. strlog.Format(_T("%s%s"), _T(LOG_EDIT_STAFFER), _T(LOG_SUCCESS));
  4662. show_log(strlog);
  4663. }
  4664. void CYAServerDlg::deal_call_edit_vehicle(string id, EDIT_TYPE_ID edit_type_id)
  4665. {
  4666. CString strlog;
  4667. switch (edit_type_id)
  4668. {
  4669. case ET_INSERT:
  4670. {
  4671. init_vehicle(id);
  4672. break;
  4673. }
  4674. case ET_UPDATE:
  4675. {
  4676. init_vehicle(id);
  4677. break;
  4678. }
  4679. case ET_DELETE:
  4680. {
  4681. string cardid = "";
  4682. CardMap::iterator it_card = mp_card_list_down_vehicle.begin();
  4683. for(; it_card != mp_card_list_down_vehicle.end(); ++it_card){
  4684. if(it_card->second->id == id){
  4685. cardid = it_card->second->card_id;
  4686. break;
  4687. }
  4688. }
  4689. remove_card(cardid);
  4690. break;
  4691. }
  4692. default:
  4693. break;
  4694. }
  4695. strlog.Format(_T("%s%s"), _T(LOG_EDIT_VEHICLE), _T(LOG_SUCCESS));
  4696. show_log(strlog);
  4697. }
  4698. void CYAServerDlg::deal_call_edit_adhoc(string id, EDIT_TYPE_ID edit_type_id)
  4699. {
  4700. CString strlog;
  4701. switch (edit_type_id)
  4702. {
  4703. case ET_INSERT:
  4704. {
  4705. init_adhoc(id);
  4706. break;
  4707. }
  4708. case ET_UPDATE:
  4709. {
  4710. init_adhoc(id);
  4711. break;
  4712. }
  4713. case ET_DELETE:
  4714. {
  4715. string cardid = "";
  4716. CardMap::iterator it_card = mp_card_list_down_adhoc.begin();
  4717. for(; it_card != mp_card_list_down_adhoc.end(); ++it_card){
  4718. if(it_card->second->id == id){
  4719. cardid = it_card->second->card_id;
  4720. break;
  4721. }
  4722. }
  4723. remove_card(cardid);
  4724. break;
  4725. }
  4726. default:
  4727. break;
  4728. }
  4729. strlog.Format(_T("%s%s"), _T(LOG_EDIT_ADHOC), _T(LOG_SUCCESS));
  4730. show_log(strlog);
  4731. }
  4732. void CYAServerDlg::remove_card( string card_id )
  4733. {
  4734. if(card_id.length() == 0)
  4735. return;
  4736. int card_type_id = 0;
  4737. CardMap::iterator it_card = mp_card_list_all.find(card_id);
  4738. if(it_card == mp_card_list_all.end()){
  4739. return;
  4740. }
  4741. card_type_id = it_card->second->card_type;
  4742. mp_card_list_all.erase(it_card);
  4743. MapInfoMap::iterator it_map = mp_map_list.find(it_card->second->map_id);
  4744. if(it_map != mp_map_list.end()){
  4745. if(CT_VEHICLE == card_type_id){
  4746. CardMap::iterator it_map_card = it_map->second->map_card_list_vehicle.find(card_id);
  4747. if(it_map_card != it_map->second->map_card_list_vehicle.end()){
  4748. it_map->second->map_card_list_vehicle.erase(it_map_card);
  4749. }
  4750. }else if(CT_PERSON == card_type_id){
  4751. CardMap::iterator it_map_card = it_map->second->map_card_list_person.find(card_id);
  4752. if(it_map_card != it_map->second->map_card_list_person.end()){
  4753. it_map->second->map_card_list_person.erase(it_map_card);
  4754. }
  4755. }
  4756. }
  4757. AreaMap::iterator it_area = mp_area_list.find(it_card->second->area_id);
  4758. if(it_area != mp_area_list.end()){
  4759. if(CT_VEHICLE == card_type_id){
  4760. CardMap::iterator it_area_card = it_area->second->area_card_list_vehicle.find(card_id);
  4761. if(it_area_card != it_area->second->area_card_list_vehicle.end()){
  4762. it_area->second->area_card_list_vehicle.erase(it_area_card);
  4763. }
  4764. }else if(CT_PERSON == card_type_id){
  4765. CardMap::iterator it_area_card = it_area->second->area_card_list_person.find(card_id);
  4766. if(it_area_card != it_area->second->area_card_list_person.end()){
  4767. it_area->second->area_card_list_person.erase(it_area_card);
  4768. }
  4769. }
  4770. }
  4771. DeptMap::iterator it_dept = mp_dept_list.find(it_card->second->dept_id);
  4772. if(it_dept != mp_dept_list.end()){
  4773. if(CT_VEHICLE == card_type_id){
  4774. CardMap::iterator it_dept_card = it_dept->second->dept_card_list_vehicle.find(card_id);
  4775. if(it_dept_card != it_dept->second->dept_card_list_vehicle.end()){
  4776. it_dept->second->dept_card_list_vehicle.erase(it_dept_card);
  4777. }
  4778. }else if(CT_PERSON == card_type_id){
  4779. CardMap::iterator it_dept_card = it_dept->second->dept_card_list_person.find(card_id);
  4780. if(it_dept_card != it_dept->second->dept_card_list_person.end()){
  4781. it_dept->second->dept_card_list_person.erase(it_dept_card);
  4782. }
  4783. }
  4784. }
  4785. if(CT_VEHICLE == card_type_id){
  4786. it_card = mp_card_list_down_vehicle.find(card_id);
  4787. if(it_card != mp_card_list_down_vehicle.end()){
  4788. mp_card_list_down_vehicle.erase(it_card);
  4789. }
  4790. it_card = mp_card_list_forbidden_vehicle.find(card_id);
  4791. if(it_card != mp_card_list_forbidden_vehicle.end()){
  4792. mp_card_list_forbidden_vehicle.erase(it_card);
  4793. }
  4794. it_card = mp_card_list_over_time_vehicle.find(card_id);
  4795. if(it_card != mp_card_list_over_time_vehicle.end()){
  4796. mp_card_list_over_time_vehicle.erase(it_card);
  4797. }
  4798. it_card = mp_card_list_area_over_time_vehicle.find(card_id);
  4799. if(it_card != mp_card_list_area_over_time_vehicle.end()){
  4800. mp_card_list_area_over_time_vehicle.erase(it_card);
  4801. }
  4802. it_card = mp_card_list_over_speed_vehicle.find(card_id);
  4803. if(it_card != mp_card_list_over_speed_vehicle.end()){
  4804. mp_card_list_over_speed_vehicle.erase(it_card);
  4805. }
  4806. }else if(CT_PERSON == card_type_id) {
  4807. it_card = mp_card_list_down_person.find(card_id);
  4808. if(it_card != mp_card_list_down_person.end()){
  4809. mp_card_list_down_person.erase(it_card);
  4810. }
  4811. it_card = mp_card_list_over_time_person.find(card_id);
  4812. if(it_card != mp_card_list_over_time_person.end()){
  4813. mp_card_list_over_time_person.erase(it_card);
  4814. }
  4815. it_card = mp_card_list_forbidden_person.find(card_id);
  4816. if(it_card != mp_card_list_forbidden_person.end()){
  4817. mp_card_list_forbidden_person.erase(it_card);
  4818. }
  4819. it_card = mp_card_list_help.find(card_id);
  4820. if(it_card != mp_card_list_help.end()){
  4821. mp_card_list_help.erase(it_card);
  4822. }
  4823. it_card = mp_card_list_area_over_time_person.find(card_id);
  4824. if(it_card != mp_card_list_area_over_time_person.end()){
  4825. mp_card_list_area_over_time_person.erase(it_card);
  4826. }
  4827. }
  4828. }
  4829. void CYAServerDlg::save_card_postion( Card* card )
  4830. {
  4831. // 位置发生变化
  4832. double moved_dist = sqrt(pow(card->x - card->stored_x, 2) + pow(card->y - card->stored_y, 2) +
  4833. pow(card->z - card->stored_z, 2));
  4834. //if(moved_dist > card->map_scale * 20){ //移动距离大于20m,认为出错
  4835. // card->x = card->last_x;
  4836. // card->y = card->last_y;
  4837. // card->z = card->last_z;
  4838. // return;
  4839. //}
  4840. // 位置变化幅度大于1m
  4841. if( moved_dist < card->map_scale / 2.0){ // 移动位置小于半米,不记录数据
  4842. return ;
  4843. }
  4844. card->stored_x = card->x;
  4845. card->stored_y = card->y;
  4846. card->stored_z = card->z;
  4847. //card->is_first_location = false;
  4848. store_data_card(card, HIS_LOCATION);
  4849. }
  4850. void CYAServerDlg::store_data_area( Area* area, time_t cur_time, time_t start_time, int tag )
  4851. {
  4852. char sql[LENGTH_SQL] = {'\0'};
  4853. char _time[STR_LEN_TIME], _time_ex[STR_LEN_TIME];
  4854. struct tm local_time, local_time_ex;
  4855. localtime_s(&local_time, &cur_time);
  4856. localtime_s(&local_time_ex, &start_time);
  4857. strftime(_time, 30, "%Y-%m-%d %H:%M:%S", &local_time);
  4858. strftime(_time_ex, 30, "%Y-%m-%d %H:%M:%S", &local_time_ex);
  4859. switch(tag){
  4860. case ALARM_AREA_OVER_COUNT_PERSON_START:
  4861. {
  4862. int alarm_type_id = ATID_AREA_OVER_COUNT_PERSON;
  4863. sprintf_s(sql, LENGTH_SQL, "INSERT INTO his_alarm_area(area_id, alarm_type_id, start_time) VALUES(%d, %d, '%s');",
  4864. area->area_id, alarm_type_id, _time);
  4865. break;
  4866. }
  4867. case ALARM_AREA_OVER_COUNT_PERSON_END:
  4868. {
  4869. localtime_s(&local_time_ex, &area->time_over_count_person);
  4870. strftime(_time_ex, 30, "%Y-%m-%d %H:%M:%S", &local_time_ex);
  4871. int alarm_type_id = ATID_AREA_OVER_COUNT_PERSON;
  4872. sprintf_s(sql, LENGTH_SQL,
  4873. "UPDATE his_alarm_area SET end_time = '%s' WHERE area_id=%d AND alarm_type_id=%d AND start_time = '%s';",
  4874. _time, area->area_id, alarm_type_id, _time_ex);
  4875. break;
  4876. }
  4877. default:
  4878. return;
  4879. }
  4880. execute_sql(sql);
  4881. }
  4882. void CYAServerDlg::store_data_reader( Reader* reader, int tag )
  4883. {
  4884. char sql[LENGTH_SQL] = {'\0'};
  4885. char _time[STR_LEN_TIME], _time_ex[STR_LEN_TIME];
  4886. struct tm local_time, local_time_ex;
  4887. localtime_s(&local_time, &reader->lost_time);
  4888. localtime_s(&local_time_ex, &reader->rec_time);
  4889. strftime(_time, 30, "%Y-%m-%d %H:%M:%S", &local_time);
  4890. strftime(_time_ex, 30, "%Y-%m-%d %H:%M:%S", &local_time_ex);
  4891. switch(tag){
  4892. case ALARM_READER_LOST_START:
  4893. {
  4894. int alarm_type_id = ATID_READER;
  4895. sprintf_s(sql, LENGTH_SQL, "INSERT INTO his_alarm_reader(reader_id, alarm_type_id, start_time, rec_time) VALUES(%d, %d, '%s', '%s');",
  4896. reader->reader_id, alarm_type_id, _time, _time_ex);
  4897. break;
  4898. }
  4899. case ALARM_READER_LOST_END:
  4900. {
  4901. int alarm_type_id = ATID_READER;
  4902. sprintf_s(sql, LENGTH_SQL, "UPDATE his_alarm_reader set end_time='%s' where reader_id=%d and alarm_type_id=%d and start_time='%s';",
  4903. _time_ex, reader->reader_id, alarm_type_id, _time);
  4904. break;
  4905. }
  4906. default:
  4907. return;
  4908. }
  4909. execute_sql(sql);
  4910. }
  4911. void CYAServerDlg::execute_sql( const char* sql )
  4912. {
  4913. m_qsmSQL->AddString(sql);
  4914. }
  4915. /*
  4916. * 日志菜单设置
  4917. * 将日志菜单设置内容同步更新到主对话框中的相应变量
  4918. *
  4919. * param
  4920. * 无
  4921. *
  4922. * return
  4923. * 无
  4924. */
  4925. void CYAServerDlg::OnMenuLog()
  4926. {
  4927. CLogSetting dlg;
  4928. dlg.DoModal();
  4929. m_log_sys_status = dlg.m_log_sys_status;
  4930. m_log_raw_data = dlg.m_log_raw_data;
  4931. m_log_parse_data = dlg.m_log_parse_data;
  4932. m_log_recv_package = dlg.m_log_recv_package;
  4933. m_log_send_package = dlg.m_log_send_package;
  4934. m_log_locate_data = dlg.m_log_locate_data;
  4935. }
  4936. void CYAServerDlg::OnMenuParam()
  4937. {
  4938. CSysSetting dlg;
  4939. dlg.DoModal();
  4940. m_bUseFilter = dlg.m_use_filter;
  4941. if(m_bUseFilter){
  4942. m_nFilterType = FILTER_KALMAN;
  4943. }else{
  4944. m_nFilterType = NO_FILTER;
  4945. }
  4946. CardMap::iterator it = mp_card_list_all.begin();
  4947. for(it;it!=mp_card_list_all.end();it++){
  4948. it->second->m_nFilterType = m_nFilterType;
  4949. if(it->second->m_pKalmanFilter == NULL && m_nFilterType != NO_FILTER){
  4950. if(theApp.use_filter_odd){
  4951. std::string temp = it->second->card_id;
  4952. int a = atoi(temp.substr(temp.length() - 1 , 1).c_str());
  4953. if(0 == a%2){
  4954. it->second->EnableFilter(m_nFilterType);
  4955. }
  4956. }else{
  4957. it->second->EnableFilter(m_nFilterType);
  4958. }
  4959. }
  4960. }
  4961. }
  4962. void CYAServerDlg::OnLogin(string const& name, message::ptr const& data, bool isAck, message::list &ack_resp)
  4963. {
  4964. int res_code = (int)data->get_map()["code"]->get_int();
  4965. switch (res_code)
  4966. {
  4967. case -1: // 用户未登录
  4968. {
  4969. //ws_login();
  4970. is_websocket_login = false;
  4971. break;
  4972. }
  4973. case 0:
  4974. {
  4975. if("" == data->get_map()["code"]->get_string()){ // 登录成功
  4976. is_websocket_login = true;
  4977. }else{ // 退出登录
  4978. is_websocket_login = false;
  4979. }
  4980. break;
  4981. }
  4982. default:
  4983. break;
  4984. }
  4985. }
  4986. void CYAServerDlg::OnLoginCallBack( message::list const& msglist /*= nullptr*/ )
  4987. {
  4988. message::ptr msg_ptr = msglist[0];
  4989. int n = (int)msg_ptr->get_map()["code"]->get_int();
  4990. is_websocket_login = (0 == n) ? true : false;
  4991. }
  4992. void CYAServerDlg::send_call_info()
  4993. {
  4994. EnterCriticalSection(&m_csCallInfo);
  4995. BYTE buf[LENGTH_SEND_BUF];
  4996. SocketMap::iterator it_sock;
  4997. CallInfoReaderMap::iterator it_call_reader = mp_call_info.begin();
  4998. if(it_call_reader == mp_call_info.end()){
  4999. LeaveCriticalSection(&m_csCallInfo);
  5000. return;
  5001. }
  5002. if(!it_call_reader->second->is_start_call){
  5003. LeaveCriticalSection(&m_csCallInfo);
  5004. return;
  5005. }
  5006. for(; it_call_reader != mp_call_info.end(); ++it_call_reader){
  5007. it_sock = mp_socket_list.begin();
  5008. for(it_sock;it_sock!=mp_socket_list.end();++it_sock){
  5009. if(it_sock->second->reader_id == it_call_reader->first){
  5010. break;
  5011. }
  5012. }
  5013. if(it_sock != mp_socket_list.end()){
  5014. memset(buf, 0, LENGTH_SEND_BUF);
  5015. int npos = 0, card_count = 0;
  5016. //卡数
  5017. card_count = it_call_reader->second->cards_count;
  5018. memcpy(&buf[npos], &card_count, sizeof(BYTE));
  5019. npos += sizeof(BYTE);
  5020. //呼叫类型
  5021. memcpy(&buf[npos], &it_call_reader->second->call_type, sizeof(BYTE));
  5022. npos += sizeof(BYTE);
  5023. if(!it_call_reader->second->is_call_all){ // 定员呼叫,加入卡列表
  5024. //循环添加卡信息
  5025. CallInfoCardMap::iterator it_call_card = it_call_reader->second->mpCard.begin();
  5026. for(; it_call_card != it_call_reader->second->mpCard.end(); ++it_call_card){
  5027. //呼叫类型
  5028. memcpy(&buf[npos], &it_call_card->second->call_type, sizeof(BYTE));
  5029. npos += sizeof(BYTE);
  5030. //卡类型
  5031. memcpy(&buf[npos], &it_call_card->second->card_type, sizeof(BYTE));
  5032. npos += sizeof(BYTE);
  5033. //卡ID长度
  5034. BYTE id_len = (BYTE)get_card_id_len(it_call_card->second->card_type);
  5035. memcpy(&buf[npos], &id_len, sizeof(BYTE));
  5036. npos += sizeof(BYTE);
  5037. //卡ID
  5038. if(id_len > 1){ // 标准卡id为4个字节,自组网卡为1个字节
  5039. CFunctions::memcpyDWord(buf, it_call_card->second->card_id, npos);
  5040. }else{
  5041. memcpy(&buf[npos], &it_call_card->second->card_id, id_len);
  5042. }
  5043. npos += id_len;
  5044. }
  5045. memcpy(&buf[0], &card_count, sizeof(BYTE));
  5046. }
  5047. SendData(it_sock->second->dwConnID,CHAR_CALL, npos, buf);
  5048. }
  5049. }
  5050. LeaveCriticalSection(&m_csCallInfo);
  5051. }
  5052. void CYAServerDlg::clear_call_info()
  5053. {
  5054. EnterCriticalSection(&m_csCallInfo);
  5055. CallInfoReaderMap::iterator it_call_reader = mp_call_info.begin();
  5056. time_t current_time = time(NULL);
  5057. for(; it_call_reader != mp_call_info.end(); ++it_call_reader){
  5058. if(it_call_reader->second->is_call_all){
  5059. }else{
  5060. CallInfoCardMap::iterator it_call_card = it_call_reader->second->mpCard.begin();
  5061. for(; it_call_card != it_call_reader->second->mpCard.end();){
  5062. if(difftime(current_time, it_call_card->second->start_time) > it_call_card->second->time_out * 60 ){
  5063. it_call_reader->second->mpCard.erase(it_call_card++);
  5064. it_call_reader->second->is_start_call = false;
  5065. }
  5066. }
  5067. }
  5068. }
  5069. LeaveCriticalSection(&m_csCallInfo);
  5070. }
  5071. int CYAServerDlg::get_card_id_len( int card_type )
  5072. {
  5073. switch (card_type)
  5074. {
  5075. //case CT_PERSON:
  5076. // return 4;
  5077. //case CT_VEHICLE:
  5078. // return 4;
  5079. case CT_ADHOC:
  5080. return 1;
  5081. default:
  5082. return 4;
  5083. //break;
  5084. }
  5085. }
  5086. std::string CYAServerDlg::get_json_call_test()
  5087. {
  5088. Json::Value root;
  5089. Json::Value val_data;
  5090. Json::Value val_stations;
  5091. Json::Value val_station;
  5092. Json::Value val_cards;
  5093. Json::Value val_card;
  5094. char _time[STR_LEN_TIME];
  5095. struct tm local_time;
  5096. //TRACE(_T("time memcpy 7\n"));
  5097. time_t tt = time(NULL);
  5098. localtime_s(&local_time, &tt);
  5099. strftime(_time, STR_LEN_TIME, "%Y-%m-%d %H:%M:%S", &local_time);
  5100. val_data[JSON_KEY_CALL_CARD_CALL_TIME] = _time;
  5101. val_data[JSON_KEY_CALL_CARD_CALL_TYPE] = 0;
  5102. val_data[JSON_KEY_CALL_CARD_USER_NAME] = "aaaaaa";
  5103. val_data[JSON_KEY_CALL_CARD_CALL_TIME_OUT] = 5;
  5104. val_station[JSON_KEY_CALL_CARD_STATION_ID] = 233;
  5105. val_stations.append(val_station);
  5106. val_station[JSON_KEY_CALL_CARD_STATION_ID] = 59;
  5107. val_stations.append(val_station);
  5108. val_card[JSON_KEY_CALL_CARD_CARD_TYPE_ID] = 3;
  5109. val_card[JSON_KEY_CALL_CARD_CARD_ID] = 5;
  5110. val_cards.append(val_card);
  5111. val_card[JSON_KEY_CALL_CARD_CARD_TYPE_ID] = 3;
  5112. val_card[JSON_KEY_CALL_CARD_CARD_ID] = 8;
  5113. val_cards.append(val_card);
  5114. val_data[JSON_KEY_CALL_CARD_STATIONS] = val_stations;
  5115. val_data[JSON_KEY_CALL_CARD_CARDS] = val_cards;
  5116. root[JSON_ROOT_KEY_CMD] = JSON_CMD_VALUE_CALL_CARD_START;
  5117. root[JSON_ROOT_KEY_DATA] = val_data;
  5118. return root.toFastString();
  5119. }
  5120. void CYAServerDlg::init_base_data()
  5121. {
  5122. init_setting();
  5123. init_alarm_type();
  5124. init_dept();
  5125. init_map();
  5126. init_area();
  5127. init_reader();
  5128. init_antenna();
  5129. #ifdef ALGORITHM_TYPE_TOF
  5130. init_all_readers_coverage();
  5131. #elif defined ALGORITHM_TYPE_TDOA
  5132. init_tdoa_all_readers_coverage();
  5133. #endif
  5134. init_dev_adhoc();
  5135. init_antenna_sync();
  5136. init_card();
  5137. init_staffer();
  5138. init_vehicle();
  5139. init_adhoc();
  5140. }
  5141. void CYAServerDlg::load_his_data()
  5142. {
  5143. //load_his_down(); // 入井状态
  5144. //load_his_area(); // 所在区域
  5145. load_his_reader(); // 分站状态
  5146. load_his_card_postion(); // 所在位置
  5147. load_his_card_state();
  5148. deal_hist_card_postion();
  5149. }
  5150. void CYAServerDlg::load_his_down()
  5151. {
  5152. }
  5153. void CYAServerDlg::load_his_area()
  5154. {
  5155. CMysqlConn* pConn = NULL;
  5156. CDBConnGuard pDbGuard(pConn);
  5157. if(pConn == NULL){
  5158. return;
  5159. }
  5160. MYSQL_RES* pRes;
  5161. MYSQL_ROW pRow;
  5162. int err = 0;
  5163. char buf[LENGTH_SQL] = {0};
  5164. sprintf_s(buf, "select la.card_id, la.area_id, la.map_id, la.enter_time from his_location_area la \
  5165. where not exists(select 1 from his_location_area where card_id=la.card_id and enter_time> la.enter_time) \
  5166. and la.leave_time is null;");
  5167. pRes = pConn->Execute(buf, err);
  5168. int nRow = 0;
  5169. std::string enter_time;
  5170. while(pRow = mysql_fetch_row(pRes)){
  5171. CardMap::iterator it = mp_card_list_all.find(pRow[0]);
  5172. if(it != mp_card_list_all.end()){
  5173. it->second->area_id = atoi(pRow[1]);
  5174. it->second->map_id = atoi(pRow[2]);
  5175. enter_time = pRow[3];
  5176. API_StringToTime(enter_time, it->second->enter_area_time);
  5177. nRow++;
  5178. }
  5179. }
  5180. mysql_free_result(pRes);
  5181. CString strlog;
  5182. strlog.Format(_T("%s%d%s"), _T(LOG_LOAD_HIS_AREA), nRow, _T(LOG_RECORD_COUNT));
  5183. show_log(strlog);
  5184. }
  5185. void CYAServerDlg::load_his_card_postion()
  5186. {
  5187. CMysqlConn* pConn = NULL;
  5188. CDBConnGuard pDbGuard(pConn);
  5189. if(pConn == NULL){
  5190. return;
  5191. }
  5192. MYSQL_RES* pRes;
  5193. MYSQL_ROW pRow;
  5194. int err = 0;
  5195. char buf[LENGTH_SQL] = {0};
  5196. sprintf_s(buf, "select l.card_id, l.cur_time, l.x, l.y, l.z, la.map_id, la.area_id, la.enter_time, att.start_time \
  5197. from his_location l, (select card_id, max(cur_time) cur_time from his_location where cur_time >= date_sub(now(), interval 2 hour) group by card_id) lx, \
  5198. (select la.* from his_location_area la, (select card_id, max(enter_time) enter_time from his_location_area where leave_time is null group by card_id) lax \
  5199. where la.card_id = lax.card_id and la.enter_time = lax.enter_time and la.leave_time is null) la, \
  5200. (select att.* from rpt_attendance att, (select card_id, max(start_time) start_time from rpt_attendance where end_time is null group by card_id) attx \
  5201. where att.card_id = attx.card_id and att.start_time = attx. start_time and att.end_time is null) att \
  5202. where l.card_id = lx.card_id and l.cur_time = lx.cur_time \
  5203. and l.card_id = la.card_id and l.area_id = la.area_id and l.cur_time >= la.enter_time \
  5204. and l.card_id = att.card_id and l.cur_time >= att.start_time;");
  5205. //sprintf_s(buf, "select l.card_id, l.cur_time, l.x, l.y, l.z, la.map_id, la.area_id, la.enter_time, att.start_time \
  5206. // from his_location l \
  5207. // ,(select l.card_id, l.cur_time from his_location l where not exists(select 1 from his_location where card_id=l.card_id and cur_time>l.cur_time) and cur_time>= date_sub(now(), interval 2 hour)) lx \
  5208. // ,(select la.card_id, la.map_id, la.area_id, la.enter_time from his_location_area la where not exists(select 1 from his_location_area where card_id=la.card_id and enter_time > la.enter_time) and la.leave_time is null) la \
  5209. // ,(select att.card_id, att.start_time from rpt_attendance att where not exists(select 1 from rpt_attendance where card_id=att.card_id and start_time>att.start_time) and att.end_time is null) att \
  5210. // where l.cur_time >= date_sub(now(), interval 2 hour) and l.card_id = lx.card_id and l.cur_time = lx.cur_time \
  5211. // and l.card_id = la.card_id and l.area_id = la.area_id and l.cur_time >= la.enter_time \
  5212. // and l.card_id = att.card_id and l.cur_time >= att.start_time;");
  5213. //pRes = pConn->Execute(buf, err);
  5214. pRes = pConn->Execute(buf, err);
  5215. int nRow = 0;
  5216. std::string rec_time, enter_time, start_time;
  5217. while(pRow = mysql_fetch_row(pRes)){
  5218. CardMap::iterator it = mp_card_list_all.find(pRow[0]);
  5219. if(it != mp_card_list_all.end()){
  5220. rec_time = pRow[1];
  5221. API_StringToTime(rec_time, it->second->rec_time);
  5222. it->second->x = atof(pRow[2]);
  5223. it->second->y = atof(pRow[3]);
  5224. it->second->z = atof(pRow[4]);
  5225. it->second->last_x = it->second->x;
  5226. it->second->last_y = it->second->y;
  5227. it->second->last_z = it->second->z;
  5228. it->second->area_id = atoi(pRow[5]);
  5229. it->second->map_id = atoi(pRow[6]);
  5230. //it->second->map_scale =
  5231. enter_time = pRow[7];
  5232. API_StringToTime(enter_time, it->second->enter_area_time);
  5233. start_time = pRow[8];
  5234. API_StringToTime(start_time, it->second->down_time);
  5235. it->second->pos_state = DT_DOWN;
  5236. it->second->pos_state_old = DT_DOWN;
  5237. //it->second->deal_time = time(NULL);
  5238. it->second->is_hist = true;
  5239. it->second->isdealed = true;
  5240. it->second->issent = false;
  5241. nRow++;
  5242. //card_down_mine(it->second, true);
  5243. //card_enter_map(it->second, true);
  5244. //card_enter_area(it->second, true);
  5245. //if(it->second->card_type == CT_VEHICLE){
  5246. // mp_card_list_down_vehicle.insert(make_pair(it->second->card_id, it->second));
  5247. //}else if(it->second->card_type == CT_PERSON){
  5248. // mp_card_list_down_person.insert(make_pair(it->second->card_id, it->second));
  5249. //}
  5250. }
  5251. }
  5252. mysql_free_result(pRes);
  5253. CString strlog;
  5254. strlog.Format(_T("%s%d%s"), _T(LOG_LOAD_HIS_POSTION), nRow, _T(LOG_RECORD_COUNT));
  5255. show_log(strlog);
  5256. }
  5257. int CYAServerDlg::API_TimeToString( string &strDateStr,const time_t &timeData )
  5258. {
  5259. char chTmp[100] = {0};
  5260. memset(chTmp, 0, sizeof(chTmp));
  5261. struct tm *p = 0;
  5262. localtime_s(p, &timeData);
  5263. //p = localtime(&timeData);
  5264. p->tm_year = p->tm_year + 1900;
  5265. p->tm_mon = p->tm_mon + 1;
  5266. sprintf_s(chTmp,sizeof(chTmp),"%.4d-%.2d-%.2d %.2d:%.2d:%.2d",
  5267. p->tm_year, p->tm_mon, p->tm_mday,p->tm_hour,p->tm_min,p->tm_sec);
  5268. strDateStr = chTmp;
  5269. return 0;
  5270. }
  5271. int CYAServerDlg::API_StringToTime( const string &strDateStr,time_t &timeData )
  5272. {
  5273. char *pBeginPos = (char*) strDateStr.c_str();
  5274. char *pPos = strstr(pBeginPos,"-");
  5275. if(pPos == NULL){
  5276. //printf("strDateStr[%s] err /n", strDateStr.c_str());
  5277. return -1;
  5278. }
  5279. int iYear = atoi(pBeginPos);
  5280. int iMonth = atoi(pPos + 1);
  5281. pPos = strstr(pPos + 1,"-");
  5282. if(pPos == NULL){
  5283. //printf("strDateStr[%s] err /n", strDateStr.c_str());
  5284. return -1;
  5285. }
  5286. int iDay = atoi(pPos + 1);
  5287. int iHour=0;
  5288. int iMin=0;
  5289. int iSec=0;
  5290. pPos = strstr(pPos + 1," ");
  5291. //为了兼容有些没精确到时分秒的
  5292. if(pPos != NULL){
  5293. iHour=atoi(pPos + 1);
  5294. pPos = strstr(pPos + 1,":");
  5295. if(pPos != NULL){
  5296. iMin=atoi(pPos + 1);
  5297. pPos = strstr(pPos + 1,":");
  5298. if(pPos != NULL){
  5299. iSec=atoi(pPos + 1);
  5300. }
  5301. }
  5302. }
  5303. struct tm sourcedate;
  5304. memset((void*)&sourcedate, 0, sizeof(sourcedate));
  5305. sourcedate.tm_sec = iSec;
  5306. sourcedate.tm_min = iMin;
  5307. sourcedate.tm_hour = iHour;
  5308. sourcedate.tm_mday = iDay;
  5309. sourcedate.tm_mon = iMonth - 1;
  5310. sourcedate.tm_year = iYear - 1900;
  5311. timeData = mktime(&sourcedate);
  5312. return 0;
  5313. }
  5314. int CYAServerDlg::init_card( string card_id /*= ""*/ )
  5315. {
  5316. CMysqlConn* pConn = NULL;
  5317. CDBConnGuard pDbGuard(pConn);
  5318. if(pConn == NULL){
  5319. return 1;
  5320. }
  5321. MYSQL_RES* pRes;
  5322. MYSQL_ROW pRow;
  5323. int err = 0;
  5324. char buf[LENGTH_SQL] = {0};
  5325. if(card_id.length() == 0){
  5326. sprintf_s(buf, "select card_id, card_type_id, state, is_count, ident from dat_card where state = 0;");
  5327. }else{
  5328. sprintf_s(buf, "select card_id, card_type_id, state, is_count, ident from dat_card where state = 0 and card_id='%s';", card_id.c_str());
  5329. }
  5330. pRes = pConn->Execute(buf, err);
  5331. Card* pCard = NULL;
  5332. int nRow = 0;
  5333. while(pRow = mysql_fetch_row(pRes)){
  5334. CardMap::iterator it = mp_card_list_all.find(pRow[0]);
  5335. if(it != mp_card_list_all.end()){
  5336. pCard = it->second;
  5337. }else{
  5338. pCard = new Card(pRow[0], atoi(pRow[1]), theApp.z_offset);
  5339. #ifdef ALGORITHM_TYPE_TOF
  5340. pCard->set_reader_path(&mp_reader_path_list);
  5341. #elif defined ALGORITHM_TYPE_TDOA
  5342. pCard->set_reader_path(&mp_reader_path_list_tdoa);
  5343. #endif
  5344. mp_card_list_all.insert(make_pair(pCard->card_id, pCard));
  5345. nRow++;
  5346. if(m_bUseFilter){
  5347. if(theApp.use_filter_odd){
  5348. std::string temp = pRow[1];
  5349. int a = atoi(temp.substr(temp.length() - 1 , 1).c_str());
  5350. if(0 == a%2){
  5351. pCard->EnableFilter(m_nFilterType);
  5352. }
  5353. }else{
  5354. pCard->EnableFilter(m_nFilterType);
  5355. }
  5356. }
  5357. }
  5358. }
  5359. mysql_free_result(pRes);
  5360. CString strlog;
  5361. strlog.Format(_T("%s%d%s"), _T(LOG_INIT_CARD), nRow, _T(LOG_RECORD_COUNT));
  5362. show_log(strlog);
  5363. return 0;
  5364. }
  5365. void CYAServerDlg::card_up_mine( Card* card )
  5366. {
  5367. //card->up_time = card->deal_time;
  5368. card->up_time = CFunctions::systime_to_timet(card->deal_time);
  5369. store_data_card(card, RPT_ATTEND_UP);
  5370. if(CT_PERSON == card->card_type){
  5371. CardMap::iterator it_card = mp_card_list_down_person.find(card->card_id);
  5372. if(it_card != mp_card_list_down_person.end()){
  5373. mp_card_list_down_person.erase(it_card); // 从井下卡列表删除
  5374. }
  5375. if(mp_card_list_down_person.size() <= sls_setting.over_count_person && time_over_count_person >0){ // 取消报警
  5376. store_data_mine(ALARM_MINE_OVER_COUNT_PERSON_END);
  5377. time_over_count_person = 0;
  5378. }
  5379. }else if(CT_VEHICLE == card->card_type){
  5380. CardMap::iterator it_card = mp_card_list_down_vehicle.find(card->card_id);
  5381. if(it_card != mp_card_list_down_vehicle.end()){
  5382. //Card* card = it_card->second;
  5383. mp_card_list_down_vehicle.erase(it_card); // 从井下卡列表删除
  5384. if(card){
  5385. //delete card;
  5386. //card = NULL;
  5387. }
  5388. }
  5389. if(mp_card_list_down_vehicle.size() < sls_setting.over_count_vehicle && time_over_count_vehicle > 0){
  5390. store_data_mine(ALARM_MINE_OVER_COUNT_VEHICLE_END);
  5391. time_over_count_vehicle = 0;
  5392. }
  5393. }
  5394. DeptMap::iterator it_dept = mp_dept_list.find(card->dept_id);
  5395. if(it_dept != mp_dept_list.end()){
  5396. if(CT_PERSON == card->card_type){
  5397. CardMap::iterator it_card = it_dept->second->dept_card_list_person.find(card->card_id);
  5398. if(it_card != it_dept->second->dept_card_list_person.end()){
  5399. it_dept->second->dept_card_list_person.erase(it_card); // 从井下卡列表删除
  5400. }
  5401. store_data_card(card, ALARM_CARD_OVER_TIME_END);
  5402. deal_alarm_card(card, &mp_card_list_over_time_person, false, AF_CARD_OVER_TIME);
  5403. }else if(CT_VEHICLE == card->card_type){
  5404. CardMap::iterator it_card = it_dept->second->dept_card_list_vehicle.find(card->card_id);
  5405. if(it_card != it_dept->second->dept_card_list_vehicle.end()){
  5406. it_dept->second->dept_card_list_vehicle.erase(it_card); // 从井下卡列表删除
  5407. }
  5408. store_data_card(card, ALARM_CARD_OVER_TIME_END);
  5409. deal_alarm_card(card, &mp_card_list_over_time_vehicle, false, AF_CARD_OVER_TIME);
  5410. }
  5411. }
  5412. }
  5413. void CYAServerDlg::card_down_mine( Card* card )
  5414. {
  5415. //card->down_time = card->deal_time;
  5416. card->down_time = CFunctions::systime_to_timet(card->deal_time);
  5417. if(CT_PERSON == card->card_type){
  5418. CardMap::iterator it_card = mp_card_list_down_person.find(card->card_id);
  5419. if(it_card == mp_card_list_down_person.end()){
  5420. mp_card_list_down_person.insert(make_pair(card->card_id, card)); // 添加到井下卡列表
  5421. }
  5422. if(time_over_count_person == 0 && mp_card_list_down_person.size() > sls_setting.over_count_person){
  5423. //TRACE(_T("time memcpy 6\n"));
  5424. time_over_count_person = time(NULL);
  5425. store_data_mine(ALARM_MINE_OVER_COUNT_PERSON_START);
  5426. }
  5427. }else if(CT_VEHICLE == card->card_type){
  5428. CardMap::iterator it_card = mp_card_list_down_vehicle.find(card->card_id);
  5429. if(it_card == mp_card_list_down_vehicle.end()){
  5430. mp_card_list_down_vehicle.insert(make_pair(card->card_id, card)); // 添加到井下卡列表
  5431. }
  5432. //如果井下车辆总数超过系统设置的车辆阈值,则存储车辆超员告警信息
  5433. if(time_over_count_vehicle == 0 && mp_card_list_down_vehicle.size() > sls_setting.over_count_vehicle){
  5434. //TRACE(_T("time memcpy 5\n"));
  5435. time_over_count_vehicle = time(NULL);
  5436. store_data_mine(ALARM_MINE_OVER_COUNT_VEHICLE_START);
  5437. }
  5438. }
  5439. DeptMap::iterator it_dept = mp_dept_list.find(card->dept_id);
  5440. if(it_dept != mp_dept_list.end()){
  5441. if(CT_PERSON == card->card_type){
  5442. CardMap::iterator it_card = it_dept->second->dept_card_list_person.find(card->card_id);
  5443. if(it_card == it_dept->second->dept_card_list_person.end()){
  5444. it_dept->second->dept_card_list_person.insert(make_pair(card->card_id, card)); // 添加到井下卡列表
  5445. }
  5446. // 判断是否超员
  5447. }else if(CT_VEHICLE == card->card_type){
  5448. CardMap::iterator it_card = it_dept->second->dept_card_list_vehicle.find(card->card_id);
  5449. if(it_card == it_dept->second->dept_card_list_vehicle.end()){
  5450. it_dept->second->dept_card_list_vehicle.insert(make_pair(card->card_id, card)); // 添加到井下卡列表
  5451. }
  5452. // 判断是否超员
  5453. }
  5454. }
  5455. store_data_card(card, RPT_ATTEND_DOWN);
  5456. }
  5457. void CYAServerDlg::send_sync_reader()
  5458. {
  5459. time_t cur_time;
  5460. struct tm local;
  5461. int wlen = 0;
  5462. BYTE SendBuffer[LENGTH_SEND_BUF];
  5463. BYTE bt_tmp;
  5464. // 遍历发送数据
  5465. int nPos = 0;
  5466. SocketMap::iterator it_sock = mp_socket_list.begin();
  5467. for(; it_sock != mp_socket_list.end(); ++it_sock){
  5468. wlen = 0;
  5469. cur_time = time(NULL);
  5470. memset(SendBuffer, 0, LENGTH_SEND_BUF);
  5471. localtime_s(&local, &cur_time);
  5472. bt_tmp = local.tm_sec;
  5473. memcpy(&SendBuffer[wlen], &bt_tmp, sizeof(BYTE));
  5474. wlen += sizeof(BYTE);
  5475. bt_tmp = local.tm_min;
  5476. memcpy(&SendBuffer[wlen], &bt_tmp, sizeof(BYTE));
  5477. wlen += sizeof(BYTE);
  5478. bt_tmp = local.tm_hour;
  5479. memcpy(&SendBuffer[wlen], &bt_tmp, sizeof(BYTE));
  5480. wlen += sizeof(BYTE);
  5481. bt_tmp = local.tm_mday;
  5482. memcpy(&SendBuffer[wlen], &bt_tmp, sizeof(BYTE));
  5483. wlen += sizeof(BYTE);
  5484. bt_tmp = local.tm_wday;
  5485. memcpy(&SendBuffer[wlen], &bt_tmp, sizeof(BYTE));
  5486. wlen += sizeof(BYTE);
  5487. bt_tmp = local.tm_mon + 1;
  5488. memcpy(&SendBuffer[wlen], &bt_tmp, sizeof(BYTE));
  5489. wlen += sizeof(BYTE);
  5490. bt_tmp = (local.tm_year + 1900)%100;
  5491. memcpy(&SendBuffer[wlen], &bt_tmp, sizeof(BYTE));
  5492. wlen += sizeof(BYTE);
  5493. SendData(it_sock->second->dwConnID , CHAR_SYNC_TIME, wlen, SendBuffer);
  5494. Sleep(20);
  5495. TRACE(_T("dwConnID: %d"),it_sock->second->dwConnID);
  5496. }
  5497. }
  5498. void CYAServerDlg::send_call_his_data()
  5499. {
  5500. if(g_is_rec_hist){
  5501. if(MessageBox(_T("正在接受收历史数据,请稍后再试"), _T("接收历史数据"), MB_OK) == IDOK){
  5502. return;
  5503. }
  5504. }
  5505. if (MessageBox(_T("确定要接收历史数据吗?"), _T("接收历史数据"), MB_OKCANCEL) != IDOK){
  5506. return;
  5507. }
  5508. UpdateData(FALSE);
  5509. bool bExit = false;
  5510. SocketMap::iterator it_sock = mp_socket_list.begin();
  5511. for(; it_sock != mp_socket_list.end(); ++it_sock){
  5512. if(it_sock->second->reader_id == m_reader_id_hist){
  5513. int wlen = 0;
  5514. WORD wchr = CHAR_LOCATEDATAHIS_TDOA;
  5515. BYTE SendBuffer[LENGTH_SEND_BUF];
  5516. memset(SendBuffer, 0, LENGTH_SEND_BUF);
  5517. SendData(it_sock->second->dwConnID, wchr, wlen, SendBuffer);
  5518. bExit = true;
  5519. break;
  5520. }
  5521. }
  5522. if(!bExit){
  5523. //if (MessageBox(_T("此分站未连接"), _T("请求历史数据"), MB_OK) == IDOK){
  5524. //
  5525. //}
  5526. }
  5527. }
  5528. void CYAServerDlg::OnBnCallHisData()
  5529. {
  5530. send_call_his_data();
  5531. }
  5532. void CYAServerDlg::deal_hist_card_postion()
  5533. {
  5534. CardMap::iterator it_card = mp_card_list_all.begin();
  5535. for(; it_card != mp_card_list_all.end(); ++it_card){
  5536. if(it_card->second->is_hist){
  5537. if(CT_VEHICLE == it_card->second->card_type){
  5538. MapInfoMap::iterator it_map = mp_map_list.find(it_card->second->map_id);
  5539. if(it_map != mp_map_list.end()){
  5540. it_map->second->map_card_list_vehicle.insert(make_pair(it_card->first, it_card->second));
  5541. it_card->second->map_scale = it_map->second->map_scale;
  5542. }
  5543. mp_card_list_down_vehicle.insert(make_pair(it_card->first, it_card->second));
  5544. AreaMap::iterator it_area = mp_area_list.find(it_card->second->area_id);
  5545. if(it_area != mp_area_list.end()){
  5546. it_area->second->area_card_list_vehicle.insert(make_pair(it_card->first, it_card->second));
  5547. if(0 == it_area->second->over_count_vehicle){
  5548. mp_card_list_forbidden_vehicle.insert(make_pair(it_card->first, it_card->second));
  5549. }
  5550. }
  5551. }else if(CT_PERSON == it_card->second->card_type){
  5552. MapInfoMap::iterator it_map = mp_map_list.find(it_card->second->map_id);
  5553. if(it_map != mp_map_list.end()){
  5554. it_map->second->map_card_list_person.insert(make_pair(it_card->first, it_card->second));
  5555. it_card->second->map_scale = it_map->second->map_scale;
  5556. }
  5557. mp_card_list_down_person.insert(make_pair(it_card->first, it_card->second));
  5558. AreaMap::iterator it_area = mp_area_list.find(it_card->second->area_id);
  5559. if(it_area != mp_area_list.end()){
  5560. it_area->second->area_card_list_person.insert(make_pair(it_card->first, it_card->second));
  5561. if(0 == it_area->second->over_count_person){
  5562. mp_card_list_forbidden_person.insert(make_pair(it_card->first, it_card->second));
  5563. }
  5564. }
  5565. }
  5566. }
  5567. }
  5568. }
  5569. void CYAServerDlg::deal_hist_card_alarm()
  5570. {
  5571. //CardMap mp_card_list_forbidden_vehicle;
  5572. //CardMap mp_card_list_over_time_vehicle;
  5573. //CardMap mp_card_list_over_speed_vehicle;
  5574. //CardMap mp_card_list_area_over_time_vehicle;
  5575. //CardMap mp_card_list_over_time_person; //
  5576. //CardMap mp_card_list_forbidden_person;
  5577. //CardMap mp_card_list_help;
  5578. //CardMap mp_card_list_area_over_time_person;
  5579. }
  5580. void CYAServerDlg::deal_hist_area()
  5581. {
  5582. //AreaMap mp_area_over_count_person;
  5583. //AreaMap mp_area_over_time_person;
  5584. //AreaMap mp_area_forbidden_person;
  5585. //AreaMap mp_area_over_count_vehicle;
  5586. //AreaMap mp_area_over_time_vehicle;
  5587. //AreaMap mp_area_forbidden_vehicle;
  5588. }
  5589. void CYAServerDlg::load_his_reader()
  5590. {
  5591. CMysqlConn* pConn = NULL;
  5592. CDBConnGuard pDbGuard(pConn);
  5593. if(pConn == NULL){
  5594. return;
  5595. }
  5596. MYSQL_RES* pRes;
  5597. MYSQL_ROW pRow;
  5598. int err = 0;
  5599. char buf[LENGTH_SQL] = {0};
  5600. sprintf_s(buf, "select ar.reader_id, ar.start_time, ar.rec_time from his_alarm_reader ar \
  5601. where not exists(select 1 from his_alarm_reader where reader_id=ar.reader_id and start_time> ar.start_time) \
  5602. and ar.end_time IS NULL;");
  5603. pRes = pConn->Execute(buf, err);
  5604. int nRow = 0;
  5605. std::string rec_time, lost_time;
  5606. while(pRow = mysql_fetch_row(pRes)){
  5607. ReaderMap::iterator it = mp_reader_list.find(atoi(pRow[0]));
  5608. if(it != mp_reader_list.end()){
  5609. lost_time = pRow[1];
  5610. rec_time = pRow[2];
  5611. API_StringToTime(rec_time, it->second->rec_time);
  5612. API_StringToTime(lost_time, it->second->lost_time);
  5613. it->second->state = STATUS_DEVICE_ERROR;
  5614. nRow++;
  5615. }
  5616. }
  5617. mysql_free_result(pRes);
  5618. CString strlog;
  5619. strlog.Format(_T("%s%d%s"), _T(LOG_LOAD_HIS_READER), nRow, _T(LOG_RECORD_COUNT));
  5620. show_log(strlog);
  5621. }
  5622. void CYAServerDlg::store_data_mine( int tag )
  5623. {
  5624. char sql[LENGTH_SQL] = {'\0'};
  5625. char _time[STR_LEN_TIME], _time_ex[STR_LEN_TIME];
  5626. //TRACE(_T("time memcpy 3\n"));
  5627. time_t cur_time = time(NULL);
  5628. struct tm local_time, local_time_ex;
  5629. switch(tag){
  5630. case ALARM_MINE_OVER_COUNT_PERSON_START:
  5631. {
  5632. localtime_s(&local_time, &time_over_count_person);
  5633. localtime_s(&local_time_ex, &cur_time);
  5634. strftime(_time, 30, "%Y-%m-%d %H:%M:%S", &local_time);
  5635. strftime(_time_ex, 30, "%Y-%m-%d %H:%M:%S", &local_time_ex);
  5636. int alarm_type_id = ATID_OVER_COUNT_PERSON;
  5637. sprintf_s(sql, LENGTH_SQL, "INSERT INTO his_alarm_info(alarm_type_id, start_time) VALUES(%d, '%s');",
  5638. alarm_type_id, _time);
  5639. break;
  5640. }
  5641. case ALARM_MINE_OVER_COUNT_PERSON_END:
  5642. {
  5643. localtime_s(&local_time, &time_over_count_person);
  5644. localtime_s(&local_time_ex, &cur_time);
  5645. strftime(_time, 30, "%Y-%m-%d %H:%M:%S", &local_time);
  5646. strftime(_time_ex, 30, "%Y-%m-%d %H:%M:%S", &local_time_ex);
  5647. int alarm_type_id = ATID_OVER_COUNT_PERSON;
  5648. sprintf_s(sql, LENGTH_SQL, "UPDATE his_alarm_info set end_time='%s' where alarm_type_id=%d and start_time='%s';",
  5649. _time_ex, alarm_type_id, _time);
  5650. break;
  5651. }
  5652. case ALARM_MINE_OVER_COUNT_VEHICLE_START:
  5653. {
  5654. localtime_s(&local_time, &time_over_count_vehicle);
  5655. localtime_s(&local_time_ex, &cur_time);
  5656. strftime(_time, 30, "%Y-%m-%d %H:%M:%S", &local_time);
  5657. strftime(_time_ex, 30, "%Y-%m-%d %H:%M:%S", &local_time_ex);
  5658. int alarm_type_id = ATID_OVER_COUNT_VEHICLE;
  5659. sprintf_s(sql, LENGTH_SQL, "INSERT INTO his_alarm_info(alarm_type_id, start_time) VALUES(%d, '%s');",
  5660. alarm_type_id, _time);
  5661. break;
  5662. }
  5663. case ALARM_MINE_OVER_COUNT_VEHICLE_END:
  5664. {
  5665. localtime_s(&local_time, &time_over_count_vehicle);
  5666. localtime_s(&local_time_ex, &cur_time);
  5667. strftime(_time, 30, "%Y-%m-%d %H:%M:%S", &local_time);
  5668. strftime(_time_ex, 30, "%Y-%m-%d %H:%M:%S", &local_time_ex);
  5669. int alarm_type_id = ATID_OVER_COUNT_VEHICLE;
  5670. sprintf_s(sql, LENGTH_SQL, "UPDATE his_alarm_info set end_time='%s' where alarm_type_id=%d and start_time='%s';",
  5671. _time_ex, alarm_type_id, _time);
  5672. break;
  5673. }
  5674. default:
  5675. return;
  5676. }
  5677. execute_sql(sql);
  5678. }
  5679. void CYAServerDlg::deal_card_state( Card* card )
  5680. {
  5681. // 电量
  5682. if(card->power_state == 0 && card->power_state_last != 0){
  5683. card->status_power = STATUS_NORMAL;
  5684. store_data_card(card, ALARM_CARD_LOW_POWER_END);
  5685. }
  5686. if(card->power_state_last == 0 && card->power_state != 0){
  5687. //card->low_power_time = card->deal_time;CFunctions::systime_to_timet(card->deal_time)
  5688. card->low_power_time = CFunctions::systime_to_timet(card->deal_time);
  5689. store_data_card(card, ALARM_CARD_LOW_POWER_START);
  5690. }
  5691. card->power_state_last = card->power_state;
  5692. }
  5693. void CYAServerDlg::load_his_card_state()
  5694. {
  5695. CMysqlConn* pConn = NULL;
  5696. CDBConnGuard pDbGuard(pConn);
  5697. if(pConn == NULL){
  5698. return ;
  5699. }
  5700. MYSQL_RES* pRes;
  5701. MYSQL_ROW pRow;
  5702. int err = 0;
  5703. char buf[LENGTH_SQL] = {0};
  5704. sprintf_s(buf, "select ac.card_id, ac.alarm_type_id, ac.start_time from his_alarm_card ac \
  5705. where not exists(select 1 from his_alarm_card where card_id=ac.card_id and alarm_type_id=ac.alarm_type_id and start_time> ac.start_time) \
  5706. and ac.end_time is NULL;");
  5707. pRes = pConn->Execute(buf, err);
  5708. int nRow = 0;
  5709. std::string start_time;
  5710. while(pRow = mysql_fetch_row(pRes)){
  5711. CardMap::iterator it = mp_card_list_all.find(pRow[0]);
  5712. if(it != mp_card_list_all.end()){
  5713. switch (atoi(pRow[1]))
  5714. {
  5715. case ATID_POWER:
  5716. it->second->power_state = 1;
  5717. it->second->power_state_last = 1;
  5718. it->second->status_power = STATUS_ERROR;
  5719. start_time = pRow[2];
  5720. API_StringToTime(start_time, it->second->low_power_time);
  5721. default:
  5722. break;
  5723. }
  5724. nRow++;
  5725. }
  5726. }
  5727. mysql_free_result(pRes);
  5728. CString strlog;
  5729. strlog.Format(_T("%s%d%s"), _T(LOG_LOAD_HIS_STATE), nRow, _T(LOG_RECORD_COUNT));
  5730. show_log(strlog);
  5731. }
  5732. EnHandleResult CYAServerDlg::OnPrepareListen( ITcpServer* pSender, SOCKET soListen )
  5733. {
  5734. TCHAR szAddress[40];
  5735. int iAddressLen = sizeof(szAddress) / sizeof(TCHAR);
  5736. USHORT usPort;
  5737. pSender->GetListenAddress(szAddress, iAddressLen, usPort);
  5738. //::PostOnPrepareListen(szAddress, usPort);
  5739. return HR_OK;
  5740. }
  5741. EnHandleResult CYAServerDlg::OnAccept( ITcpServer* pSender, CONNID dwConnID, SOCKET soClient )
  5742. {
  5743. BOOL bPass = TRUE;
  5744. TCHAR szAddress[40];
  5745. int iAddressLen = sizeof(szAddress) / sizeof(TCHAR);
  5746. USHORT usPort;
  5747. pSender->GetRemoteAddress(dwConnID, szAddress, iAddressLen, usPort);
  5748. //::PostOnAccept(dwConnID, szAddress, usPort, bPass);
  5749. return HR_OK;
  5750. }
  5751. EnHandleResult CYAServerDlg::OnSend( ITcpServer* pSender, CONNID dwConnID, const BYTE* pData, int iLength )
  5752. {
  5753. //::PostOnSend(dwConnID, pData, iLength);
  5754. return HR_OK;
  5755. }
  5756. EnHandleResult CYAServerDlg::OnReceive( ITcpServer* pSender, CONNID dwConnID, const BYTE* pData, int iLength )
  5757. {
  5758. TRACE(_T("OnReceive: %d, %d\n"), iLength, dwConnID);
  5759. DWORD dw = ::GetTickCount();
  5760. ParseData *data = NULL;
  5761. data = (ParseData*)malloc(sizeof(ParseData));
  5762. data->handle = this;
  5763. data->dwConnID = dwConnID;
  5764. data->len = iLength;
  5765. memset(data->buf, 0, LENGTH_MSG_4K);
  5766. //TRACE(_T("9 malloc \n"));
  5767. memcpy(data->buf, pData, iLength);
  5768. //TRACE(_T("m_nMalloctimes = %d \n"),++m_nMallocTimes);
  5769. QueueUserWorkItem(_parse_data_server, (LPVOID)data, WT_EXECUTEDEFAULT);
  5770. //parse_data_server(pData, iLength, dwConnID);
  5771. //TRACE(_T("parse_data_server: %d, %d, %d\r\n"), ::GetTickCount() - dw, dwConnID, iLength);
  5772. return HR_OK;
  5773. }
  5774. EnHandleResult CYAServerDlg::OnClose( ITcpServer* pSender, CONNID dwConnID, EnSocketOperation enOperation, int iErrorCode )
  5775. {
  5776. ::PostMessage(this->GetSafeHwnd(), WM_REMOVE_SOCKET, NULL, (LPARAM)dwConnID);
  5777. return HR_OK;
  5778. }
  5779. EnHandleResult CYAServerDlg::OnShutdown( ITcpServer* pSender )
  5780. {
  5781. return HR_OK;
  5782. }
  5783. _SOCK* CYAServerDlg::get_socket_by_count( DWORD dwConnID )
  5784. {
  5785. SocketMap::iterator _sock = mp_socket_list.begin();
  5786. for(; _sock != mp_socket_list.end(); ++_sock){
  5787. if(_sock->second->dwConnID == dwConnID){
  5788. return _sock->second;
  5789. }
  5790. }
  5791. return NULL;
  5792. }
  5793. afx_msg LRESULT CYAServerDlg::OnMsgRefreshIpList(WPARAM wParam, LPARAM lParam)
  5794. {
  5795. EnterCriticalSection(&m_csRefreshList);
  5796. m_listctrl_reader.SetRedraw(FALSE);
  5797. m_listctrl_reader.DeleteAllItems();
  5798. SocketMap::reverse_iterator it_sock = mp_socket_list.rbegin();
  5799. for(; it_sock != mp_socket_list.rend(); ++it_sock){
  5800. AddItem(it_sock->second->sip, it_sock->second->reader_id, it_sock->second->state);
  5801. }
  5802. m_listctrl_reader.SetRedraw(TRUE);
  5803. LeaveCriticalSection(&m_csRefreshList);
  5804. return 0;
  5805. }
  5806. void CYAServerDlg::parse_data_locate_card_his( BYTE* DataBuffer, int& nCurPos, int reader_id, DWORD wTickCount, CString strTime, unsigned short wChr)
  5807. {
  5808. // 按时间分组解析
  5809. // 组长度
  5810. WORD wframelen = 0;
  5811. CFunctions::getWord(DataBuffer, &wframelen, nCurPos);
  5812. nCurPos += sizeof(WORD);
  5813. int nframepos = nCurPos;
  5814. // 数据保存时间 7字节,年,月,周,日,时,分,秒
  5815. BYTE btSec = 0;
  5816. //TRACE(_T("10 \n"));
  5817. memcpy(&btSec, &DataBuffer[nCurPos], sizeof(BYTE));
  5818. nCurPos += sizeof(BYTE);
  5819. BYTE btMin = 0;
  5820. memcpy(&btMin, &DataBuffer[nCurPos], sizeof(BYTE));
  5821. nCurPos += sizeof(BYTE);
  5822. BYTE btHour = 0;
  5823. memcpy(&btHour, &DataBuffer[nCurPos], sizeof(BYTE));
  5824. nCurPos += sizeof(BYTE);
  5825. BYTE btDay = 0;
  5826. memcpy(&btDay, &DataBuffer[nCurPos], sizeof(BYTE));
  5827. nCurPos += sizeof(BYTE);
  5828. BYTE btWeek = 0;
  5829. memcpy(&btWeek, &DataBuffer[nCurPos], sizeof(BYTE));
  5830. nCurPos += sizeof(BYTE);
  5831. BYTE btMonth = 0;
  5832. memcpy(&btMonth, &DataBuffer[nCurPos], sizeof(BYTE));
  5833. nCurPos += sizeof(BYTE);
  5834. BYTE btYear = 0;
  5835. memcpy(&btYear, &DataBuffer[nCurPos], sizeof(BYTE));
  5836. nCurPos += sizeof(BYTE);
  5837. CString strhistime;
  5838. strhistime.Format(_T("20%.2d-%.2d-%.2d %.2d:%.2d:%.2d"), btYear%100, btMonth, btDay, btHour, btMin, btSec );
  5839. while(nCurPos - nframepos < wframelen){ // 一组数据
  5840. BYTE btCardType = 0;
  5841. memcpy(&btCardType, &DataBuffer[nCurPos], sizeof(BYTE));
  5842. nCurPos += sizeof(BYTE);
  5843. DWORD dwCardId = 0;
  5844. CFunctions::getDWord(DataBuffer, &dwCardId, nCurPos);
  5845. nCurPos += sizeof(DWORD);
  5846. string str_card_id = CFunctions::getstrwithzero(btCardType, 3) + CFunctions::getstrwithzero(dwCardId, 10);
  5847. Card* pCard = new Card(str_card_id, btCardType, theApp.z_offset);
  5848. pCard->reader_id = reader_id;
  5849. pCard->str_his_time = CFunctions::wc2c(strhistime);
  5850. pCard->reader_tickcount = wTickCount;
  5851. pCard->str_rec_time = CFunctions::wc2c(strTime);
  5852. //LONG64 l64cardid = btCardType;
  5853. //l64cardid <<= 32;
  5854. //l64cardid |= dwCardId;
  5855. switch(btCardType)
  5856. {
  5857. case CT_VEHICLE:
  5858. {
  5859. //报文时间
  5860. WORD wCardTickCount = 0;
  5861. CFunctions::getWord(DataBuffer, &wCardTickCount, nCurPos);
  5862. nCurPos += sizeof(WORD);
  5863. pCard->time_stamp = wCardTickCount;
  5864. BYTE btTypeAndPower = 0;
  5865. memcpy(&btTypeAndPower, &DataBuffer[nCurPos], sizeof(BYTE));
  5866. nCurPos += sizeof(BYTE);
  5867. //报文类型
  5868. BYTE btType = 0;
  5869. btType = (btTypeAndPower >>4) & 0x0F;
  5870. //电池电量
  5871. BYTE btPower = 0;
  5872. btPower = btTypeAndPower & 0x0F;
  5873. pCard->ranging_type = btType;
  5874. pCard->power_state = btPower;
  5875. //保留
  5876. nCurPos += sizeof(BYTE);
  5877. //加速度
  5878. BYTE btAcceleration = 0;
  5879. memcpy(&btAcceleration, &DataBuffer[nCurPos], sizeof(BYTE));
  5880. nCurPos += sizeof(BYTE);
  5881. pCard->accelerate_state = btAcceleration;
  5882. //定位时间戳Tsp // 字序
  5883. LONG64 lTime1 = 0;
  5884. BYTE btTemp = 0;
  5885. int nRangingPos = nCurPos;
  5886. memcpy(&btTemp, &DataBuffer[nCurPos], sizeof(BYTE));
  5887. nCurPos += sizeof(BYTE);
  5888. DWORD dwTemp = 0;
  5889. CFunctions::getDWord(DataBuffer, &dwTemp, nCurPos);
  5890. nCurPos += sizeof(DWORD);
  5891. lTime1 = btTemp;
  5892. lTime1 = lTime1 << 32;
  5893. lTime1 |= dwTemp;
  5894. pCard->flying_time = lTime1;
  5895. double dbldist = CFunctions::getDistance(lTime1);
  5896. pCard->distance = dbldist;
  5897. BYTE btAntenna = 0;
  5898. memcpy(&btAntenna, &DataBuffer[nCurPos], sizeof(BYTE));
  5899. nCurPos += sizeof(BYTE);
  5900. btAntenna = btAntenna & 0xFF;
  5901. pCard->antenna_id = btAntenna;
  5902. if(CHAR_LOCATEDATAHIS_TDOA == wChr ){
  5903. // 分站时间同步序列号
  5904. WORD wSyncNum = 0;
  5905. CFunctions::getWord(DataBuffer, &wSyncNum, nCurPos);
  5906. nCurPos += sizeof(WORD);
  5907. // 信号强度
  5908. WORD wStrength = 0;
  5909. CFunctions::getWord(DataBuffer, &wStrength, nCurPos);
  5910. nCurPos += sizeof(WORD);
  5911. }
  5912. break;
  5913. }
  5914. case CT_PERSON:
  5915. {
  5916. break;
  5917. }
  5918. default:
  5919. {
  5920. //strBuf.Format(_T("无法识别的卡类型:%d\r\n"), btCardType);
  5921. break;
  5922. }
  5923. }
  5924. store_data_card(pCard, HIS_RAW_DATA);
  5925. delete pCard;
  5926. pCard = NULL;
  5927. }
  5928. }
  5929. void CYAServerDlg::parse_data_locate_reader_his( BYTE * DataBuffer, int nLen, int& nCurPos, int& reader_id, int& nTick, CString& strtime, unsigned short wChr)
  5930. {
  5931. //CString strTime;
  5932. strtime.Format(_T("%s"), COleDateTime::GetCurrentTime().Format(_T("%Y-%m-%d %H:%M:%S")));
  5933. DWORD dwReaderID = 0;
  5934. CFunctions::getDWord(DataBuffer, &dwReaderID, nCurPos);
  5935. nCurPos += sizeof(DWORD);
  5936. WORD wTickCount = 0;
  5937. CFunctions::getWord(DataBuffer, &wTickCount, nCurPos);
  5938. nCurPos += sizeof(WORD);
  5939. }
  5940. void CYAServerDlg::parse_data_reader_synctime(BYTE *DataBuffer, int nLen, int& nCurPos)
  5941. {
  5942. while(nCurPos < nLen - sizeof(WORD)){
  5943. DWORD dwReaderID = 0; // 本机分站号
  5944. CFunctions::getDWord(DataBuffer, &dwReaderID, nCurPos);
  5945. nCurPos += sizeof(DWORD);
  5946. BYTE btAnt = 0; // 本机发送天线
  5947. //TRACE(_T("11 \n"));
  5948. memcpy(&btAnt, &DataBuffer[nCurPos], sizeof(BYTE));
  5949. nCurPos += sizeof(BYTE);
  5950. DWORD dwRootReaderID = 0; // root分站号
  5951. CFunctions::getDWord(DataBuffer, &dwRootReaderID, nCurPos);
  5952. nCurPos += sizeof(DWORD);
  5953. BYTE btRootAnt = 0; // root天线
  5954. memcpy(&btRootAnt, &DataBuffer[nCurPos], sizeof(BYTE));
  5955. nCurPos += sizeof(BYTE);
  5956. WORD wSyncNum = 0; // 序列号
  5957. CFunctions::getWord(DataBuffer, &wSyncNum, nCurPos);
  5958. nCurPos += sizeof(WORD);
  5959. WORD wSyncLevel = 0; // 同步等级
  5960. CFunctions::getWord(DataBuffer, &wSyncLevel, nCurPos);
  5961. nCurPos += sizeof(WORD);
  5962. LONG64 lTime1 = 0, lTime2 = 0;
  5963. BYTE btTemp = 0;
  5964. memcpy(&btTemp, &DataBuffer[nCurPos], sizeof(BYTE));
  5965. nCurPos += sizeof(BYTE);
  5966. DWORD dwTemp = 0;
  5967. CFunctions::getDWord(DataBuffer, &dwTemp, nCurPos);
  5968. nCurPos += sizeof(DWORD);
  5969. lTime1 = btTemp; // 本机发送时间戳
  5970. lTime1 = lTime1 << 32;
  5971. lTime1 |= dwTemp;
  5972. btTemp = 0;
  5973. dwTemp = 0;
  5974. memcpy(&btTemp, &DataBuffer[nCurPos], sizeof(BYTE));
  5975. nCurPos += sizeof(BYTE);
  5976. CFunctions::getDWord(DataBuffer, &dwTemp, nCurPos);
  5977. nCurPos += sizeof(DWORD);
  5978. lTime2 = btTemp; // 本机接收时间戳
  5979. lTime2 = lTime2 << 32;
  5980. lTime2 |= dwTemp;
  5981. /*CString strLog;
  5982. strLog.Format(_T("id1:%d, id2:%d, syncnum:%d, level:%d, send:%I64u, rec:%I64u"), dwReaderID, dwRootReaderID, wSyncNum, wSyncLevel, lTime1, lTime2);
  5983. writeErrorLog(_T("SYNC_S"), strLog, true);*/
  5984. HostServer::SyncTimeMsg msg;
  5985. msg.LocalIdCode(dwReaderID);
  5986. msg.LocalIdCode((msg.LocalIdCode() << 8) + btAnt);
  5987. msg.UpperIdCode(dwRootReaderID);
  5988. msg.UpperIdCode((msg.UpperIdCode() << 8) + btRootAnt);
  5989. msg.SyncNum(wSyncNum);
  5990. msg.SyncLevel(wSyncLevel);
  5991. msg.LocalStationSendTime(lTime1);
  5992. msg.LocalStationReceiveTime(lTime2);
  5993. syncmanager.analyzeSyncMsg(msg);
  5994. if(wSyncLevel == 0){
  5995. EnterCriticalSection(&m_csSyncTime);
  5996. umpRootSyncNum[dwReaderID] = wSyncNum;
  5997. LeaveCriticalSection(&m_csSyncTime);
  5998. }
  5999. ReaderMap::iterator it = mp_reader_list.find(dwReaderID);
  6000. if(it != mp_reader_list.end()){
  6001. it->second->sync_level = wSyncLevel;
  6002. }
  6003. if(m_log_parse_data){
  6004. CString strLog;
  6005. strLog.Format(_T("id1:%d, id2:%d, syncnum:%d, level:%d, send:%I64u, rec:%I64u"), dwReaderID, dwRootReaderID, wSyncNum, wSyncLevel, lTime1, lTime2);
  6006. writeErrorLog(_T("SYNC_S"), strLog, true);
  6007. //strLog = _T("");
  6008. strLog.Empty();
  6009. }
  6010. }
  6011. }
  6012. int CYAServerDlg::init_antenna_sync()
  6013. {
  6014. ReaderMap::iterator itReader = mp_reader_list.begin();
  6015. // 初始化数组,将分站添加到列表,只有一个天线
  6016. for(; itReader != mp_reader_list.end(); ++itReader){
  6017. syncmanager.updateAnchor(itReader->second->reader_id, 1,
  6018. itReader->second->ant[0]->antenna_x * itReader->second->map_scale,
  6019. itReader->second->ant[0]->antenna_y * itReader->second->map_scale,
  6020. itReader->second->ant[0]->antenna_z * itReader->second->map_scale);
  6021. }
  6022. // 根据坐标计算分站间距离
  6023. for (auto it = syncmanager._anchors.begin(); it != syncmanager._anchors.end(); it++)
  6024. {
  6025. for (auto it2 = syncmanager._anchors.begin(); it2 != syncmanager._anchors.end(); it2++)
  6026. {
  6027. if(it != it2)
  6028. {
  6029. double d = sqrt(pow((it->second.x - it2->second.x), 2)
  6030. + pow((it->second.y - it2->second.y), 2)
  6031. + pow((it->second.z - it2->second.z), 2)) * 10000 / (2.99702547 * 15.65);
  6032. syncmanager.updateDistance(it->first >>8, it->first & 0xFF, it2->first >> 8, it2->first & 0xFF,d);
  6033. }
  6034. }
  6035. }
  6036. return 0;
  6037. }
  6038. void CYAServerDlg::Test()
  6039. {
  6040. ReceiveDataMap pRdm;
  6041. pRdm.clear();
  6042. double dMapScale = 3.46;
  6043. /*_coordinate** cd = new _coordinate*[4];
  6044. cd[0] = NULL;
  6045. cd[1] = NULL;
  6046. cd[2] = NULL;
  6047. cd[3] = NULL;
  6048. _coordinate c1;
  6049. c1.tt = 448142133759;
  6050. cd[0] = &c1;
  6051. _coordinate c2;
  6052. c2.tt = 448142159656;
  6053. cd[1] = &c2;
  6054. _coordinate c3;
  6055. c3.tt = 448142221673;
  6056. cd[2] = &c3;
  6057. _coordinate c4;
  6058. c4.tt = 448142175733;
  6059. cd[3] = &c4;
  6060. //HeapSort(cd,4);
  6061. SelectSort(cd,4);*/
  6062. //34
  6063. ReceiveData* prd2 = new ReceiveData();
  6064. prd2->reader_id = 217;
  6065. prd2->antenna_id = 1;
  6066. prd2->rec_time_stamp = 777596169634;//283613853712;//
  6067. prd2->x = 210.1*dMapScale;
  6068. prd2->y = 449.5*dMapScale;
  6069. prd2->z = 0;
  6070. prd2->special = 1;
  6071. pRdm.insert(ReceiveDataMap::value_type(prd2->reader_id,*prd2));
  6072. //35
  6073. ReceiveData* prd3 = new ReceiveData();
  6074. prd3->reader_id = 218;
  6075. prd3->antenna_id = 1;
  6076. prd3->rec_time_stamp = 777596203395;//283613846609;
  6077. prd3->x = 164.0*dMapScale;
  6078. prd3->y = 449.5*dMapScale;
  6079. prd3->z = 0;
  6080. prd2->special = 0;
  6081. pRdm.insert(ReceiveDataMap::value_type(prd3->reader_id,*prd3));
  6082. //36
  6083. ReceiveData* prd1 = new ReceiveData();
  6084. prd1->reader_id = 216;
  6085. prd1->antenna_id = 1;
  6086. prd1->rec_time_stamp = 777596203705;//283613846791;
  6087. prd1->x = 242.8*dMapScale;
  6088. prd1->y = 449.5*dMapScale;
  6089. prd1->z = 0;
  6090. prd1->special = 0;
  6091. pRdm.insert(ReceiveDataMap::value_type(prd1->reader_id,*prd1));
  6092. ReceiveData* prd4 = new ReceiveData();
  6093. prd4->reader_id = 215;
  6094. prd4->antenna_id = 1;
  6095. prd4->rec_time_stamp = 777596242277;//283613846609;
  6096. prd4->x = 296.4*dMapScale;
  6097. prd4->y = 449.5*dMapScale;
  6098. prd4->z = 0;
  6099. pRdm.insert(ReceiveDataMap::value_type(prd4->reader_id,*prd4));
  6100. //ReceiveData* prd5 = new ReceiveData();
  6101. //prd5->reader_id = 214;
  6102. //prd5->antenna_id = 1;
  6103. //prd5->rec_time_stamp = 277993299781;//283613846609;
  6104. //prd5->x = 328.7*dMapScale;
  6105. //prd5->y = 449.5*dMapScale;
  6106. //prd5->z = 0;
  6107. //pRdm.insert(ReceiveDataMap::value_type(prd5->reader_id,*prd5));
  6108. //ReceiveData* prd5 = new ReceiveData();
  6109. //prd5->reader_id = 205;
  6110. //prd5->antenna_id = 1;
  6111. //prd5->rec_time_stamp = 630968206079;//283613846609;
  6112. //prd5->x = 804.000000*dMapScale;
  6113. //prd5->y = 449.500000*dMapScale;
  6114. //prd5->z = 0;
  6115. //pRdm.insert(ReceiveDataMap::value_type(prd5->reader_id,*prd5));
  6116. POS* p = NULL;
  6117. p = LocateAlgorithm::Pos(&pRdm,mp_reader_path_list_tdoa);
  6118. bool bRet = false;
  6119. bRet = LocateAlgorithm::CheckPosInValid(p,&pRdm,dMapScale);
  6120. if(bRet){
  6121. p->posx = INVALID_COORDINATE ;
  6122. p->posy = INVALID_COORDINATE ;
  6123. p->posz = -2 ;
  6124. }
  6125. double x = p->posx / dMapScale;
  6126. double y = p->posy / dMapScale;
  6127. }
  6128. void CYAServerDlg::release_memory()
  6129. {
  6130. //释放CYAServer中new的内存
  6131. if(theApp.m_path_monitor){
  6132. delete[] theApp.m_path_monitor;
  6133. theApp.m_path_monitor = NULL;
  6134. }
  6135. int nSize = 0;
  6136. //mp_area_list
  6137. release_area_memory();
  6138. //mp_map_list
  6139. release_map_memory();
  6140. //mp_card_list_all
  6141. release_card_memory();
  6142. //mp_reader_list
  6143. release_reader_memory();
  6144. //mp_dept_list
  6145. release_dept_memory();
  6146. if(m_qsmSQL){
  6147. delete m_qsmSQL;
  6148. m_qsmSQL = NULL;
  6149. }
  6150. }
  6151. void CYAServerDlg::release_area_memory()
  6152. {
  6153. if(mp_area_list.size() > 0){
  6154. AreaMap::iterator it = mp_area_list.begin();
  6155. for(;it!=mp_area_list.end();){
  6156. Area* tmp = (Area*)(it->second);
  6157. mp_area_list.erase(it);
  6158. if(tmp){
  6159. /*if(tmp->polygon){
  6160. delete[] tmp->polygon;
  6161. tmp->polygon = NULL;
  6162. }*/
  6163. delete tmp;
  6164. tmp = NULL;
  6165. }
  6166. it = mp_area_list.begin();
  6167. }
  6168. }
  6169. }
  6170. void CYAServerDlg::release_map_memory()
  6171. {
  6172. if(mp_map_list.size() > 0 ){
  6173. MapInfoMap::iterator it = mp_map_list.begin();
  6174. for(it;it!=mp_map_list.end();){
  6175. MapInfo* tmp = (MapInfo*)(it->second);
  6176. mp_map_list.erase(it);
  6177. if(tmp){
  6178. delete tmp;
  6179. tmp = NULL;
  6180. }
  6181. it = mp_map_list.begin();
  6182. }
  6183. }
  6184. }
  6185. void CYAServerDlg::release_card_memory()
  6186. {
  6187. if(mp_card_list_all.size()>0){
  6188. CardMap::iterator it = mp_card_list_all.begin();
  6189. for(;it!=mp_card_list_all.end();){
  6190. Card* tmp = (Card*)(it->second);
  6191. mp_card_list_all.erase(it);
  6192. if(tmp){
  6193. delete tmp;
  6194. tmp = NULL;
  6195. }
  6196. it = mp_card_list_all.begin();
  6197. }
  6198. }
  6199. }
  6200. void CYAServerDlg::release_reader_memory()
  6201. {
  6202. if(mp_reader_list.size() > 0 ){
  6203. ReaderMap::iterator it = mp_reader_list.begin();
  6204. for(;it!=mp_reader_list.end();){
  6205. Reader* tmp = (Reader*)(it->second);
  6206. mp_reader_list.erase(it);
  6207. if(tmp){
  6208. delete tmp;
  6209. tmp = NULL;
  6210. }
  6211. it = mp_reader_list.begin();
  6212. }
  6213. }
  6214. if(mp_reader_path_list_tdoa.size() > 0 ){
  6215. TDOAReaderPathMap::iterator it = mp_reader_path_list_tdoa.begin();
  6216. for(;it != mp_reader_path_list_tdoa.end();){
  6217. ReaderPathMap* tmpMap = (ReaderPathMap*)(it->second);
  6218. for(ReaderPathMap::iterator it_r = tmpMap->begin();it_r != tmpMap->end();){
  6219. ReaderPath* tmpPath = (ReaderPath* )(it_r->second);
  6220. tmpMap->erase(it_r);
  6221. if(tmpPath){
  6222. delete tmpPath;
  6223. tmpPath = NULL;
  6224. }
  6225. it_r = tmpMap->begin();
  6226. }
  6227. mp_reader_path_list_tdoa.erase(it);
  6228. if(tmpMap){
  6229. delete tmpMap;
  6230. tmpMap = NULL;
  6231. }
  6232. it = mp_reader_path_list_tdoa.begin();
  6233. }
  6234. }
  6235. }
  6236. /*
  6237. * 释放mp_dept_list中的new的内存
  6238. *
  6239. * param
  6240. * 无
  6241. *
  6242. * return
  6243. * 无
  6244. *
  6245. */
  6246. void CYAServerDlg::release_dept_memory()
  6247. {
  6248. if(mp_dept_list.size() > 0){
  6249. DeptMap::iterator it = mp_dept_list.begin();
  6250. for(it ;it != mp_dept_list.end();){
  6251. Dept* tmp = (Dept*)(it->second);
  6252. mp_dept_list.erase(it);
  6253. delete tmp;
  6254. tmp = NULL;
  6255. it = mp_dept_list.begin();
  6256. }
  6257. }
  6258. }
  6259. afx_msg LRESULT CYAServerDlg::OnWriteErrorLog(WPARAM wParam, LPARAM lParam)
  6260. {
  6261. LogMsg* pMsg = (LogMsg*)wParam;
  6262. CString strFile = pMsg->strFile;
  6263. bool bTime = pMsg->isNeedTime;
  6264. CString strErr = pMsg->strLog;
  6265. writeErrorLogEx(strFile, strErr, bTime);
  6266. strErr.Empty();
  6267. strFile.Empty();
  6268. delete pMsg;
  6269. return 0;
  6270. }
  6271. void CYAServerDlg::parse_data_server( const BYTE * pData, int nLen, DWORD dwConnId )
  6272. {
  6273. //TRACE(_T("in server \n"));
  6274. //改为拆成小包post
  6275. EnterCriticalSection(&m_csParseDataServer);
  6276. //TRACE(_T("in server cs \n"));
  6277. //if(m_log_raw_data){
  6278. // //CString strBuf;
  6279. // //formatByteArray(strBuf, (BYTE*)pData, nLen);
  6280. // //writeErrorLog(_T("RAW_SSSS"), strBuf, false);
  6281. //}
  6282. int read_length = 0;
  6283. int pkg_len = 0;
  6284. BYTE *Buf = new BYTE[LENGTH_MSG_1M];
  6285. if(Buf == NULL){
  6286. LeaveCriticalSection(&m_csParseDataServer);
  6287. return;
  6288. }
  6289. memset(Buf, 0, LENGTH_MSG_1M);
  6290. //TRACE(_T("12 \n"));
  6291. SocketBufferMap::iterator it = mp_socket_buffer_list.find(dwConnId);
  6292. if(it != mp_socket_buffer_list.end()){ // 有此socket数据
  6293. if(nLen + it->second->wReadLen > LENGTH_MSG_1M){
  6294. //_server->Disconnect(dwConnId); // 出现错误数据或者溢出,断开连接
  6295. //ASSERT(0);
  6296. LeaveCriticalSection(&m_csParseDataServer);
  6297. return ;
  6298. }
  6299. if(it->second->wReadLen > 0){
  6300. memcpy(Buf, it->second->pData, it->second->wReadLen);
  6301. }
  6302. memcpy(&Buf[it->second->wReadLen], pData, nLen);
  6303. it->second->wReadLen += nLen;
  6304. nLen = it->second->wReadLen;
  6305. // read_length = it->second->wReadLen + nLen;
  6306. }else{
  6307. memcpy(Buf, pData, nLen);
  6308. }
  6309. while (read_length < nLen){
  6310. pkg_len = MAKEWORD(Buf[read_length + 1], Buf[read_length]);
  6311. pkg_len += sizeof(WORD); // 长度
  6312. if(read_length + pkg_len > nLen){
  6313. break; // 有半个包,溢出,保留与下个包合并
  6314. }
  6315. //将完整包送出
  6316. ParseData *data = (ParseData*)malloc(sizeof(ParseData));
  6317. data->handle = this;
  6318. data->dwConnID = dwConnId;
  6319. data->len = pkg_len;
  6320. memset(data->buf, 0, LENGTH_MSG_4K);
  6321. //由于存在pkg_len大于LENGTH_MSG_4K的情况,导致memcpy出错的问题;
  6322. //原因猜测可能是第三方库缓存过大再发送过来的原因
  6323. if(pkg_len > LENGTH_MSG_4K){
  6324. //TRACE(_T("package is too long. \n"));
  6325. free(data);
  6326. data = NULL;
  6327. if(Buf){
  6328. delete[] Buf;
  6329. Buf = NULL;
  6330. }
  6331. LeaveCriticalSection(&m_csParseDataServer);
  6332. return;
  6333. }
  6334. memcpy(data->buf, &Buf[read_length], pkg_len);
  6335. QueueUserWorkItem(_parse_package_data, (LPVOID)data, WT_EXECUTEDEFAULT);
  6336. read_length += pkg_len;
  6337. //TRACE(_T("while 1: %d"),read_length);
  6338. }
  6339. if(read_length >= nLen){ //没剩下数据, 直接解析
  6340. if(it != mp_socket_buffer_list.end()){
  6341. it->second->wLen = 0;
  6342. it->second->wReadLen = 0;
  6343. it->second->dwConnID = dwConnId;
  6344. //memset(it->second->pData, 0, LENGTH_MSG_1M);
  6345. _SOCKET_BUFFER* pp = it->second;
  6346. mp_socket_buffer_list.erase(it);
  6347. free(pp);
  6348. //memset(pp, 0, sizeof(_SOCKET_BUFFER));
  6349. pp = NULL;
  6350. }
  6351. }else{ // 有剩余数据,保存起来
  6352. if(it != mp_socket_buffer_list.end()){
  6353. //it->second->wLen = pkg_len - sizeof(WORD);
  6354. try{
  6355. if(it->second->wReadLen > 0){
  6356. memset(&it->second->pData[it->second->wReadLen], 0, LENGTH_MSG_1M - it->second->wReadLen);
  6357. }
  6358. }catch(...){
  6359. int tt = it->second->wReadLen;
  6360. }
  6361. try{
  6362. //TRACE(_T("13 \n"));
  6363. memcpy(&it->second->pData[it->second->wReadLen], &Buf[read_length], nLen - read_length);
  6364. }catch(...){
  6365. int tt = it->second->wReadLen;
  6366. }
  6367. it->second->wReadLen += nLen - read_length;
  6368. }else{
  6369. _SOCKET_BUFFER* _sockbuf = (_SOCKET_BUFFER*)malloc(sizeof(_SOCKET_BUFFER));
  6370. _sockbuf->wReadLen = 0;
  6371. _sockbuf->dwConnID = dwConnId;
  6372. _sockbuf->wLen = pkg_len;
  6373. memset(_sockbuf->pData, 0, LENGTH_MSG_1M);
  6374. //TRACE("5\n");
  6375. //TRACE(_T("13_2 new socket_buffer\n"));
  6376. memcpy(_sockbuf->pData, &Buf[read_length], nLen - read_length);
  6377. _sockbuf->wReadLen += nLen - read_length;
  6378. mp_socket_buffer_list.insert(make_pair(dwConnId, _sockbuf));
  6379. }
  6380. }
  6381. delete[] Buf;
  6382. Buf = NULL;
  6383. //TRACE(_T("release memory \n"));
  6384. LeaveCriticalSection(&m_csParseDataServer);
  6385. //TRACE(_T("out server \n"));
  6386. }
  6387. void CYAServerDlg::parse_data_receive_package(BYTE *pData, int nLen, DWORD dwConnID )
  6388. {
  6389. //CString strBuf;
  6390. //formatByteArray(strBuf, (BYTE*)pData, nLen);
  6391. //writeErrorLog(_T("RAW_SSS"), strBuf, false);
  6392. int read_length = 0;
  6393. int pkg_len = 0;
  6394. BYTE* Buf = new BYTE[LENGTH_MSG_4K];
  6395. while (read_length < nLen){
  6396. pkg_len = MAKEWORD(pData[read_length + 1], pData[read_length]);
  6397. //TRACE(_T("14 read_length: %d; pkg_len: %d \n"),read_length,pkg_len);
  6398. if(Buf){
  6399. memset(Buf, 0, LENGTH_MSG_4K);
  6400. memcpy(Buf, &pData[read_length + sizeof(WORD)], pkg_len);
  6401. parse_package_data(Buf, pkg_len, dwConnID);
  6402. }
  6403. /*parse_data_receive(Buf, pkg_len, dwConnID);*/
  6404. read_length += pkg_len + sizeof(WORD);
  6405. //TRACE(_T("parse_data_receive_package : read_length: %d, nLen: %d \n"),read_length, nLen);
  6406. }
  6407. delete[] Buf;
  6408. Buf = NULL;
  6409. }
  6410. void CYAServerDlg::deal_card_msg( Card* card, bool is_hist /*= false*/ )
  6411. {
  6412. DWORD dw;
  6413. if(!is_hist){
  6414. if(card->card_type == CT_ADHOC){ // 此处不需处理,已经在解析时计算了坐标位置
  6415. }else if( LT_READER == theApp.locate_type){
  6416. card->x = card->p_reader->ant[card->antenna_id]->antenna_x;
  6417. card->y = card->p_reader->ant[card->antenna_id]->antenna_y;
  6418. card->z = card->p_reader->ant[card->antenna_id]->antenna_z;
  6419. card->a = card->p_reader->ant[card->antenna_id]->antenna_angle;
  6420. card->reader_id = card->p_reader->reader_id;
  6421. }else{
  6422. // 将距离加入到距离列表
  6423. _coordinate* dist = new _coordinate;
  6424. dist->t = card->time_stamp;
  6425. dist->x = card->p_reader->ant[card->antenna_id]->antenna_x;
  6426. dist->y = card->p_reader->ant[card->antenna_id]->antenna_y;
  6427. dist->z = card->p_reader->ant[card->antenna_id]->antenna_z;
  6428. dist->a = card->p_reader->ant[card->antenna_id]->antenna_angle;
  6429. dist->reader_id = card->p_reader->reader_id;
  6430. dist->antenna_id = card->antenna_id;
  6431. dist->d = card->distance;
  6432. dist->v = 0;
  6433. dist->d_offset = 0;
  6434. dist->special = card->p_reader->m_nIsSpecial;
  6435. dist->st = card->sync_num;
  6436. dist->acce_state = card->accelerate_state;
  6437. unsigned short root_sync_num = 0;
  6438. bool bUseAlgo = false;
  6439. if(umpRootSyncNum.size() > 0){
  6440. root_sync_num = umpRootSyncNum.begin()->second; // 单root可行,多root还要处理
  6441. if(root_sync_num >= dist->st){
  6442. if(root_sync_num - dist->st <= 5){
  6443. bUseAlgo = true;
  6444. }
  6445. }else{
  6446. if(dist->st - root_sync_num >= 65530){
  6447. bUseAlgo = true;
  6448. }
  6449. }
  6450. }
  6451. if(card->p_reader->sync_level == 0){
  6452. bUseAlgo = true;
  6453. }
  6454. if(bUseAlgo){
  6455. HostServer::TagMsg tagMsg;
  6456. tagMsg.ReceiveTime = card->flying_time;
  6457. tagMsg.StationIdCode = HostServer::SyncHelper::parseId((unsigned long long)card->reader_id, (unsigned long long)(card->antenna_id + 1));
  6458. tagMsg.SyncNum = card->sync_num;
  6459. if(card->p_reader->sync_level == 0){
  6460. dist->tt = card->flying_time;
  6461. }else{
  6462. dist->tt = syncmanager.calTimeByLinar(tagMsg);
  6463. }
  6464. EnterCriticalSection(&m_csAddDist);
  6465. card->is_deal_by_algo = false;
  6466. card->add_dist(dist);
  6467. LeaveCriticalSection(&m_csAddDist);
  6468. }
  6469. if(m_log_locate_data){
  6470. CString strLog = _T("");
  6471. wchar_t* p_card_id = CFunctions::c2wc(card->card_id.c_str());
  6472. strLog.Format(_T("r: %d-%d, t: %d, l:%d, tt: %I64u, ft: %I64u, x1: %f, y1: %f, z1: %f, ct: %d, cardid:%s"),
  6473. dist->reader_id, dist->antenna_id + 1, dist->st, card->p_reader->sync_level, dist->tt, card->flying_time, dist->x, dist->y, dist->z, dist->t, p_card_id/*CFunctions::c2wc(card->card_id.c_str())*/);
  6474. writeErrorLog(_T("DIST_S"), strLog, true);
  6475. //strLog = _T("");
  6476. strLog.ReleaseBuffer(strLog.GetLength());
  6477. strLog.Empty();
  6478. //此处和save_card_msg消息存在不一致
  6479. if(card->x != card->last_x || card->y != card->last_y){
  6480. card->last_x = card->x;
  6481. card->last_y = card->y;
  6482. card->last_z = card->z;
  6483. strLog.Format(_T("cardid:%s, cx: %f, cy: %f, cz: %f, clx: %f, cly: %f, v: %f, ct: %d"), p_card_id /*CFunctions::c2wc(card->card_id.c_str())*/, card->x, card->y, card->z, card->last_locate.x, card->last_locate.y, card->v, card->time_stamp_cal);
  6484. writeErrorLog(_T("DIST_S"), strLog, false);
  6485. strLog.Empty();
  6486. strLog = _T("");
  6487. strLog.Format(_T("%d,%f,%f,%f,%f,f: %f,s: %f,ct: %d, ov: %f,cv: %f,av: %f, lsn: %d,cardid: %s"),card->m_nCalcSyncNum,card->origin_locate.x,card->origin_locate.y,card->x, card->y,card->m_dFirstDiff,card->m_dSecondDiff,card->time_stamp_cal,card->origin_locate.v,card->v,card->last_locate.acceleration,card->m_nSyncNumInList,p_card_id);
  6488. writeErrorLog(_T("KALMAN_S"),strLog,false);
  6489. }else{
  6490. if(card->is_deal_by_algo){
  6491. strLog = _T("");
  6492. strLog.Format(_T("%d,%f,%f,%f,%f,f: %f,s: %f,ct: %d, ov: %f,cv: %f,av: %f, lsn: %d,cardid: %s"),card->m_nCalcSyncNum,card->origin_locate.x,card->origin_locate.y,card->x, card->y,card->m_dFirstDiff,card->m_dSecondDiff,card->time_stamp_cal,card->origin_locate.v,card->v,card->last_locate.acceleration,card->m_nSyncNumInList,p_card_id);
  6493. writeErrorLog(_T("KALMAN_S"),strLog,false);
  6494. card->is_deal_by_algo = false;
  6495. }
  6496. }
  6497. if(p_card_id){
  6498. free(p_card_id);
  6499. p_card_id = NULL;
  6500. }
  6501. }
  6502. }
  6503. }
  6504. if(LT_READER == theApp.locate_type){
  6505. //TRACE(_T("time memcpy 1\n"));
  6506. time_t cur_time = time(NULL);
  6507. time_t c_time = CFunctions::systime_to_timet(card->deal_time);
  6508. //if(difftime(cur_time, card->deal_time) <30){
  6509. if(difftime(cur_time, c_time) <30){
  6510. return ;
  6511. }
  6512. }
  6513. //TRACE(_T("time memcpy 2\n"));
  6514. //card->deal_time = time(NULL);
  6515. GetSystemTime(&card->deal_time);
  6516. dw = ::GetTickCount();
  6517. save_card_postion(card);
  6518. card_enter_map(card); // 切换地图
  6519. card_enter_area(card); //, card->deal_time);
  6520. deal_card_state(card);
  6521. card->isdealed = true;
  6522. if(LT_READER != theApp.locate_type){
  6523. card->issent = false;
  6524. }
  6525. }
  6526. afx_msg LRESULT CYAServerDlg::OnCardAddDist(WPARAM wParam, LPARAM lParam)
  6527. {
  6528. Card* card = (Card*)lParam;
  6529. _coordinate* dist = (_coordinate*)wParam;
  6530. HostServer::TagMsg tagMsg;
  6531. tagMsg.ReceiveTime = card->flying_time;
  6532. tagMsg.StationIdCode = HostServer::SyncHelper::parseId((unsigned long long)card->reader_id, (unsigned long long)(card->antenna_id + 1));
  6533. tagMsg.SyncNum = card->sync_num;
  6534. if(card->p_reader->sync_level == 0){
  6535. dist->tt = card->flying_time;
  6536. }else{
  6537. dist->tt = syncmanager.calTimeByLinar(tagMsg);
  6538. }
  6539. card->add_dist(dist);
  6540. if(m_log_locate_data){
  6541. CString strLog = _T("");
  6542. wchar_t* p_card_id = CFunctions::c2wc(card->card_id.c_str());
  6543. if(card->x != card->last_x || card->y != card->last_y){
  6544. card->last_x = card->x;
  6545. card->last_y = card->y;
  6546. card->last_z = card->z;
  6547. strLog.Format(_T("cardid:%s, cx: %f, cy: %f, cz: %f, clx: %f, cly: %f"), p_card_id/*CFunctions::c2wc(card->card_id.c_str())*/, card->x, card->y, card->z, card->last_x, card->last_y);
  6548. writeErrorLog(_T("DIST_S"), strLog, false);
  6549. //strLog = _T("");
  6550. strLog.Empty();
  6551. }
  6552. strLog.Format(_T("r: %d-%d, t: %d, l:%d, tt: %I64u, ft: %I64u, x1: %f, y1: %f, z1: %f, ct: %d, cardid:%s"),
  6553. dist->reader_id, dist->antenna_id + 1, card->sync_num, card->p_reader->sync_level, dist->tt, card->flying_time, dist->x, dist->y, dist->z,card->time_stamp, p_card_id /*CFunctions::c2wc(card->card_id.c_str())*/);
  6554. writeErrorLog(_T("DIST_S"), strLog, true);
  6555. //strLog = _T("");
  6556. strLog.Empty();
  6557. if(p_card_id){
  6558. free(p_card_id);
  6559. p_card_id = NULL;
  6560. }
  6561. }
  6562. return 0;
  6563. }
  6564. afx_msg LRESULT CYAServerDlg::OnRemoveSocket(WPARAM wParam, LPARAM lParam)
  6565. {
  6566. DWORD dwConnID = (DWORD)lParam;
  6567. remove_socket(dwConnID);
  6568. return 0;
  6569. }
  6570. void CYAServerDlg::writeErrorLogEx( const CString strFile, const CString strErr ,bool bTime /*= true*/ )
  6571. {
  6572. EnterCriticalSection(&m_csWriteLog);
  6573. if(openLogFile(strFile)){
  6574. CString strTempInfo;
  6575. if(bTime){
  6576. COleDateTime t = COleDateTime::GetCurrentTime();
  6577. strTempInfo.Format(_T("%s\r\n%s\r\n"), t.Format(_T("%H:%M:%S")), strErr);
  6578. }else{
  6579. strTempInfo.Format(_T("%s\r\n"), strErr);
  6580. }
  6581. TRY{
  6582. cfErrorLog.SeekToEnd();
  6583. char* old_locale = _strdup(setlocale(LC_CTYPE,NULL));
  6584. setlocale( LC_CTYPE, "chs" );//设定
  6585. cfErrorLog.WriteString(strTempInfo);
  6586. setlocale( LC_CTYPE, old_locale );
  6587. free( old_locale );//还原区域设定
  6588. }
  6589. CATCH(CFileException, e){
  6590. if(cfErrorLog.m_pStream)
  6591. cfErrorLog.Close();
  6592. }
  6593. END_CATCH
  6594. }
  6595. LeaveCriticalSection(&m_csWriteLog);
  6596. }
  6597. void CYAServerDlg::writeErrorLogEx( const char* strFile, const char* strErr ,bool bTime /*= true*/ )
  6598. {
  6599. EnterCriticalSection(&m_csWriteLog);
  6600. if(openLogFile(strFile)){
  6601. CString strTempInfo;
  6602. if(bTime){
  6603. COleDateTime t = COleDateTime::GetCurrentTime();
  6604. strTempInfo.Format(_T("%s\r\n"), t.Format(_T("%H:%M:%S")));
  6605. USES_CONVERSION;
  6606. CString tmp = A2T(strErr);
  6607. strTempInfo += tmp + _T("\r\n");
  6608. }else{
  6609. //strTempInfo.Format(_T("%S\r\n"), strErr);
  6610. USES_CONVERSION;
  6611. strTempInfo = A2T(strErr);
  6612. strTempInfo += _T("\r\n");
  6613. }
  6614. TRY{
  6615. cfErrorLog.SeekToEnd();
  6616. char* old_locale = _strdup(setlocale(LC_CTYPE,NULL));
  6617. setlocale( LC_CTYPE, "chs" );//设定
  6618. cfErrorLog.WriteString(strTempInfo);
  6619. setlocale( LC_CTYPE, old_locale );
  6620. free( old_locale );//还原区域设定
  6621. }
  6622. CATCH(CFileException, e){
  6623. if(cfErrorLog.m_pStream)
  6624. cfErrorLog.Close();
  6625. LeaveCriticalSection(&m_csWriteLog);
  6626. }
  6627. END_CATCH
  6628. }
  6629. LeaveCriticalSection(&m_csWriteLog);
  6630. }
  6631. void CYAServerDlg::init_queuestring()
  6632. {
  6633. m_qsmSQL = new QueueStrManager(50, 7500, _exec_sql);
  6634. //m_qsmSQL = new QueueStrManager(2, 200, _exec_sql);
  6635. }
  6636. void CYAServerDlg::SendData( DWORD dwConnID, WORD wCharacterWord, int wLength, BYTE* DataBuffer )
  6637. {
  6638. BYTE SendBuffer[LENGTH_MSG_2K];
  6639. WORD nlength = wLength + sizeof(WORD) + sizeof(WORD); //socket的数据长度 数据的长度(n) + 特征字(2) + 校验码(2)
  6640. memset(SendBuffer, 0, LENGTH_MSG_2K);
  6641. int nPos = 0;
  6642. CFunctions::memcpyWord(SendBuffer, nlength, nPos);//长度
  6643. nPos += sizeof(WORD);
  6644. CFunctions::memcpyWord(SendBuffer, wCharacterWord, nPos);
  6645. nPos += sizeof(WORD);
  6646. memcpy(&SendBuffer[nPos], &DataBuffer[0], wLength);
  6647. nPos += wLength;
  6648. WORD wCrc = CFunctions::getCRC(&SendBuffer[sizeof(WORD)], wLength + sizeof(WORD)); // 数据长度 + 特征字
  6649. CFunctions::memcpyWord(SendBuffer, wCrc, nPos);
  6650. nPos += sizeof(WORD);
  6651. _server.Send(dwConnID, &SendBuffer[0], nPos);
  6652. Sleep(20);
  6653. }
  6654. void CYAServerDlg::parse_data_locate_card_his_tdoa( BYTE* DataBuffer, int nLen, int reader_id, DWORD wTickCount, CString strTime)
  6655. {
  6656. // 按时间分组解析
  6657. // 组长度
  6658. int nCurPos = 0;
  6659. // 数据保存时间 7字节,年,月,周,日,时,分,秒
  6660. BYTE btSec = 0;
  6661. memcpy(&btSec, &DataBuffer[nCurPos], sizeof(BYTE));
  6662. nCurPos += sizeof(BYTE);
  6663. BYTE btMin = 0;
  6664. memcpy(&btMin, &DataBuffer[nCurPos], sizeof(BYTE));
  6665. nCurPos += sizeof(BYTE);
  6666. BYTE btHour = 0;
  6667. memcpy(&btHour, &DataBuffer[nCurPos], sizeof(BYTE));
  6668. nCurPos += sizeof(BYTE);
  6669. BYTE btDay = 0;
  6670. memcpy(&btDay, &DataBuffer[nCurPos], sizeof(BYTE));
  6671. nCurPos += sizeof(BYTE);
  6672. BYTE btWeek = 0;
  6673. memcpy(&btWeek, &DataBuffer[nCurPos], sizeof(BYTE));
  6674. nCurPos += sizeof(BYTE);
  6675. BYTE btMonth = 0;
  6676. memcpy(&btMonth, &DataBuffer[nCurPos], sizeof(BYTE));
  6677. nCurPos += sizeof(BYTE);
  6678. BYTE btYear = 0;
  6679. memcpy(&btYear, &DataBuffer[nCurPos], sizeof(BYTE));
  6680. nCurPos += sizeof(BYTE);
  6681. CString strhistime;
  6682. strhistime.Format(_T("20%.2d-%.2d-%.2d %.2d:%.2d:%.2d"), btYear%100, btMonth, btDay, btHour, btMin, btSec );
  6683. BYTE* bt = new BYTE[nLen];
  6684. while(nCurPos < nLen){ // 一组数据
  6685. // 一个数据包
  6686. WORD wPkgLen = 0;
  6687. CFunctions::getWord(DataBuffer, &wPkgLen, nCurPos);
  6688. nCurPos += sizeof(WORD);
  6689. if(bt){
  6690. memset(bt, 0, nLen);
  6691. memcpy(bt, &DataBuffer[nCurPos], wPkgLen);
  6692. parse_data_locate_card_his_tdoa_package(bt, wPkgLen, reader_id, wTickCount, strTime, strhistime);
  6693. }
  6694. nCurPos += wPkgLen;
  6695. }
  6696. delete[] bt;
  6697. }
  6698. void CYAServerDlg::parse_data_locate_card_his_tdoa_package( BYTE* DataBuffer, int nLen, int reader_id, DWORD wTickCount, CString strTime, CString strHistTime )
  6699. {
  6700. // 命令字
  6701. int nCurPos = 0;
  6702. WORD wChr = 0;
  6703. CFunctions::getWord(DataBuffer, &wChr, nCurPos);
  6704. nCurPos += sizeof(WORD);
  6705. BYTE* bt = new BYTE[LENGTH_RECORD_MAX];
  6706. if(NULL == bt){
  6707. return;
  6708. }
  6709. while(nCurPos < nLen){
  6710. switch (wChr)
  6711. {
  6712. case CHAR_LOCATEDATA:
  6713. {
  6714. memset(bt, 0, LENGTH_RECORD_MAX);
  6715. memcpy(bt, &DataBuffer[nCurPos], LENGTH_TOF_VEHICLE);
  6716. parse_data_locate_card_his_tof_card(bt, LENGTH_TOF_VEHICLE, reader_id, wTickCount, strTime, strHistTime);
  6717. nCurPos += LENGTH_TOF_VEHICLE;
  6718. break;
  6719. }
  6720. case CHAR_LOCATEDATA_TDOA:
  6721. {
  6722. memset(bt, 0, LENGTH_RECORD_MAX);
  6723. memcpy(bt, &DataBuffer[nCurPos], LENGTH_TDOA_VEHICLE);
  6724. parse_data_locate_card_his_tdoa_card(bt, LENGTH_TOF_VEHICLE, reader_id, wTickCount, strTime, strHistTime);
  6725. nCurPos += LENGTH_TDOA_VEHICLE;
  6726. break;
  6727. }
  6728. case CHAR_READER_SYNC_TIME:
  6729. {
  6730. memset(bt, 0, LENGTH_RECORD_MAX);
  6731. memcpy(bt, &DataBuffer[nCurPos], LENGTH_SYNC_TIME);
  6732. parse_data_locate_card_his_sync_time(bt, LENGTH_TOF_VEHICLE, strTime, strHistTime);
  6733. nCurPos += LENGTH_SYNC_TIME;
  6734. break;
  6735. }
  6736. default:
  6737. break;
  6738. }
  6739. }
  6740. delete[] bt;
  6741. }
  6742. void CYAServerDlg::parse_data_locate_card_his_tof_card( BYTE* DataBuffer, int nLen, int reader_id, DWORD wTickCount, CString strTime, CString strHistTime )
  6743. {
  6744. int nCurPos = 0;
  6745. BYTE btCardType = 0;
  6746. memcpy(&btCardType, &DataBuffer[nCurPos], sizeof(BYTE));
  6747. nCurPos += sizeof(BYTE);
  6748. DWORD dwCardId = 0;
  6749. CFunctions::getDWord(DataBuffer, &dwCardId, nCurPos);
  6750. nCurPos += sizeof(DWORD);
  6751. string str_card_id = CFunctions::getstrwithzero(btCardType, 3) + CFunctions::getstrwithzero(dwCardId, 10);
  6752. char sql[LENGTH_SQL] = {0};
  6753. bool b_exec = false;
  6754. switch(btCardType)
  6755. {
  6756. case CT_VEHICLE:
  6757. {
  6758. //报文时间
  6759. WORD wCardTickCount = 0;
  6760. CFunctions::getWord(DataBuffer, &wCardTickCount, nCurPos);
  6761. nCurPos += sizeof(WORD);
  6762. BYTE btTypeAndPower = 0;
  6763. memcpy(&btTypeAndPower, &DataBuffer[nCurPos], sizeof(BYTE));
  6764. nCurPos += sizeof(BYTE);
  6765. //报文类型
  6766. BYTE btType = 0;
  6767. btType = (btTypeAndPower >>4) & 0x0F;
  6768. //电池电量
  6769. BYTE btPower = 0;
  6770. btPower = btTypeAndPower & 0x0F;
  6771. //保留
  6772. nCurPos += sizeof(BYTE);
  6773. //加速度
  6774. BYTE btAcceleration = 0;
  6775. memcpy(&btAcceleration, &DataBuffer[nCurPos], sizeof(BYTE));
  6776. nCurPos += sizeof(BYTE);
  6777. //定位时间戳Tsp // 字序
  6778. LONG64 lTime1 = 0;
  6779. BYTE btTemp = 0;
  6780. int nRangingPos = nCurPos;
  6781. memcpy(&btTemp, &DataBuffer[nCurPos], sizeof(BYTE));
  6782. nCurPos += sizeof(BYTE);
  6783. DWORD dwTemp = 0;
  6784. CFunctions::getDWord(DataBuffer, &dwTemp, nCurPos);
  6785. nCurPos += sizeof(DWORD);
  6786. lTime1 = btTemp;
  6787. lTime1 = lTime1 << 32;
  6788. lTime1 |= dwTemp;
  6789. double dbldist = CFunctions::getDistance(lTime1);
  6790. BYTE btAntenna = 0;
  6791. memcpy(&btAntenna, &DataBuffer[nCurPos], sizeof(BYTE));
  6792. nCurPos += sizeof(BYTE);
  6793. btAntenna = btAntenna & 0xFF;
  6794. b_exec = true;
  6795. sprintf_s(sql, LENGTH_SQL,
  6796. "INSERT INTO his_raw_data(card_id, reader_id, antenna_id, reader_stamp, card_stamp, \
  6797. fly_time, distance, ranging_type, power_state, accelerate, his_time, rec_time ) \
  6798. VALUES(%s, %d, %d, %d, %d, %lld, %4.f, %d, %d, %d, '%s', '%s');",
  6799. str_card_id.c_str(), reader_id, btAntenna, wTickCount, wCardTickCount, lTime1, dbldist, btType,
  6800. btPower,btAcceleration, CFunctions::wc2c(strHistTime), CFunctions::wc2c(strTime));
  6801. //if(CHAR_LOCATEDATAHIS_TDOA == wChr ){
  6802. // // 分站时间同步序列号
  6803. // WORD wSyncNum = 0;
  6804. // CFunctions::getWord(DataBuffer, &wSyncNum, nCurPos);
  6805. // nCurPos += sizeof(WORD);
  6806. // // 信号强度
  6807. // WORD wStrength = 0;
  6808. // CFunctions::getWord(DataBuffer, &wStrength, nCurPos);
  6809. // nCurPos += sizeof(WORD);
  6810. //}
  6811. break;
  6812. }
  6813. case CT_PERSON:
  6814. {
  6815. break;
  6816. }
  6817. default:
  6818. {
  6819. break;
  6820. }
  6821. }
  6822. try
  6823. {
  6824. if(b_exec){
  6825. execute_sql(sql);
  6826. }
  6827. }
  6828. catch (...)
  6829. {
  6830. CString str;
  6831. wchar_t* p = CFunctions::c2wc(sql);
  6832. str.Format(_T("%s\n"), p);
  6833. writeErrorLog(_T("SQL_S"), str);
  6834. str.Empty();
  6835. if(p){
  6836. free(p);
  6837. p = NULL;
  6838. }
  6839. }
  6840. }
  6841. void CYAServerDlg::parse_data_locate_card_his_tdoa_card( BYTE* DataBuffer, int nLen, int reader_id, DWORD wTickCount, CString strTime, CString strHistTime )
  6842. {
  6843. int nCurPos = 0;
  6844. BYTE btCardType = 0;
  6845. memcpy(&btCardType, &DataBuffer[nCurPos], sizeof(BYTE));
  6846. nCurPos += sizeof(BYTE);
  6847. DWORD dwCardId = 0;
  6848. CFunctions::getDWord(DataBuffer, &dwCardId, nCurPos);
  6849. nCurPos += sizeof(DWORD);
  6850. string str_card_id = CFunctions::getstrwithzero(btCardType, 3) + CFunctions::getstrwithzero(dwCardId, 10);
  6851. char sql[LENGTH_SQL] = {0};
  6852. bool b_exec = false;
  6853. switch(btCardType)
  6854. {
  6855. case CT_VEHICLE:
  6856. {
  6857. //报文时间
  6858. WORD wCardTickCount = 0;
  6859. CFunctions::getWord(DataBuffer, &wCardTickCount, nCurPos);
  6860. nCurPos += sizeof(WORD);
  6861. BYTE btTypeAndPower = 0;
  6862. memcpy(&btTypeAndPower, &DataBuffer[nCurPos], sizeof(BYTE));
  6863. nCurPos += sizeof(BYTE);
  6864. //报文类型
  6865. BYTE btType = 0;
  6866. btType = (btTypeAndPower >>4) & 0x0F;
  6867. //电池电量
  6868. BYTE btPower = 0;
  6869. btPower = btTypeAndPower & 0x0F;
  6870. //保留
  6871. nCurPos += sizeof(BYTE);
  6872. //加速度
  6873. BYTE btAcceleration = 0;
  6874. memcpy(&btAcceleration, &DataBuffer[nCurPos], sizeof(BYTE));
  6875. nCurPos += sizeof(BYTE);
  6876. //定位时间戳Tsp // 字序
  6877. LONG64 lTime1 = 0;
  6878. BYTE btTemp = 0;
  6879. int nRangingPos = nCurPos;
  6880. memcpy(&btTemp, &DataBuffer[nCurPos], sizeof(BYTE));
  6881. nCurPos += sizeof(BYTE);
  6882. DWORD dwTemp = 0;
  6883. CFunctions::getDWord(DataBuffer, &dwTemp, nCurPos);
  6884. nCurPos += sizeof(DWORD);
  6885. lTime1 = btTemp;
  6886. lTime1 = lTime1 << 32;
  6887. lTime1 |= dwTemp;
  6888. double dbldist = 0;
  6889. BYTE btAntenna = 0;
  6890. memcpy(&btAntenna, &DataBuffer[nCurPos], sizeof(BYTE));
  6891. nCurPos += sizeof(BYTE);
  6892. btAntenna = btAntenna & 0xFF;
  6893. // 分站时间同步序列号
  6894. WORD wSyncNum = 0;
  6895. CFunctions::getWord(DataBuffer, &wSyncNum, nCurPos);
  6896. nCurPos += sizeof(WORD);
  6897. // 信号强度
  6898. WORD wStrength = 0;
  6899. CFunctions::getWord(DataBuffer, &wStrength, nCurPos);
  6900. nCurPos += sizeof(WORD);
  6901. double dblaccx, dblaccy, dblaccz;
  6902. dblaccx = dblaccy = dblaccz = 0;
  6903. b_exec = true;
  6904. sprintf_s(sql, LENGTH_SQL,
  6905. "INSERT INTO his_raw_data_tdoa(card_id, reader_id, antenna_id, reader_stamp, card_stamp, \
  6906. fly_time, distance, ranging_type, power_state, accelerate, his_time, rec_time, sync_num, strength, acc_x, acc_y, acc_z) \
  6907. VALUES(%s, %d, %d, %d, %d, %lld, %4.f, %d, %d, %d, '%s', '%s', %d, %d, %4.f, %4.f, %4.f);",
  6908. str_card_id.c_str(), reader_id, btAntenna, wTickCount, wCardTickCount, lTime1, dbldist, btType,
  6909. btPower,btAcceleration, CFunctions::wc2c(strHistTime), CFunctions::wc2c(strTime), wSyncNum, wStrength, dblaccx, dblaccy, dblaccz);
  6910. break;
  6911. }
  6912. case CT_PERSON:
  6913. {
  6914. break;
  6915. }
  6916. default:
  6917. {
  6918. break;
  6919. }
  6920. }
  6921. try
  6922. {
  6923. if(b_exec){
  6924. execute_sql(sql);
  6925. }
  6926. }
  6927. catch (...)
  6928. {
  6929. CString str;
  6930. wchar_t* p = CFunctions::c2wc(sql);
  6931. str.Format(_T("%s\n"), p);
  6932. writeErrorLog(_T("SQL_S"), str);
  6933. str.Empty();
  6934. if(p){
  6935. free(p);
  6936. p = NULL;
  6937. }
  6938. }
  6939. }
  6940. void CYAServerDlg::parse_data_locate_card_his_sync_time( BYTE* DataBuffer, int nLen, CString strTime, CString strHistTime )
  6941. {
  6942. char sql[LENGTH_SQL] = {0};
  6943. bool b_exec = false;
  6944. int nCurPos = 0;
  6945. DWORD dwReaderID = 0; // 本机分站号
  6946. CFunctions::getDWord(DataBuffer, &dwReaderID, nCurPos);
  6947. nCurPos += sizeof(DWORD);
  6948. BYTE btAnt = 0; // 本机发送天线
  6949. memcpy(&btAnt, &DataBuffer[nCurPos], sizeof(BYTE));
  6950. nCurPos += sizeof(BYTE);
  6951. DWORD dwRootReaderID = 0; // root分站号
  6952. CFunctions::getDWord(DataBuffer, &dwRootReaderID, nCurPos);
  6953. nCurPos += sizeof(DWORD);
  6954. BYTE btRootAnt = 0; // root天线
  6955. memcpy(&btRootAnt, &DataBuffer[nCurPos], sizeof(BYTE));
  6956. nCurPos += sizeof(BYTE);
  6957. WORD wSyncNum = 0; // 序列号
  6958. CFunctions::getWord(DataBuffer, &wSyncNum, nCurPos);
  6959. nCurPos += sizeof(WORD);
  6960. WORD wSyncLevel = 0; // 同步等级
  6961. CFunctions::getWord(DataBuffer, &wSyncLevel, nCurPos);
  6962. nCurPos += sizeof(WORD);
  6963. LONG64 lTime1 = 0, lTime2 = 0;
  6964. BYTE btTemp = 0;
  6965. memcpy(&btTemp, &DataBuffer[nCurPos], sizeof(BYTE));
  6966. nCurPos += sizeof(BYTE);
  6967. DWORD dwTemp = 0;
  6968. CFunctions::getDWord(DataBuffer, &dwTemp, nCurPos);
  6969. nCurPos += sizeof(DWORD);
  6970. lTime1 = btTemp; // 本机发送时间戳
  6971. lTime1 = lTime1 << 32;
  6972. lTime1 |= dwTemp;
  6973. btTemp = 0;
  6974. dwTemp = 0;
  6975. memcpy(&btTemp, &DataBuffer[nCurPos], sizeof(BYTE));
  6976. nCurPos += sizeof(BYTE);
  6977. CFunctions::getDWord(DataBuffer, &dwTemp, nCurPos);
  6978. nCurPos += sizeof(DWORD);
  6979. lTime2 = btTemp; // 本机接收时间戳
  6980. lTime2 = lTime2 << 32;
  6981. lTime2 |= dwTemp;
  6982. sprintf_s(sql, LENGTH_SQL,
  6983. "INSERT INTO his_raw_data_tdoa(reader_id, ant_id, parent_reader_id, parent_ant_id, sync_num, sync_level,\
  6984. send_timestamp, rec_timestamp, his_time, rec_time) \
  6985. VALUES(%d, %d, %d, %d, %d, %d, %lld, %lld, '%s', '%s');",
  6986. dwReaderID, btAnt, dwRootReaderID, btRootAnt, wSyncNum, wSyncLevel, lTime1, lTime2,
  6987. CFunctions::wc2c(strHistTime), CFunctions::wc2c(strTime));
  6988. try
  6989. {
  6990. execute_sql(sql);
  6991. }
  6992. catch (...)
  6993. {
  6994. CString str;
  6995. wchar_t* p = CFunctions::c2wc(sql);
  6996. str.Format(_T("%s\n"), p);
  6997. writeErrorLog(_T("SQL_S"), str);
  6998. str.Empty();
  6999. if(p){
  7000. free(p);
  7001. p = NULL;
  7002. }
  7003. }
  7004. }
  7005. void CYAServerDlg::OnEnUpdateEditReaderid()
  7006. {
  7007. // TODO: 如果该控件是 RICHEDIT 控件,它将不
  7008. // 发送此通知,除非重写 __super::OnInitDialog()
  7009. // 函数,以将 EM_SETEVENTMASK 消息发送到该控件,
  7010. // 同时将 ENM_UPDATE 标志“或”运算到 lParam 掩码中。
  7011. // TODO: 在此添加控件通知处理程序代码
  7012. UpdateData(TRUE);
  7013. }
  7014. void CYAServerDlg::parse_json_data_call_card_cancel(message::ptr const& data )
  7015. {
  7016. EnterCriticalSection(&m_csCallInfo);
  7017. CString strlog;
  7018. string call_id, user_name, call_time;
  7019. string cardid, readerid;
  7020. int call_time_out, reader_count, card_count;
  7021. map<string,message::ptr> data_map = data->get_map()[JSON_ROOT_KEY_DATA]->get_map();
  7022. /*if(m_log_recv_package){
  7023. string s_log = "";
  7024. AfxMessageBox(CFunctions::c2wc(s_log.c_str()));
  7025. writeErrorLog(_T("JSON_R"),CFunctions::c2wc(s_log.c_str()),false);
  7026. } */
  7027. call_id = data_map[JSON_KEY_CALL_CARD_CALL_ID]->get_string();
  7028. user_name = data_map[JSON_KEY_CALL_CARD_USER_NAME]->get_string();
  7029. call_time = data_map[JSON_KEY_CALL_CARD_CALL_TIME]->get_string();
  7030. vector<message::ptr> reader_vec = data_map[JSON_KEY_CALL_CARD_STATIONS]->get_vector();
  7031. vector<message::ptr> card_vec = data_map[JSON_KEY_CALL_CARD_CARDS]->get_vector();
  7032. if(reader_vec.size() == 0 && card_vec.size() == 0)
  7033. {
  7034. return;
  7035. }
  7036. int reader_id, npos;
  7037. SocketMap::iterator it_sock;
  7038. BYTE buf[LENGTH_SEND_BUF];
  7039. _call_info_reader* call_reader;
  7040. _call_info_card* call_card;
  7041. //取消呼叫有两种:
  7042. //从分站取消呼叫,即取消全员呼叫
  7043. //对指定卡取消呼叫
  7044. vector<message::ptr>::const_iterator it_reader = reader_vec.begin();
  7045. if(reader_vec.size() > 0){
  7046. for(; it_reader != reader_vec.end(); ++it_reader){
  7047. string s_reader_id = (*it_reader)->get_map()[JSON_KEY_CALL_CARD_STATION_ID]->get_string();
  7048. reader_id = atoi(s_reader_id.c_str());
  7049. CallInfoReaderMap::iterator it_call_reader = mp_call_info.find(reader_id);
  7050. if(it_call_reader != mp_call_info.end()){
  7051. call_reader = it_call_reader->second;
  7052. call_reader->is_start_call = false;
  7053. call_reader->is_call_all = false;
  7054. vector<message::ptr>::const_iterator it_card = card_vec.begin();
  7055. if(card_vec.size() == 0 || "" == (*it_card)->get_map()[JSON_KEY_CALL_CARD_CARD_ID]->get_string()){
  7056. if(call_reader->cards_count){
  7057. CallInfoCardMap::iterator it_reader_card = call_reader->mpCard.begin();
  7058. for(; it_reader_card != call_reader->mpCard.end();){
  7059. call_reader->mpCard.erase(++it_reader_card);
  7060. }
  7061. }
  7062. call_reader->mpCard.clear();
  7063. mp_call_info.erase(it_call_reader);
  7064. call_reader->cards_count = 0;
  7065. }else{
  7066. BYTE card_type = 0;
  7067. for(; it_card != card_vec.end(); ++it_card){
  7068. string s_card_id = (*it_card)->get_map()[JSON_KEY_CALL_CARD_CARD_ID]->get_string();
  7069. string s_card_type = (*it_card)->get_map()[JSON_KEY_CALL_CARD_CARD_TYPE_ID]->get_string();
  7070. CallInfoCardMap::iterator it_call_card = call_reader->mpCard.find(s_card_id);
  7071. if(it_call_card != call_reader->mpCard.end()){ // 已在呼叫列表
  7072. call_reader->mpCard.erase(it_call_card);
  7073. }
  7074. }
  7075. if(call_reader->mpCard.size() == 0){
  7076. call_reader->mpCard.clear();
  7077. mp_call_info.erase(it_call_reader);
  7078. }
  7079. }
  7080. call_reader->cards_count = 0;
  7081. }
  7082. }
  7083. }
  7084. it_reader = reader_vec.begin();
  7085. if(it_reader == reader_vec.end() && card_vec.size() > 0){
  7086. vector<message::ptr>::const_iterator it_card = card_vec.begin();
  7087. BYTE card_type = 0;
  7088. for(; it_card != card_vec.end(); ++it_card){
  7089. string s_card_id = (*it_card)->get_map()[JSON_KEY_CALL_CARD_CARD_ID]->get_string();
  7090. string s_card_type = (*it_card)->get_map()[JSON_KEY_CALL_CARD_CARD_TYPE_ID]->get_string();
  7091. int reader_id = mp_card_list_down_adhoc.find(s_card_id)->second->reader_id;
  7092. call_reader = mp_call_info.find(reader_id)->second;
  7093. call_reader->is_start_call = false;
  7094. CallInfoCardMap::iterator it_call_card = call_reader->mpCard.find(s_card_id);
  7095. if(it_call_card != call_reader->mpCard.end()){ // 已在呼叫列表
  7096. call_reader->mpCard.erase(it_call_card);
  7097. }
  7098. }
  7099. }
  7100. LeaveCriticalSection(&m_csCallInfo);
  7101. strlog.Format(_T("%s%s"), _T(LOG_CANCEL_CALL_CARD), _T(LOG_SUCCESS));
  7102. show_log(strlog);
  7103. }
  7104. void CYAServerDlg::OnAbout()
  7105. {
  7106. // TODO: 在此添加命令处理程序代码
  7107. CAboutDlg dlg;
  7108. dlg.DoModal();
  7109. }