Messages.cs 336 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Text;
  5. using System.Threading;
  6. using System.Xml;
  7. using System.Xml.Serialization;
  8. using System.IO;
  9. using System.Diagnostics;
  10. using System.Reflection;
  11. using System.Runtime.InteropServices;
  12. using System.Net;
  13. using System.Net.Sockets;
  14. using Wayne.FDCPOSLibrary;
  15. using Wayne.FDCPOSLibrary.Configuration;
  16. using System.Globalization;
  17. using System.Linq;
  18. using Microsoft.Extensions.Logging;
  19. using Microsoft.Extensions.DependencyInjection;
  20. using Edge.Core.IndustryStandardInterface.ATG;
  21. namespace Wayne.FDCPOSInterface
  22. {
  23. public class Heartbeat : IDisposable
  24. {
  25. private System.Threading.Timer heartbeatTimer = null;
  26. private System.Threading.Timer disconnectionTimer = null;
  27. public event EventHandler OnClientHeartbeatTimeout;
  28. public event EventHandler OnHeartbeatInterval;
  29. public readonly long ClientHeartbeatTimeout = 30000;
  30. public readonly long heartbeatInterval = 10000;
  31. public bool tryingConnect = false;
  32. public Heartbeat()
  33. {
  34. //heartbeatInterval = _heartbeatInterval;
  35. //heartbeatTimeout = _heartbeatTimeout;
  36. //string sHeartbeatTimeout = IniFile.IniReadValue(SINPConfigurazione.IniPath + "ForecourtServer.ini", "FUSION-Connection", "HeartbeatTimeout");
  37. //if (sHeartbeatTimeout.Length > 0)
  38. //{
  39. // try
  40. // {
  41. // heartbeatTimeout = Convert.ToInt32(sHeartbeatTimeout);
  42. // }
  43. // catch (Exception ex)
  44. // {
  45. // }
  46. //}
  47. //string sHeartbeatInterval = IniFile.IniReadValue(SINPConfigurazione.IniPath + "ForecourtServer.ini", "FUSION-Connection", "HeartbeatInterval");
  48. //if (sHeartbeatInterval.Length > 0)
  49. //{
  50. // try
  51. // {
  52. // heartbeatInterval = Convert.ToInt32(sHeartbeatInterval);
  53. // }
  54. // catch (Exception ex)
  55. // {
  56. // }
  57. //}
  58. ////FDCPOSManager.tracer.WriteLineIf(FDCPOSManager.tracer.CheckTraceLevel(1), string.Format("A heartbeat instance was created with heartbeatTimeout: {0}, heartbeatInterval: {1}", heartbeatTimeout, heartbeatInterval));
  59. }
  60. ~Heartbeat()
  61. {
  62. if (disconnectionTimer != null)
  63. disconnectionTimer.Dispose();
  64. disconnectionTimer = null;
  65. if (heartbeatTimer != null)
  66. heartbeatTimer.Dispose();
  67. heartbeatTimer = null;
  68. }
  69. ////Implement dispose to free resources
  70. public void Dispose()
  71. {
  72. if (disconnectionTimer != null)
  73. disconnectionTimer.Dispose();
  74. disconnectionTimer = null;
  75. if (heartbeatTimer != null)
  76. heartbeatTimer.Dispose();
  77. heartbeatTimer = null;
  78. }
  79. private void HeartbeatTimeout(Object state)
  80. {
  81. ////FDCPOSManager.tracer.WriteLineIf(FDCPOSManager.tracer.CheckTraceLevel(1), "Heartbeat Timeout, fire the event");
  82. OnClientHeartbeatTimeout.Invoke(this, null);
  83. }
  84. private void HeartbeatInterval(Object state)
  85. {
  86. OnHeartbeatInterval.Invoke(this, null);
  87. }
  88. public void ResetClientDisconnectionTimer()
  89. {
  90. StopClientDisconnectionTimer();
  91. StartClientDisconnectionTimer();
  92. }
  93. public void StopClientDisconnectionTimer()
  94. {
  95. if (ClientHeartbeatTimeout > 0)
  96. {
  97. ////FDCPOSManager.tracer.WriteLineIf(FDCPOSManager.tracer.CheckTraceLevel(4), string.Format("dispose Disconnection timer"));
  98. if (disconnectionTimer != null)
  99. disconnectionTimer.Dispose();
  100. disconnectionTimer = null;
  101. }
  102. }
  103. public void StartClientDisconnectionTimer()
  104. {
  105. if (ClientHeartbeatTimeout > 0)
  106. {
  107. ////FDCPOSManager.tracer.WriteLineIf(FDCPOSManager.tracer.CheckTraceLevel(4), string.Format("new Disconnection timer"));
  108. disconnectionTimer = new System.Threading.Timer(new System.Threading.TimerCallback(HeartbeatTimeout), this, ClientHeartbeatTimeout, System.Threading.Timeout.Infinite);
  109. }
  110. }
  111. public void RestartHeartbeatTimer()
  112. {
  113. // start sending heartbeat when receive logon and send
  114. if (heartbeatTimer != null)
  115. heartbeatTimer.Dispose();
  116. heartbeatTimer = null;
  117. if (heartbeatInterval > 0)
  118. heartbeatTimer = new System.Threading.Timer(new System.Threading.TimerCallback(HeartbeatInterval), this, heartbeatInterval, System.Threading.Timeout.Infinite);
  119. }
  120. public void NotifyDisconnection()
  121. {
  122. tryingConnect = true;
  123. //Restart();
  124. }
  125. }
  126. public class Messages
  127. {
  128. //protected static NLog.Logger fdcSocketLogger = NLog.LogManager.LoadConfiguration("nlog.config").GetLogger("FdcServerSocket");
  129. protected ILogger fdcSocketLogger;
  130. //= ServiceBuilder.Provider
  131. //.GetRequiredService<ILoggerFactory>().CreateLogger("FdcServerSocket");
  132. private MD5Crypter crypter = new MD5Crypter();
  133. public static bool bWholeConfiguration = true;
  134. protected FDCPOSManager fdcPosManager;
  135. protected Dictionary<string, ServiceResponse> serviceResponseClientList;
  136. public delegate void HeartbeatCallback(string workstationID, string applicationSender);
  137. bool traceXML = false;
  138. public Messages(FDCPOSManager _fdcposManager, ILogger logger)
  139. {
  140. this.fdcSocketLogger = logger;
  141. this.fdcPosManager = _fdcposManager;
  142. serviceResponseClientList = new Dictionary<string, ServiceResponse>();
  143. }
  144. private object sync_sendObj = new object();
  145. public void SendFDCMessage<T>(FDCPOSClient fdcPosClient, T msg)
  146. {
  147. string xmlBodyString = null;
  148. try
  149. {
  150. if (fdcPosClient == null)
  151. {
  152. fdcSocketLogger.LogInformation("SendFDCMessage, client is NULL!");
  153. ////FDCPOSManager.tracer.WriteLineIf(FDCPOSManager.tracer.CheckTraceLevel(1), string.Format("client is NULL!"));
  154. return;
  155. }
  156. if (!fdcPosClient.connected || !fdcPosClient.logon)
  157. {
  158. if (!fdcPosClient.connected)
  159. {
  160. fdcSocketLogger.LogInformation(string.Format("client '{0}' NOT connected, will not send msg to", fdcPosClient.sID));
  161. ////FDCPOSManager.tracer.WriteLineIf(FDCPOSManager.tracer.CheckTraceLevel(1), string.Format("client '{0}' NOT connected", fdcposClient.sID));
  162. }
  163. else if (!fdcPosClient.logon)
  164. {
  165. fdcSocketLogger.LogInformation(string.Format("client '{0}' NOT logon, will not send msg to", fdcPosClient.sID));
  166. ////FDCPOSManager.tracer.WriteLineIf(FDCPOSManager.tracer.CheckTraceLevel(1), string.Format("client '{0}' NOT logon", fdcposClient.sID));
  167. }
  168. return;
  169. }
  170. FDCPOSManager.messageIdCounter++;
  171. var result = FdcServerTcpHandler.SerializeFdcMessageToNetworkBytes(msg, this.fdcPosManager.encryptedHeader);
  172. xmlBodyString = result.Item2;
  173. if (result.Item1.Length >= 19999999)
  174. fdcSocketLogger.LogInformation("SendFDCMessage " + typeof(T).Name
  175. + ", rawBytes Length: " + result.Item1.Length + " excceed normal value, will send anyway");
  176. if (fdcSocketLogger.IsEnabled(LogLevel.Debug))
  177. fdcSocketLogger.LogDebug("Will Send Fdc Msg(full message include header bytes count: " + result.Item1.Length + "): "
  178. + msg.GetType().Name + ", content:\r\n"
  179. + result.Item2
  180. + "\r\n to client(wId: " + (fdcPosClient.workstationID ?? "")
  181. + ", appSender: " + (fdcPosClient.applicationSender ?? "") + ")");
  182. fdcPosClient.socketChannelUnsolicited.Client.Send(result.Item1);
  183. if (fdcSocketLogger.IsEnabled(LogLevel.Debug))
  184. fdcSocketLogger.LogDebug(" done send Fdc Msg: " + msg.GetType().Name + "");
  185. }
  186. catch (Exception ex)
  187. {
  188. fdcSocketLogger.LogError("SendFDCMessage to client(wId: " + (fdcPosClient.workstationID ?? "")
  189. + ", appSender: " + (fdcPosClient.applicationSender ?? "")
  190. + ", " + ((IPEndPoint)fdcPosClient.socketChannelUnsolicited.Client.RemoteEndPoint).ToString()
  191. + ") exceptioned, " +
  192. "\r\n FdcMessage: " + typeof(T).Name + ":" +
  193. "\r\n" + (xmlBodyString ?? "") +
  194. "\r\n exception detail: " + ex
  195. + System.Environment.NewLine + "Will disconnect this client and remove it from TcpClientList");
  196. fdcPosClient.Dispose();
  197. this.fdcPosManager.DisconnectClient(fdcPosClient);
  198. }
  199. }
  200. }
  201. public class ConfigurationMessages : Messages
  202. {
  203. public ConfigurationMessages(FDCPOSManager _fdcposManager, ILogger logger)
  204. : base(_fdcposManager, logger)
  205. {
  206. }
  207. //public void Start(int iIPPortConfig, bool encryptedHeader, string forecourtConfiguration, int version, bool useExtensions, string certificate)
  208. //{
  209. // if (((FDCPOSConfigurationManager)this.fdcposManager).respChannelConfigThreadObj != null && ((FDCPOSConfigurationManager)this.fdcposManager).respChannelConfigThreadObj.tcpListenerRunning)
  210. // return;
  211. // if (((FDCPOSConfigurationManager)fdcposManager) != null)
  212. // {
  213. // ((FDCPOSConfigurationManager)fdcposManager).encryptedHeader = encryptedHeader;
  214. // ((FDCPOSConfigurationManager)fdcposManager).forecourtConfiguration = forecourtConfiguration;
  215. // FDCGlobal.ProtocolVersion = (FDCVersion)version;
  216. // ((FDCPOSConfigurationManager)fdcposManager).useExtensions = useExtensions;
  217. // ((FDCPOSConfigurationManager)fdcposManager).certificate = certificate.ToUpper();
  218. // }
  219. // // run configuration reader listener if different from FDCPOS listener
  220. // ((FDCPOSConfigurationManager)fdcposManager).respChannelConfigThreadObj = new TCPListenerConfigThread(((FDCPOSConfigurationManager)fdcposManager), ((FDCPOSConfigurationManager)fdcposManager).configurationInterface, ((FDCPOSConfigurationManager)fdcposManager).socketChannelConfig, iIPPortConfig);
  221. // if (iIPPortConfig > 0 && iIPPortConfig != FDCPOSInterfaceServerManager.fdcposManager.respChannelAThreadObj.IPPort)
  222. // {
  223. // Thread respChannelConfigThread = new Thread(new ThreadStart(((FDCPOSConfigurationManager)fdcposManager).respChannelConfigThreadObj.TCPListenerThreadProc));
  224. // respChannelConfigThread.Start();
  225. // }
  226. // //else
  227. // // ((FDCPOSConfigurationManager)fdcposManager).respChannelConfigThreadObj = FDCPOSInterfaceServerManager.fdcposManager.respChannelAThreadObj;
  228. //}
  229. #region ServiceResponses
  230. public void ConfigResponse(string requestType, string workstationID, string applicationSender, int requestId, int status, string overallResult)
  231. {
  232. //FDCPOSManager.tracer.WriteLine(string.Format("init: workstationID={0}, applicationSender={1}, requestId={2}", workstationID, applicationSender, requestId));
  233. ServiceResponseConfig SvRes = new ServiceResponseConfig();
  234. SvRes.WorkstationID = workstationID;
  235. SvRes.ApplicationSender = applicationSender;
  236. SvRes.RequestType = requestType;
  237. SvRes.RequestID = requestId.ToString();
  238. SvRes.OverallResult = overallResult;
  239. ServiceResponseConfigFDCdata FDCDataElem = new ServiceResponseConfigFDCdata();
  240. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  241. FDCDataElem.FDCStatus = ((ErrorCode)status).ToString();
  242. ServiceResponseConfigFDCdata[] FDCDataArray = { FDCDataElem };
  243. SvRes.FDCdata = FDCDataArray;
  244. FDCPOSClient fdcposClient = null;
  245. if (fdcPosManager.fdcClientList.ContainsKey(FDCPOSClient.getClientID(workstationID, applicationSender)))
  246. fdcposClient = FDCPOSConfigurationManager.fdcposManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)];
  247. else
  248. fdcposClient = FDCPOSInterfaceServerManager.fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)];
  249. if (fdcposClient != null)
  250. ((FDCPOSConfigurationManager)fdcPosManager).respChannelConfigThreadObj.SendResponse<ServiceResponseConfig>(fdcposClient, SvRes);
  251. //else
  252. // FDCPOSManager.tracer.WriteLine("Client Undefined ! impossible to send Response!");
  253. //FDCPOSManager.tracer.WriteLine("end");
  254. }
  255. #endregion
  256. }
  257. public class FdcPosMessages : Messages
  258. {
  259. private ILogger logger;
  260. private FdcServerTcpHandler fdcServerTcpHandler;
  261. public FdcPosMessages(FDCPOSManager _fdcposManager, ILogger logger)
  262. : base(_fdcposManager, logger)
  263. {
  264. this.logger = logger;
  265. }
  266. public bool Start(int iIPPortA, bool encryptedHeader, string forecourtConfiguration, int version, bool useExtensions, string certificate)
  267. {
  268. //if (((FDCPOSInterfaceServerManager)this.fdcposManager).respChannelAThreadObj != null && ((FDCPOSInterfaceServerManager)this.fdcposManager).respChannelAThreadObj.tcpListenerRunning)
  269. // return;
  270. if (((FDCPOSInterfaceServerManager)fdcPosManager) != null)
  271. {
  272. ((FDCPOSInterfaceServerManager)fdcPosManager).encryptedHeader = encryptedHeader;
  273. ((FDCPOSInterfaceServerManager)fdcPosManager).forecourtConfiguration = forecourtConfiguration;
  274. FDCGlobal.ProtocolVersion = (FDCVersion)version;
  275. ((FDCPOSInterfaceServerManager)fdcPosManager).useExtensions = useExtensions;
  276. ((FDCPOSInterfaceServerManager)fdcPosManager).certificate = certificate.ToUpper();
  277. }
  278. // run request listener
  279. this.fdcServerTcpHandler =
  280. new FdcServerTcpHandler(fdcPosManager, iIPPortA, this.logger);
  281. fdcServerTcpHandler.FdcPosInterface = ((FDCPOSInterfaceServerManager)fdcPosManager).fdcPosInterface;
  282. ((FDCPOSInterfaceServerManager)fdcPosManager).FdcServerTcpHandler = fdcServerTcpHandler;
  283. return fdcServerTcpHandler.StartListening();
  284. }
  285. public bool Stop()
  286. {
  287. this.fdcServerTcpHandler?.Dispose();
  288. return true;
  289. }
  290. public void RemovePendingMessages(string clientID)
  291. {
  292. IDictionaryEnumerator srIndex = null;
  293. bool found = false;
  294. do
  295. {
  296. found = false;
  297. srIndex = serviceResponseClientList.GetEnumerator();
  298. while (srIndex.MoveNext())
  299. {
  300. string key = (string)(srIndex.Key);
  301. if (key.Contains(clientID))
  302. {
  303. serviceResponseClientList.Remove(key);
  304. //FDCPOSManager.tracer.WriteLine(string.Format("removed elem '{0}'", key));
  305. found = true;
  306. break;
  307. }
  308. }
  309. } while (found);
  310. }
  311. #region FDCMessages
  312. public void Heartbeat(string workstationID, string applicationSender)
  313. {
  314. //FDCPOSManager.tracer.WriteLineIf(FDCPOSManager.tracer.CheckTraceLevel(1), "init heartbeat for " + FDCPOSClient.getClientID(workstationID, applicationSender));
  315. int h = 0;
  316. if (h != 0)
  317. return;
  318. //Monitor.Enter(fdcposManager.tcpClientList);
  319. try
  320. {
  321. FDCMessageFDCHeartbeat heartbeatmsg = new FDCMessageFDCHeartbeat();
  322. heartbeatmsg.WorkstationID = workstationID;
  323. heartbeatmsg.ApplicationSender = applicationSender;
  324. heartbeatmsg.MessageID = FDCPOSManager.messageIdCounter.ToString();
  325. var clientId = FDCPOSClient.getClientID(workstationID, applicationSender);
  326. FDCPOSClient client = null;
  327. if (fdcPosManager.fdcClientList.TryGetValue(clientId, out client))
  328. {
  329. lock (client)
  330. SendFDCMessage<FDCMessageFDCHeartbeat>(client, heartbeatmsg);
  331. client?.heartbeat?.RestartHeartbeatTimer();
  332. }
  333. }
  334. catch (Exception ex)
  335. {
  336. this.logger.LogError("Notify to clients with Heartbeat exceptioned: " + ex);
  337. //FDCPOSManager.tracer.WriteLineIf(FDCPOSManager.tracer.CheckTraceLevel(1), "Exception for client id: " + FDCPOSClient.getClientID(workstationID, applicationSender) + ", " + ex.ToString());
  338. }
  339. finally
  340. {
  341. //Monitor.Exit(fdcposManager.tcpClientList);
  342. }
  343. //FDCPOSManager.tracer.WriteLineIf(FDCPOSManager.tracer.CheckTraceLevel(1), "end heartbeat for " + FDCPOSClient.getClientID(workstationID, applicationSender));
  344. }
  345. /// <summary>
  346. ///
  347. /// </summary>
  348. /// <param name="deviceType"></param>
  349. /// <param name="deviceId"></param>
  350. /// <param name="deviceState"></param>
  351. /// <param name="deviceSubState"></param>
  352. /// <param name="errorId"></param>
  353. /// <param name="errorDescription"></param>
  354. /// <param name="lockingAS"></param>
  355. /// <param name="nozzleListNum">how many nozzles in this pump</param>
  356. /// <param name="nozzleListState">binary map, 0000 0101 indicates 1st and 3rd nozzle are NozzleUp, others are NozzleDown</param>
  357. /// <param name="nozzleListLogicalState">binary map, 0000 1001 indicates 1st and 4th nozzle are Locked, others are Unlocked</param>
  358. /// <param name="nozzleListTankState"></param>
  359. public void DeviceStateChange(string deviceType, int deviceId, LogicalDeviceState deviceState,
  360. LogicalDeviceState deviceSubState, string errorId, string errorDescription, string lockingAS,
  361. int nozzleListNum, int nozzleListState, int nozzleListLogicalState, int nozzleListTankState)
  362. {
  363. string workstationID = "", applicationSender = "";
  364. //FDCPOSManager.tracer.WriteLine(string.Format("init: deviceType={0}, deviceId={1}, logicalState={2}, logicalSubState={3}", deviceType, deviceId, deviceState.ToString(), deviceSubState.ToString()));
  365. var safeCopy = new List<string>(fdcPosManager.fdcClientList.Keys.Select(k => k.ToString()).ToList());
  366. foreach (string sID in safeCopy)
  367. {
  368. try
  369. {
  370. //foreach (string sID in fdcposManager.tcpClientList.Keys)
  371. //{
  372. if (!fdcPosManager.fdcClientList[sID].connected || !fdcPosManager.fdcClientList[sID].logon)
  373. continue;
  374. workstationID = fdcPosManager.fdcClientList[sID].workstationID;
  375. applicationSender = fdcPosManager.fdcClientList[sID].applicationSender;
  376. FDCMessageDeviceStateChange devicesc = null;
  377. FDCMessageFPStateChange fpsc = null;
  378. FDCMessageTPStateChange tpsc = null;
  379. FDCMessagePPStateChange ppsc = null;
  380. if (FDCGlobal.ProtocolVersion < FDCVersion.V0007)
  381. {
  382. devicesc = new FDCMessageDeviceStateChange();
  383. devicesc.WorkstationID = workstationID;
  384. devicesc.ApplicationSender = applicationSender;
  385. devicesc.MessageID = FDCPOSManager.messageIdCounter.ToString();
  386. }
  387. else
  388. {
  389. if (deviceType == FDCPOSLibrary.DeviceType.DT_FuellingPoint || deviceType == FDCPOSLibrary.DeviceType.DT_FuelDispenser || deviceType == FDCPOSLibrary.DeviceType.DT_OutdoorPaymentTerminal)
  390. {
  391. fpsc = new FDCMessageFPStateChange();
  392. fpsc.WorkstationID = workstationID;
  393. fpsc.ApplicationSender = applicationSender;
  394. fpsc.MessageID = FDCPOSManager.messageIdCounter.ToString();
  395. }
  396. else if (deviceType == FDCPOSLibrary.DeviceType.DT_TankLevelGauge || deviceType == FDCPOSLibrary.DeviceType.DT_TankProbe)
  397. {
  398. tpsc = new FDCMessageTPStateChange();
  399. tpsc.WorkstationID = workstationID;
  400. tpsc.ApplicationSender = applicationSender;
  401. tpsc.MessageID = FDCPOSManager.messageIdCounter.ToString();
  402. }
  403. else if (deviceType == FDCPOSLibrary.DeviceType.DT_PricePole || deviceType == FDCPOSLibrary.DeviceType.DT_PricePolePoint)
  404. {
  405. ppsc = new FDCMessagePPStateChange();
  406. ppsc.WorkstationID = workstationID;
  407. ppsc.ApplicationSender = applicationSender;
  408. ppsc.MessageID = FDCPOSManager.messageIdCounter.ToString();
  409. }
  410. }
  411. FDCMessageFDCdataDeviceStateChange FDCDataElem = new FDCMessageFDCdataDeviceStateChange();
  412. FDCMessageDeviceClass fdcDeviceClassElem = new FDCMessageDeviceClass();
  413. fdcDeviceClassElem.DeviceID = Convert.ToString(deviceId);
  414. fdcDeviceClassElem.Type = deviceType; // Wayne.FDCPOSLibrary.DeviceType.DT_FuelDispenser;
  415. fdcDeviceClassElem.ErrorDescription = errorDescription;
  416. fdcDeviceClassElem.ErrorID = errorId;
  417. if (FDCGlobal.ProtocolVersion == FDCVersion.V0003)
  418. {
  419. fdcDeviceClassElem.LogicalState = deviceState.ToString();
  420. fdcDeviceClassElem.LogicalSubState = (deviceSubState == LogicalDeviceState.FDC_UNDEFINED) ? "" : deviceSubState.ToString();
  421. }
  422. else
  423. {
  424. fdcDeviceClassElem.DeviceState = deviceState.ToString();
  425. if (this.fdcPosManager.useExtensions)
  426. fdcDeviceClassElem.DeviceSubState = (deviceSubState == LogicalDeviceState.FDC_UNDEFINED) ? "" : deviceSubState.ToString();
  427. if (FDCGlobal.ProtocolVersion >= FDCVersion.V0007)
  428. {
  429. if (deviceType == FDCPOSLibrary.DeviceType.DT_FuellingPoint || deviceType == FDCPOSLibrary.DeviceType.DT_FuelDispenser || deviceType == FDCPOSLibrary.DeviceType.DT_OutdoorPaymentTerminal)
  430. {
  431. fdcDeviceClassElem.LockingApplicationSender = lockingAS;
  432. NozzleStateClass[] nsArray = null;
  433. NozzleState nozzleState;
  434. LogicalState nozzleLogicalState, nozzleTankState;
  435. int i;
  436. for (i = 0; i < nozzleListNum; i++)
  437. {
  438. Array.Resize<NozzleStateClass>(ref nsArray, (nsArray != null) ? nsArray.Length + 1 : 1);
  439. NozzleStateClass ns = new NozzleStateClass();
  440. nsArray[nsArray.Length - 1] = ns;
  441. ns.NozzleNo = Convert.ToString(i + 1);
  442. nozzleState = ((nozzleListState & ((int)(1 << i))) != 0) ? NozzleState.NozzleUp : NozzleState.NozzleDown;
  443. ns.LogicalNozzle = nozzleState.ToString();
  444. nozzleLogicalState = ((nozzleListLogicalState & ((int)(1 << i))) != 0) ? LogicalState.Locked : LogicalState.Unlocked;
  445. ns.LogicalState = nozzleLogicalState.ToString();
  446. nozzleTankState = ((nozzleListTankState & ((int)(1 << i))) != 0) ? LogicalState.Locked : LogicalState.Unlocked;
  447. ns.TankLogicalState = nozzleTankState.ToString();
  448. }
  449. fdcDeviceClassElem.Nozzle = nsArray;
  450. }
  451. else if (deviceType == FDCPOSLibrary.DeviceType.DT_TankLevelGauge || deviceType == FDCPOSLibrary.DeviceType.DT_TankProbe)
  452. {
  453. LogicalState tankLogicalState;
  454. LogicalTPStateClass logicalTPState = new LogicalTPStateClass();
  455. tankLogicalState = (nozzleListTankState != 0) ? LogicalState.Locked : LogicalState.Unlocked; //TODO...
  456. logicalTPState.TankLogicalState = tankLogicalState.ToString();
  457. fdcDeviceClassElem.LogicalTPState = logicalTPState;
  458. }
  459. }
  460. else if (FDCGlobal.ProtocolVersion == FDCVersion.V0005)
  461. {
  462. if (deviceType == FDCPOSLibrary.DeviceType.DT_FuellingPoint || deviceType == FDCPOSLibrary.DeviceType.DT_FuelDispenser)
  463. {
  464. FDCMessageNozzleStateDeviceStateChange[] nsArray = null;
  465. NozzleState nozzleState;
  466. LogicalState nozzleLogicalState, nozzleTankState;
  467. int i;
  468. ////FDCPOSManager.tracer.WriteLineIf(FDCPOSManager.tracer.CheckTraceLevel(4),
  469. //string.Format("nozzleListNum={0}, nozzleListState={1}, nozzleListLogicalState={2}", nozzleListNum, nozzleListState, nozzleListLogicalState));
  470. for (i = 0; i < nozzleListNum; i++)
  471. {
  472. Array.Resize<FDCMessageNozzleStateDeviceStateChange>(ref nsArray, (nsArray != null) ? nsArray.Length + 1 : 1);
  473. FDCMessageNozzleStateDeviceStateChange ns = new FDCMessageNozzleStateDeviceStateChange();
  474. nsArray[nsArray.Length - 1] = ns;
  475. nozzleState = ((nozzleListState & ((int)(1 << i))) != 0) ? NozzleState.NozzleUp : NozzleState.NozzleDown;
  476. switch (i)
  477. {
  478. case 0: ns.LogicalNozzle1 = nozzleState.ToString(); break;
  479. case 1: ns.LogicalNozzle2 = nozzleState.ToString(); break;
  480. case 2: ns.LogicalNozzle3 = nozzleState.ToString(); break;
  481. case 3: ns.LogicalNozzle4 = nozzleState.ToString(); break;
  482. case 4: ns.LogicalNozzle5 = nozzleState.ToString(); break;
  483. case 5: ns.LogicalNozzle6 = nozzleState.ToString(); break;
  484. case 6: ns.LogicalNozzle7 = nozzleState.ToString(); break;
  485. case 7: ns.LogicalNozzle8 = nozzleState.ToString(); break;
  486. default:
  487. break;
  488. }
  489. nozzleLogicalState = ((nozzleListLogicalState & ((int)(1 << i))) != 0) ? LogicalState.Locked : LogicalState.Unlocked;
  490. ns.LogicalState = nozzleLogicalState.ToString();
  491. ////FDCPOSManager.tracer.WriteLineIf(FDCPOSManager.tracer.CheckTraceLevel(4),
  492. // string.Format("i={0}, nozzleState={1}, nozzleLogicalState={2}, (int)(1 << i)={3}", i, nozzleState, nozzleLogicalState, (int)(1 << i)));
  493. }
  494. fdcDeviceClassElem.LogicalNozzleState = nsArray;
  495. }
  496. else if (deviceType == FDCPOSLibrary.DeviceType.DT_TankLevelGauge || deviceType == FDCPOSLibrary.DeviceType.DT_TankProbe)
  497. {
  498. FDCMessageLogicalTankStateDeviceStateChange logicalTankState = new FDCMessageLogicalTankStateDeviceStateChange();
  499. LogicalState tankLogicalState = (nozzleListTankState != 0) ? LogicalState.Locked : LogicalState.Unlocked;
  500. logicalTankState.LogicalState = tankLogicalState.ToString();
  501. fdcDeviceClassElem.LogicalTankState = logicalTankState;
  502. }
  503. }
  504. }
  505. FDCMessageDeviceClass[] fdcDeviceClassArray = { fdcDeviceClassElem };
  506. FDCDataElem.DeviceClass = fdcDeviceClassArray;
  507. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  508. FDCMessageFDCdataDeviceStateChange[] FDCDataArray = { FDCDataElem };
  509. if (FDCGlobal.ProtocolVersion < FDCVersion.V0007)
  510. {
  511. devicesc.FDCdata = FDCDataArray;
  512. ////FDCPOSManager.tracer.WriteLine(string.Format("sending workstationID={0}, applicationSender={1}", workstationID, applicationSender));
  513. lock (fdcPosManager.fdcClientList[sID])
  514. SendFDCMessage<FDCMessageDeviceStateChange>(fdcPosManager.fdcClientList[sID], devicesc);
  515. }
  516. else
  517. {
  518. if (deviceType == FDCPOSLibrary.DeviceType.DT_FuellingPoint || deviceType == FDCPOSLibrary.DeviceType.DT_FuelDispenser || deviceType == FDCPOSLibrary.DeviceType.DT_OutdoorPaymentTerminal)
  519. {
  520. fpsc.FDCdata = FDCDataArray;
  521. ////FDCPOSManager.tracer.WriteLine(string.Format("sending FPState workstationID={0}, applicationSender={1}", workstationID, applicationSender));
  522. lock (fdcPosManager.fdcClientList[sID])
  523. SendFDCMessage<FDCMessageFPStateChange>(fdcPosManager.fdcClientList[sID], fpsc);
  524. }
  525. else if (deviceType == FDCPOSLibrary.DeviceType.DT_TankLevelGauge || deviceType == FDCPOSLibrary.DeviceType.DT_TankProbe)
  526. {
  527. tpsc.FDCdata = FDCDataArray;
  528. ////FDCPOSManager.tracer.WriteLine(string.Format("sending TPState workstationID={0}, applicationSender={1}", workstationID, applicationSender));
  529. lock (fdcPosManager.fdcClientList[sID])
  530. SendFDCMessage<FDCMessageTPStateChange>(fdcPosManager.fdcClientList[sID], tpsc);
  531. }
  532. else if (deviceType == FDCPOSLibrary.DeviceType.DT_PricePole || deviceType == FDCPOSLibrary.DeviceType.DT_PricePolePoint)
  533. {
  534. ppsc.FDCdata = FDCDataArray;
  535. ////FDCPOSManager.tracer.WriteLine(string.Format("sending PPState workstationID={0}, applicationSender={1}", workstationID, applicationSender));
  536. lock (fdcPosManager.fdcClientList[sID])
  537. SendFDCMessage<FDCMessagePPStateChange>(fdcPosManager.fdcClientList[sID], ppsc);
  538. }
  539. // }
  540. }
  541. }
  542. catch (Exception ex)
  543. {
  544. //Messages.fdcSocketLogger.LogError("Notify to clients with exceptioned: " + ex);
  545. this.logger.LogError("Notify to client(" + sID + ") " +
  546. "with DeviceStateChange exceptioned: " + ex
  547. + System.Environment.NewLine + "Will skip it and continue");
  548. }
  549. finally
  550. {
  551. //Monitor.Exit(fdcposManager.tcpClientList);
  552. }
  553. }
  554. }
  555. public void FDCStop()
  556. {
  557. string workstationID = "", applicationSender = "";
  558. Monitor.Enter(fdcPosManager.fdcClientList);
  559. try
  560. {
  561. foreach (string sID in fdcPosManager.fdcClientList.Keys)
  562. {
  563. if (!fdcPosManager.fdcClientList[sID].connected || !fdcPosManager.fdcClientList[sID].logon)
  564. continue;
  565. workstationID = fdcPosManager.fdcClientList[sID].workstationID;
  566. applicationSender = fdcPosManager.fdcClientList[sID].applicationSender;
  567. FDCMessageStopped dsc = new FDCMessageStopped();
  568. dsc.WorkstationID = workstationID;
  569. dsc.ApplicationSender = applicationSender;
  570. dsc.MessageID = FDCPOSManager.messageIdCounter.ToString();
  571. SendFDCMessage<FDCMessageStopped>(fdcPosManager.fdcClientList[sID], dsc);
  572. }
  573. }
  574. catch (Exception ex)
  575. {
  576. ////FDCPOSManager.tracer.WriteLine("Exception! " + ex.Message + " - " + ex.StackTrace);
  577. }
  578. finally
  579. {
  580. Monitor.Exit(fdcPosManager.fdcClientList);
  581. }
  582. }
  583. public void FDCStart()
  584. {
  585. string workstationID = "", applicationSender = "";
  586. Monitor.Enter(fdcPosManager.fdcClientList);
  587. try
  588. {
  589. foreach (string sID in fdcPosManager.fdcClientList.Keys)
  590. {
  591. if (!fdcPosManager.fdcClientList[sID].connected || !fdcPosManager.fdcClientList[sID].logon)
  592. continue;
  593. workstationID = fdcPosManager.fdcClientList[sID].workstationID;
  594. applicationSender = fdcPosManager.fdcClientList[sID].applicationSender;
  595. FDCMessageStarted dsc = new FDCMessageStarted();
  596. dsc.WorkstationID = workstationID;
  597. dsc.ApplicationSender = applicationSender;
  598. dsc.MessageID = FDCPOSManager.messageIdCounter.ToString();
  599. SendFDCMessage<FDCMessageStarted>(fdcPosManager.fdcClientList[sID], dsc);
  600. }
  601. }
  602. catch (Exception ex)
  603. {
  604. ////FDCPOSManager.tracer.WriteLine("Exception! " + ex.Message + " - " + ex.StackTrace);
  605. }
  606. finally
  607. {
  608. Monitor.Exit(fdcPosManager.fdcClientList);
  609. }
  610. }
  611. //private int currentFuellingStatusOnCalling = 0;
  612. public void CurrentFuellingStatus(int deviceId, decimal volume, decimal amount, decimal price, int nozzle, int transactionId, string releaseToken, int mode, int productNo)
  613. {
  614. string workstationID = "", applicationSender = "";
  615. //if (0 == Interlocked.CompareExchange(ref this.currentFuellingStatusOnCalling, 1, 0))
  616. //{
  617. //Monitor.Enter(fdcposManager.tcpClientList);
  618. try
  619. {
  620. var safeCopy = new List<string>(fdcPosManager.fdcClientList.Keys.Select(k => k.ToString()).ToList());
  621. foreach (string sID in safeCopy)
  622. {
  623. try
  624. {
  625. if (!fdcPosManager.fdcClientList[sID].connected || !fdcPosManager.fdcClientList[sID].logon)
  626. continue;
  627. workstationID = fdcPosManager.fdcClientList[sID].workstationID;
  628. applicationSender = fdcPosManager.fdcClientList[sID].applicationSender;
  629. #region MyRegion
  630. FDCMessageCurrentFuellingStatus dsc = new FDCMessageCurrentFuellingStatus();
  631. dsc.WorkstationID = workstationID;
  632. dsc.ApplicationSender = applicationSender;
  633. dsc.MessageID = FDCPOSManager.messageIdCounter.ToString();
  634. FDCMessageFDCdataCurrentFuellingStatus FDCDataElem = new FDCMessageFDCdataCurrentFuellingStatus();
  635. FDCMessageDeviceClassCurrentFuellingStatus fdcDeviceClassElem = new FDCMessageDeviceClassCurrentFuellingStatus();
  636. fdcDeviceClassElem.DeviceID = Convert.ToString(deviceId);
  637. fdcDeviceClassElem.PumpNo = Convert.ToString(deviceId);
  638. fdcDeviceClassElem.Type = Wayne.FDCPOSLibrary.DeviceType.DT_FuellingPoint; // Wayne.FDCPOSLibrary.DeviceType.DT_FuelDispenser;
  639. if (FDCGlobal.ProtocolVersion == FDCVersion.V0003)
  640. {
  641. fdcDeviceClassElem.CurrentNozzleNo = Convert.ToString(nozzle);
  642. fdcDeviceClassElem.CurrentVolume = FDCConvert.ToString(volume);
  643. fdcDeviceClassElem.CurrentUnitPrice = FDCConvert.ToString(price);
  644. fdcDeviceClassElem.CurrentAmount = FDCConvert.ToString(amount);
  645. }
  646. else
  647. {
  648. FuelModeElementClass fuelMode = new FuelModeElementClass();
  649. fuelMode.ModeNo = (mode == -1) ? "" : Convert.ToString(mode);
  650. fdcDeviceClassElem.FuelMode = fuelMode;
  651. fdcDeviceClassElem.NozzleNo = Convert.ToString(nozzle);
  652. fdcDeviceClassElem.Volume = FDCConvert.ToString(volume);
  653. fdcDeviceClassElem.UnitPrice = FDCConvert.ToString(price);
  654. fdcDeviceClassElem.Amount = FDCConvert.ToString(amount);
  655. fdcDeviceClassElem.VolumeProduct1 = FDCConvert.ToString(volume);
  656. fdcDeviceClassElem.VolumeProduct2 = FDCConvert.ToString((Decimal)0);
  657. fdcDeviceClassElem.Product1No = Convert.ToString(productNo);
  658. fdcDeviceClassElem.Product2No = "";
  659. fdcDeviceClassElem.BlendRatio = Convert.ToString(100);
  660. }
  661. fdcDeviceClassElem.ReleaseToken = releaseToken;
  662. if (FDCGlobal.ProtocolVersion == FDCVersion.V0003)
  663. fdcDeviceClassElem.TransactionNo = Convert.ToString(transactionId);
  664. else
  665. fdcDeviceClassElem.TransactionSeqNo = Convert.ToString(transactionId);
  666. FDCMessageDeviceClassCurrentFuellingStatus[] fdcDeviceClassArray = { fdcDeviceClassElem };
  667. FDCDataElem.DeviceClass = fdcDeviceClassArray;
  668. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  669. FDCMessageFDCdataCurrentFuellingStatus[] FDCDataArray = { FDCDataElem };
  670. dsc.FDCdata = FDCDataArray;
  671. #endregion
  672. lock (fdcPosManager.fdcClientList[sID])
  673. SendFDCMessage<FDCMessageCurrentFuellingStatus>(fdcPosManager.fdcClientList[sID], dsc);
  674. }
  675. catch (Exception ex)
  676. {
  677. this.logger.LogError("Notify to client(" + sID + ") " +
  678. "with CurrentFuellingStatus exceptioned: " + ex
  679. + System.Environment.NewLine + "Will skip it and continue");
  680. ////FDCPOSManager.tracer.WriteLine("Exception! " + ex.Message + " - " + ex.StackTrace);
  681. }
  682. }
  683. }
  684. catch (Exception ex)
  685. {
  686. this.logger.LogError("Notify to clients with CurrentFuellingStatus exceptioned: " + ex);
  687. ////FDCPOSManager.tracer.WriteLine("Exception! " + ex.Message + " - " + ex.StackTrace);
  688. }
  689. finally
  690. {
  691. //this.currentFuellingStatusOnCalling = 0;
  692. //Monitor.Exit(fdcposManager.tcpClientList);
  693. }
  694. //}
  695. //else
  696. // Messages.fdcSocketLogger.LogInformation("CurrentFuellingStatus will be skipped for avoid blocking");
  697. }
  698. public void DeviceAlarm(string deviceType, int deviceId, int alarmId, string alarmDescr)
  699. {
  700. string workstationID = "", applicationSender = "";
  701. ////FDCPOSManager.tracer.WriteLine("init");
  702. Monitor.Enter(fdcPosManager.fdcClientList);
  703. try
  704. {
  705. foreach (string sID in fdcPosManager.fdcClientList.Keys)
  706. {
  707. if (!fdcPosManager.fdcClientList[sID].connected || !fdcPosManager.fdcClientList[sID].logon)
  708. continue;
  709. workstationID = fdcPosManager.fdcClientList[sID].workstationID;
  710. applicationSender = fdcPosManager.fdcClientList[sID].applicationSender;
  711. FDCMessageDeviceAlarm dsc = new FDCMessageDeviceAlarm();
  712. dsc.WorkstationID = workstationID;
  713. dsc.ApplicationSender = applicationSender;
  714. dsc.MessageID = FDCPOSManager.messageIdCounter.ToString();
  715. FDCMessageFDCdataDeviceAlarm FDCDataElem = new FDCMessageFDCdataDeviceAlarm();
  716. FDCMessageDeviceAlarmMsg alarmMsgElem = new FDCMessageDeviceAlarmMsg();
  717. alarmMsgElem.Number = Convert.ToString(alarmId);
  718. alarmMsgElem.Text = alarmDescr;
  719. FDCMessageDeviceAlarmMsg[] alarmMsgArray = { alarmMsgElem };
  720. FDCMessageDeviceAlarmDeviceClass fdcDeviceClassElem = new FDCMessageDeviceAlarmDeviceClass();
  721. fdcDeviceClassElem.DeviceID = Convert.ToString(deviceId);
  722. fdcDeviceClassElem.Type = deviceType;
  723. fdcDeviceClassElem.AlarmMsg = alarmMsgArray;
  724. FDCMessageDeviceAlarmDeviceClass[] fdcDeviceClassArray = { fdcDeviceClassElem };
  725. FDCDataElem.DeviceClass = fdcDeviceClassArray;
  726. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  727. FDCMessageFDCdataDeviceAlarm[] FDCDataArray = { FDCDataElem };
  728. dsc.FDCdata = FDCDataArray;
  729. SendFDCMessage<FDCMessageDeviceAlarm>(fdcPosManager.fdcClientList[sID], dsc);
  730. }
  731. }
  732. catch (Exception ex)
  733. {
  734. ////FDCPOSManager.tracer.WriteLine("Exception! " + ex.Message + " - " + ex.StackTrace);
  735. }
  736. finally
  737. {
  738. Monitor.Exit(fdcPosManager.fdcClientList);
  739. }
  740. ////FDCPOSManager.tracer.WriteLine("end");
  741. }
  742. public void FuelSaleTrx(int deviceId, decimal volume, decimal amount, decimal price, int nozzle, int productNo,
  743. string productName, string productUM, int mode, int transactionId, int transactionStatus,
  744. int completionReason, string releaseToken, string startTime, string endTime, string lockingAS,
  745. string authorisationAS, int reservingDeviceId, int fuellingType)
  746. {
  747. string workstationID = "", applicationSender = "";
  748. //Monitor.Enter(fdcposManager.tcpClientList);
  749. try
  750. {
  751. var safeCopy = new List<string>(fdcPosManager.fdcClientList.Keys.Select(k => k.ToString()).ToList());
  752. foreach (string sID in safeCopy)
  753. {
  754. try
  755. {
  756. if (!fdcPosManager.fdcClientList[sID].connected || !fdcPosManager.fdcClientList[sID].logon)
  757. continue;
  758. workstationID = fdcPosManager.fdcClientList[sID].workstationID;
  759. applicationSender = fdcPosManager.fdcClientList[sID].applicationSender;
  760. FDCMessageFuelSaleTrx dsc = new FDCMessageFuelSaleTrx();
  761. dsc.WorkstationID = workstationID;
  762. dsc.ApplicationSender = applicationSender;
  763. dsc.MessageID = FDCPOSManager.messageIdCounter.ToString();
  764. FDCMessageFDCdataFuelSaleTrx FDCDataElem = new FDCMessageFDCdataFuelSaleTrx();
  765. if (FDCGlobal.ProtocolVersion > FDCVersion.V0003)
  766. {
  767. FDCMessageDeviceClassFuelSaleTrx fdcDeviceClassElem = new FDCMessageDeviceClassFuelSaleTrx();
  768. fdcDeviceClassElem.DeviceID = Convert.ToString(deviceId);
  769. fdcDeviceClassElem.Type = Wayne.FDCPOSLibrary.DeviceType.DT_FuellingPoint; // Wayne.FDCPOSLibrary.DeviceType.DT_FuelDispenser;
  770. fdcDeviceClassElem.PumpNo = Convert.ToString(deviceId);
  771. fdcDeviceClassElem.NozzleNo = Convert.ToString(nozzle);
  772. fdcDeviceClassElem.TransactionSeqNo = Convert.ToString(transactionId);
  773. fdcDeviceClassElem.State = ((FuellingState)transactionStatus == FuellingState.Paid) ? FuellingState.Cleared.ToString() : ((FuellingState)transactionStatus).ToString();
  774. if (this.fdcPosManager.useExtensions) fdcDeviceClassElem.CompletionReason = Convert.ToString(completionReason);
  775. fdcDeviceClassElem.ReleaseToken = releaseToken;
  776. FuelModeElementClass fuelMode = new FuelModeElementClass();
  777. fuelMode.ModeNo = (mode == -1) ? "" : Convert.ToString(mode);
  778. fdcDeviceClassElem.FuelMode = fuelMode;
  779. fdcDeviceClassElem.VolumeProduct1 = FDCConvert.ToString(volume);
  780. fdcDeviceClassElem.VolumeProduct2 = FDCConvert.ToString((Decimal)0);
  781. fdcDeviceClassElem.ProductNo1 = Convert.ToString(productNo);
  782. fdcDeviceClassElem.ProductNo2 = "";
  783. if (this.fdcPosManager.useExtensions)
  784. {
  785. fdcDeviceClassElem.ProductName = productName;
  786. fdcDeviceClassElem.ProductUM = productUM;
  787. }
  788. fdcDeviceClassElem.BlendRatio = Convert.ToString(100);
  789. fdcDeviceClassElem.Amount = FDCConvert.ToString(amount);
  790. fdcDeviceClassElem.Volume = FDCConvert.ToString(volume);
  791. fdcDeviceClassElem.UnitPrice = FDCConvert.ToString(price);
  792. if (this.fdcPosManager.useExtensions) fdcDeviceClassElem.StartTimeStamp = startTime;
  793. if (this.fdcPosManager.useExtensions) fdcDeviceClassElem.EndTimeStamp = endTime;
  794. fdcDeviceClassElem.AuthorisationApplicationSender = authorisationAS;
  795. fdcDeviceClassElem.LockingApplicationSender = lockingAS;
  796. if (this.fdcPosManager.useExtensions)
  797. {
  798. fdcDeviceClassElem.ReservingDeviceId = Convert.ToString(reservingDeviceId);
  799. fdcDeviceClassElem.FuellingType = Convert.ToString(fuellingType);
  800. }
  801. FuellingInfo fuellingInfo = new FuellingInfo(deviceId, nozzle, productNo, productName, productUM, amount, volume, price, DateTime.Parse(endTime), transactionId);
  802. fdcDeviceClassElem.DSPFields = fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)].getDSPFields(fuellingInfo);
  803. fdcDeviceClassElem.CRCMode = fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)].getCRC(fuellingInfo);
  804. FDCDataElem.DeviceClass = fdcDeviceClassElem;
  805. }
  806. else
  807. {
  808. FDCMessageTRXdataFuelSaleTrx trxdata = new FDCMessageTRXdataFuelSaleTrx();
  809. FDCMessageDeviceClassTrxDataFuelSaleTrx fdcDeviceClassElem = new FDCMessageDeviceClassTrxDataFuelSaleTrx();
  810. fdcDeviceClassElem.DeviceID = Convert.ToString(deviceId);
  811. fdcDeviceClassElem.Type = Wayne.FDCPOSLibrary.DeviceType.DT_FuellingPoint; // Wayne.FDCPOSLibrary.DeviceType.DT_FuelDispenser;
  812. fdcDeviceClassElem.PumpNo = Convert.ToString(deviceId);
  813. fdcDeviceClassElem.NozzleNo = Convert.ToString(nozzle);
  814. trxdata.DeviceClass = fdcDeviceClassElem;
  815. trxdata.TransactionNo = Convert.ToString(transactionId);
  816. trxdata.State = Convert.ToString((FuellingState)transactionStatus);
  817. trxdata.CompletionReason = Convert.ToString(completionReason);
  818. trxdata.ReleaseToken = releaseToken;
  819. trxdata.Type = "";
  820. trxdata.FuelMode = Convert.ToString(mode);
  821. trxdata.VolumeProduct1 = FDCConvert.ToString(volume);
  822. trxdata.VolumeProduct2 = FDCConvert.ToString((Decimal)0);
  823. trxdata.Product1No = Convert.ToString(productNo);
  824. trxdata.Product2No = "";
  825. if (this.fdcPosManager.useExtensions)
  826. {
  827. trxdata.ProductName = productName;
  828. trxdata.ProductUM = productUM;
  829. }
  830. trxdata.BlendRatio = Convert.ToString(100);
  831. trxdata.Amount = FDCConvert.ToString(amount);
  832. trxdata.Volume = FDCConvert.ToString(volume);
  833. trxdata.UnitPrice = FDCConvert.ToString(price);
  834. trxdata.StartTimeStamp = startTime;
  835. trxdata.EndTimeStamp = endTime;
  836. //FDCMessageTRXdataFuelSaleTrx[] trxdataArray = { trxdata };
  837. //FDCDataElem.TRXdata = trxdataArray;
  838. FDCDataElem.TRXdata = trxdata;
  839. FuellingInfo fuellingInfo = new FuellingInfo(deviceId, nozzle, productNo, productName, productUM, amount, volume, price, DateTime.Parse(endTime), transactionId);
  840. trxdata.DSPFields = fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)].getDSPFields(fuellingInfo);
  841. trxdata.CRCMode = fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)].getCRC(fuellingInfo);
  842. }
  843. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  844. FDCMessageFDCdataFuelSaleTrx[] FDCDataArray = { FDCDataElem };
  845. dsc.FDCdata = FDCDataArray;
  846. lock (fdcPosManager.fdcClientList[sID])
  847. SendFDCMessage<FDCMessageFuelSaleTrx>(fdcPosManager.fdcClientList[sID], dsc);
  848. }
  849. catch (Exception ex)
  850. {
  851. this.logger.LogError("Notify to client(" + sID + ") " +
  852. "with FuelSaleTrx exceptioned: " + ex
  853. + System.Environment.NewLine + "Will skip it and continue");
  854. ////FDCPOSManager.tracer.WriteLine("Exception! " + ex.Message + " - " + ex.StackTrace);
  855. }
  856. }
  857. }
  858. catch (Exception ex)
  859. {
  860. this.logger.LogError("Notify to clients with FuelSaleTrx exceptioned: " + ex);
  861. ////FDCPOSManager.tracer.WriteLine("Exception! " + ex.Message + " - " + ex.StackTrace);
  862. }
  863. finally
  864. {
  865. //Monitor.Exit(fdcposManager.tcpClientList);
  866. }
  867. }
  868. public void FuelPriceChange(int productNo, int modeNo, double newPrice, double oldPrice, string effectiveDateTime)
  869. {
  870. string workstationID = "", applicationSender = "";
  871. //Monitor.Enter(fdcposManager.tcpClientList);
  872. try
  873. {
  874. var safeCopy = new List<string>(fdcPosManager.fdcClientList.Keys.Select(k => k.ToString()).ToList());
  875. foreach (string sID in safeCopy)
  876. {
  877. if (!fdcPosManager.fdcClientList[sID].connected || !fdcPosManager.fdcClientList[sID].logon)
  878. continue;
  879. workstationID = fdcPosManager.fdcClientList[sID].workstationID;
  880. applicationSender = fdcPosManager.fdcClientList[sID].applicationSender;
  881. FDCMessageFuelPriceChange dsc = new FDCMessageFuelPriceChange();
  882. dsc.WorkstationID = workstationID;
  883. dsc.ApplicationSender = applicationSender;
  884. dsc.MessageID = FDCPOSManager.messageIdCounter.ToString();
  885. FDCMessageFDCdataFuelPriceChange FDCDataElem = new FDCMessageFDCdataFuelPriceChange();
  886. FDCMessageProductFuelPriceChange fdcProductElem = new FDCMessageProductFuelPriceChange();
  887. fdcProductElem.ProductNo = Convert.ToString(productNo);
  888. if (FDCGlobal.ProtocolVersion == FDCVersion.V0003)
  889. {
  890. fdcProductElem.ModeNo = modeNo.ToString();
  891. fdcProductElem.NewPrice = FDCConvert.ToString(newPrice);
  892. fdcProductElem.OldPrice = FDCConvert.ToString(oldPrice);
  893. fdcProductElem.EffectiveDateTime = effectiveDateTime;
  894. }
  895. else
  896. {
  897. FDCMessageFuelModeFuelPriceChange fdcFuelModeElem = new FDCMessageFuelModeFuelPriceChange();
  898. fdcFuelModeElem.ModeNo = modeNo.ToString();
  899. fdcFuelModeElem.NewPrice = FDCConvert.ToString(newPrice);
  900. fdcFuelModeElem.OldPrice = FDCConvert.ToString(oldPrice);
  901. fdcFuelModeElem.EffectiveDateTime = effectiveDateTime;
  902. fdcProductElem.FuelMode = fdcFuelModeElem;
  903. }
  904. FDCMessageProductFuelPriceChange[] fdcProductArray = { fdcProductElem };
  905. FDCDataElem.Product = fdcProductArray;
  906. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  907. FDCMessageFDCdataFuelPriceChange[] FDCDataArray = { FDCDataElem };
  908. dsc.FDCdata = FDCDataArray;
  909. lock (fdcPosManager.fdcClientList[sID])
  910. SendFDCMessage<FDCMessageFuelPriceChange>(fdcPosManager.fdcClientList[sID], dsc);
  911. }
  912. }
  913. catch (Exception ex)
  914. {
  915. this.logger.LogError("Notify to clients with FuelPriceChange exceptioned: " + ex);
  916. ////FDCPOSManager.tracer.WriteLine("Exception! " + ex.Message + " - " + ex.StackTrace);
  917. }
  918. finally
  919. {
  920. //Monitor.Exit(fdcposManager.tcpClientList);
  921. }
  922. }
  923. public void FuelModeChange(string deviceType, int deviceId, int modeNo)
  924. {
  925. string workstationID = "", applicationSender = "";
  926. Monitor.Enter(fdcPosManager.fdcClientList);
  927. try
  928. {
  929. foreach (string sID in fdcPosManager.fdcClientList.Keys)
  930. {
  931. if (!fdcPosManager.fdcClientList[sID].connected || !fdcPosManager.fdcClientList[sID].logon)
  932. continue;
  933. workstationID = fdcPosManager.fdcClientList[sID].workstationID;
  934. applicationSender = fdcPosManager.fdcClientList[sID].applicationSender;
  935. FDCMessageFuelModeChange dsc = new FDCMessageFuelModeChange();
  936. dsc.WorkstationID = workstationID;
  937. dsc.ApplicationSender = applicationSender;
  938. dsc.MessageID = FDCPOSManager.messageIdCounter.ToString();
  939. FDCMessageFDCdataFuelModeChange FDCDataElem = new FDCMessageFDCdataFuelModeChange();
  940. FDCMessageDeviceClassFuelModeChange fdcDeviceClassElem = new FDCMessageDeviceClassFuelModeChange();
  941. fdcDeviceClassElem.Type = deviceType; // Wayne.FDCPOSLibrary.DeviceType.DT_FuelDispenser;
  942. fdcDeviceClassElem.DeviceID = Convert.ToString(deviceId);
  943. if (FDCGlobal.ProtocolVersion == FDCVersion.V0003)
  944. fdcDeviceClassElem.ModeNo = (modeNo == -1) ? "" : Convert.ToString(modeNo);
  945. else
  946. {
  947. FuelModeElementClass fuelMode = new FuelModeElementClass();
  948. fuelMode.ModeNo = (modeNo == -1) ? "" : Convert.ToString(modeNo);
  949. fdcDeviceClassElem.FuelMode = fuelMode;
  950. }
  951. FDCMessageDeviceClassFuelModeChange[] fdcDeviceClassArray = { fdcDeviceClassElem };
  952. FDCDataElem.DeviceClass = fdcDeviceClassArray;
  953. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  954. FDCMessageFDCdataFuelModeChange[] FDCDataArray = { FDCDataElem };
  955. dsc.FDCdata = FDCDataArray;
  956. SendFDCMessage<FDCMessageFuelModeChange>(fdcPosManager.fdcClientList[sID], dsc);
  957. }
  958. }
  959. catch (Exception ex)
  960. {
  961. ////FDCPOSManager.tracer.WriteLine("Exception! " + ex.Message + " - " + ex.StackTrace);
  962. }
  963. finally
  964. {
  965. Monitor.Exit(fdcPosManager.fdcClientList);
  966. }
  967. }
  968. public void FDCExceptionMsg(int exceptionNo, string description)
  969. {
  970. string workstationID = "", applicationSender = "";
  971. Monitor.Enter(fdcPosManager.fdcClientList);
  972. try
  973. {
  974. foreach (string sID in fdcPosManager.fdcClientList.Keys)
  975. {
  976. if (!fdcPosManager.fdcClientList[sID].connected || !fdcPosManager.fdcClientList[sID].logon)
  977. continue;
  978. workstationID = fdcPosManager.fdcClientList[sID].workstationID;
  979. applicationSender = fdcPosManager.fdcClientList[sID].applicationSender;
  980. FDCMessageFDCExceptionMsg dsc = new FDCMessageFDCExceptionMsg();
  981. dsc.WorkstationID = workstationID;
  982. dsc.ApplicationSender = applicationSender;
  983. dsc.MessageID = FDCPOSManager.messageIdCounter.ToString();
  984. FDCMessageFDCdataFDCExceptionMsg FDCDataElem = new FDCMessageFDCdataFDCExceptionMsg();
  985. FDCDataElem.ExceptionNo = Convert.ToString(exceptionNo);
  986. FDCDataElem.Description = description;
  987. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  988. FDCMessageFDCdataFDCExceptionMsg[] FDCDataArray = { FDCDataElem };
  989. dsc.FDCdata = FDCDataArray;
  990. SendFDCMessage<FDCMessageFDCExceptionMsg>(fdcPosManager.fdcClientList[sID], dsc);
  991. }
  992. }
  993. catch (Exception ex)
  994. {
  995. ////FDCPOSManager.tracer.WriteLine("Exception! " + ex.Message + " - " + ex.StackTrace);
  996. }
  997. finally
  998. {
  999. Monitor.Exit(fdcPosManager.fdcClientList);
  1000. }
  1001. }
  1002. public void ConfigurationChange(int fDCDeviceStatus)
  1003. {
  1004. string workstationID = "", applicationSender = "";
  1005. Monitor.Enter(fdcPosManager.fdcClientList);
  1006. try
  1007. {
  1008. foreach (string sID in fdcPosManager.fdcClientList.Keys)
  1009. {
  1010. if (!fdcPosManager.fdcClientList[sID].connected || !fdcPosManager.fdcClientList[sID].logon)
  1011. continue;
  1012. workstationID = fdcPosManager.fdcClientList[sID].workstationID;
  1013. applicationSender = fdcPosManager.fdcClientList[sID].applicationSender;
  1014. FDCMessageConfigurationChange dsc = new FDCMessageConfigurationChange();
  1015. dsc.WorkstationID = workstationID;
  1016. dsc.ApplicationSender = applicationSender;
  1017. dsc.MessageID = FDCPOSManager.messageIdCounter.ToString();
  1018. FDCMessageFDCdataConfigurationChange FDCDataElem = new FDCMessageFDCdataConfigurationChange();
  1019. FDCDataElem.FDCDeviceStatus = ((ErrorCode)fDCDeviceStatus).ToString();
  1020. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  1021. FDCMessageFDCdataConfigurationChange[] FDCDataArray = { FDCDataElem };
  1022. dsc.FDCdata = FDCDataArray;
  1023. SendFDCMessage<FDCMessageConfigurationChange>(fdcPosManager.fdcClientList[sID], dsc);
  1024. }
  1025. }
  1026. catch (Exception ex)
  1027. {
  1028. ////FDCPOSManager.tracer.WriteLine("Exception! " + ex.Message + " - " + ex.StackTrace);
  1029. }
  1030. finally
  1031. {
  1032. Monitor.Exit(fdcPosManager.fdcClientList);
  1033. }
  1034. }
  1035. /// <summary>
  1036. /// send a string msg to specific or all Fdc client(s) via TCP network
  1037. /// </summary>
  1038. /// <param name="workstationId">the target Fdc client with this workstation id. leave to null if want to broadcast to all Fdc clients</param>
  1039. /// <param name="applicationSender"></param>
  1040. /// <param name="msg"></param>
  1041. public void SendGenericMessageToFdcClient(string workstationId, string applicationSender, string msg)
  1042. {
  1043. //string workstationID = "", applicationSender = "";
  1044. //Monitor.Enter(fdcposManager.tcpClientList);
  1045. try
  1046. {
  1047. List<string> safeCopy;
  1048. if (string.IsNullOrEmpty(workstationId) || string.IsNullOrEmpty(applicationSender))
  1049. safeCopy = new List<string>(fdcPosManager.fdcClientList.Keys.Select(k => k.ToString()));
  1050. else
  1051. safeCopy = new List<string>(fdcPosManager.fdcClientList
  1052. .Where(p => p.Key == FDCPOSClient.getClientID(workstationId, applicationSender)).Select(k => k.Key));
  1053. foreach (string sID in safeCopy)
  1054. {
  1055. if (!fdcPosManager.fdcClientList[sID].connected || !fdcPosManager.fdcClientList[sID].logon)
  1056. continue;
  1057. var wId = fdcPosManager.fdcClientList[sID].workstationID;
  1058. applicationSender = fdcPosManager.fdcClientList[sID].applicationSender;
  1059. FDCMessageGenericTypelessMessage dsc = new FDCMessageGenericTypelessMessage();
  1060. dsc.WorkstationID = wId;
  1061. dsc.ApplicationSender = applicationSender;
  1062. dsc.MessageID = FDCPOSManager.messageIdCounter.ToString();
  1063. FDCMessageFDCdataGenericTypelessMessage FDCDataElem = new FDCMessageFDCdataGenericTypelessMessage();
  1064. FDCDataElem.Message = msg;
  1065. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  1066. FDCMessageFDCdataGenericTypelessMessage[] FDCDataArray = { FDCDataElem };
  1067. dsc.FDCdata = FDCDataArray;
  1068. lock (fdcPosManager.fdcClientList[sID])
  1069. SendFDCMessage<FDCMessageGenericTypelessMessage>(fdcPosManager.fdcClientList[sID], dsc);
  1070. }
  1071. }
  1072. catch (Exception ex)
  1073. {
  1074. fdcSocketLogger.LogError("SendGenericMessageToFdcClient to clients(wid:" + (workstationId ?? "")
  1075. + ", appId: " + (applicationSender ?? "") + ", msg: " + (msg ?? "") + ") with exception: \r\n" + ex);
  1076. ////FDCPOSManager.tracer.WriteLine("Exception! " + ex.Message + " - " + ex.StackTrace);
  1077. }
  1078. finally
  1079. {
  1080. //Monitor.Exit(fdcposManager.tcpClientList);
  1081. }
  1082. }
  1083. #endregion
  1084. #region ServiceResponses
  1085. public void SendErrorResponse(string requestType, string workstationID, string applicationSender, int requestId, ErrorCode status, string overallResult)
  1086. {
  1087. if (this.fdcSocketLogger.IsEnabled(LogLevel.Debug))
  1088. this.fdcSocketLogger.LogDebug("Will SendErrorResponse(requestType: " + (requestType ?? "") + ") to Fdc client(wId: "
  1089. + (workstationID ?? "") + ",appSender: " + (applicationSender ?? "") + "), requestId: " + requestId + ", status: " + status + ", overallResult: " + (overallResult ?? ""));
  1090. if (requestType == "LogOn") LogOn(workstationID, applicationSender, requestId, 0, 0, (int)status, overallResult, null);
  1091. else if (requestType == "LogOff") LogOff(workstationID, applicationSender, requestId, (int)status, overallResult);
  1092. else if (requestType == "VersionInfo") VersionInfo(workstationID, applicationSender, requestId, "", "", "", "", (int)status, overallResult);
  1093. else if (requestType == "StartForecourt") StartForecourt(workstationID, applicationSender, requestId, (int)status, overallResult);
  1094. else if (requestType == "StopForecourt") StopForecourt(workstationID, applicationSender, requestId, 0, overallResult);
  1095. else if (requestType == "GetCurrentFuellingStatus") GetCurrentFuellingStatusSend(workstationID, applicationSender, requestId, (int)status, overallResult);
  1096. else if (requestType == "GetFuelPointTotals" || requestType == "GetTotals") GetFuelPointTotalsSend(workstationID, applicationSender, requestId, (int)status, overallResult);
  1097. else if (requestType == "GetDeviceState" || requestType == "GetFPState" || requestType == "GetTPState" || requestType == "GetPPState") GetDeviceStateSend(workstationID, applicationSender, requestId, (int)status, overallResult);
  1098. else if (requestType == "TerminateFuelling") TerminateFuellingSend(workstationID, applicationSender, requestId, (int)status, overallResult);
  1099. else if (requestType == "AuthoriseFuelPoint") AuthoriseFuelPoint(workstationID, applicationSender, requestId, 0, "", 0, 0, (int)status, overallResult);
  1100. else if (requestType == "ChangeFuelMode") ChangeFuelMode(workstationID, applicationSender, requestId, "", 0, 0, (int)status, overallResult);
  1101. else if (requestType == "ChangeFuelPrice") ChangeFuelPriceSend(workstationID, applicationSender, requestId, (int)status, overallResult);
  1102. else if (requestType == "LockFuelSaleTrx") LockFuelSaleTrx(workstationID, applicationSender, requestId, 0, 0, "", (int)status, (int)FuellingState.Undefined, overallResult);
  1103. else if (requestType == "UnlockFuelSaleTrx") UnlockFuelSaleTrx(workstationID, applicationSender, requestId, 0, 0, "", (int)status, (int)FuellingState.Undefined, overallResult);
  1104. else if (requestType == "ClearFuelSaleTrx") ClearFuelSaleTrx(workstationID, applicationSender, requestId, 0, 0, "", (int)status, (int)FuellingState.Undefined, overallResult);
  1105. else if (requestType == "GetAvailableFuelSaleTrxs") GetAvailableFuelSaleTrxsSend(workstationID, applicationSender, requestId, (int)status, overallResult);
  1106. else if (requestType == "GetFuelSaleTrxDetails") GetFuelSaleTrxDetailsSend(workstationID, applicationSender, requestId, (int)status, overallResult);
  1107. else if (requestType == "GetProductTable") GetProductTableSend(workstationID, applicationSender, requestId, (int)status, overallResult);
  1108. else if (requestType == "GetModeTable") GetModeTableSend(workstationID, applicationSender, requestId, (int)status, overallResult);
  1109. else if (requestType == "GetFuelMode") GetFuelModeSend(workstationID, applicationSender, requestId, (int)status, overallResult);
  1110. else if (requestType == "GetConfiguration") GetConfigurationSend(workstationID, applicationSender, requestId, "", overallResult);
  1111. else if (requestType == "GetDSPConfiguration") GetConfigurationSend(workstationID, applicationSender, requestId, DeviceType.DT_FuelDispenser, overallResult);
  1112. else if (requestType == "GetTLGConfiguration") GetConfigurationSend(workstationID, applicationSender, requestId, DeviceType.DT_TankLevelGauge, overallResult);
  1113. else if (requestType == "GetPPConfiguration") GetConfigurationSend(workstationID, applicationSender, requestId, DeviceType.DT_PricePole, overallResult);
  1114. else if (requestType == "SetConfiguration") SetConfiguration(workstationID, applicationSender, requestId, overallResult);
  1115. else if (requestType == "LockNozzle") LockNozzle(workstationID, applicationSender, requestId, 0, 0, 0, (int)status, overallResult);
  1116. else if (requestType == "UnlockNozzle") UnlockNozzle(workstationID, applicationSender, requestId, 0, 0, 0, (int)status, overallResult);
  1117. else if (requestType == "GetCountrySettings") GetCountrySettings(workstationID, applicationSender, requestId, "", "", "", "", "", "", "", "", (int)status, overallResult);
  1118. else if (requestType == "GetDSPLimitsSend") GetDSPLimitsSend(workstationID, applicationSender, requestId, (int)status, overallResult);
  1119. else if (requestType == "ChangeDSPLimits") ChangeDSPLimits(workstationID, applicationSender, requestId, (int)status, overallResult);
  1120. else if (requestType == "SuspendFuelling") SuspendFuellingSend(workstationID, applicationSender, requestId, (int)status, overallResult);
  1121. else if (requestType == "ResumeFuelling") ResumeFuellingSend(workstationID, applicationSender, requestId, (int)status, overallResult);
  1122. else if (requestType == "LockTank") LockTank(workstationID, applicationSender, requestId, 0, 0, (int)status, overallResult);
  1123. else if (requestType == "UnlockTank") UnlockTank(workstationID, applicationSender, requestId, 0, 0, (int)status, overallResult);
  1124. else if (requestType == "GetTankData") GetTankDataSend(workstationID, applicationSender, requestId, (int)status, overallResult);
  1125. else if (requestType == "ReserveFuelPoint") ReserveFuelPoint(workstationID, applicationSender, requestId, 0, 0, 0, overallResult);
  1126. else if (requestType == "FreeFuelPoint") FreeFuelPoint(workstationID, applicationSender, requestId, 0, 0, (int)status, overallResult);
  1127. else if (requestType == "StartFuelPointTest") StartFuelPointTest(workstationID, applicationSender, requestId, 0, 0, (int)status, overallResult);
  1128. else if (requestType == "EndFuelPointTest") EndFuelPointTest(workstationID, applicationSender, requestId, 0, 0, (int)status, overallResult);
  1129. else if (requestType == "SetDeviceAlarm") SetDeviceAlarm(workstationID, applicationSender, requestId, "", 0, (int)status, overallResult);
  1130. else if (requestType == "OpenFuelPoint" || requestType == "OpenDevice") OpenFuelPointSend(workstationID, applicationSender, requestId, (int)status, overallResult);
  1131. else if (requestType == "CloseFuelPoint" || requestType == "CloseDevice") CloseFuelPointSend(workstationID, applicationSender, requestId, (int)status, overallResult);
  1132. }
  1133. public void LogOn(string workstationID, string applicationSender, int requestId, int iResponsePort, int iUnsolicitedPort, int status, string overallResult, FDCPOSClient fdcposClient)
  1134. {
  1135. try
  1136. {
  1137. bool bError = false;
  1138. ////FDCPOSManager.tracer.WriteLine("init");
  1139. if (fdcposClient != null) // means LogOnReq fails
  1140. bError = true;
  1141. else if (fdcPosManager.fdcClientList.ContainsKey(FDCPOSClient.getClientID(workstationID, applicationSender)))
  1142. fdcposClient = fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)];
  1143. else
  1144. {
  1145. ////FDCPOSManager.tracer.WriteLine(string.Format("end: Error! client ID='{0}' in an unknown client", FDCPOSClient.getClientID(workstationID, applicationSender)));
  1146. return;
  1147. }
  1148. ////FDCPOSManager.tracer.WriteLine(overallResult);
  1149. int socketTimeout = 6000;
  1150. bool noDelay = true;
  1151. try
  1152. {
  1153. //string sValue = IniFile.IniReadValue(SINPConfigurazione.IniPath + "ForecourtServer.ini", "FUSION-Connection", "SocketTimeout");
  1154. //if (sValue.Length > 0)
  1155. // socketTimeout = Convert.ToInt32(sValue);
  1156. ////FDCPOSManager.tracer.WriteLine(string.Format("socketTimeout={0}", socketTimeout));
  1157. //sValue = IniFile.IniReadValue(SINPConfigurazione.IniPath + "ForecourtServer.ini", "FUSION-Connection", "NoDelay");
  1158. //if (sValue.Length > 0 && sValue == "0")
  1159. // noDelay = false;
  1160. ////FDCPOSManager.tracer.WriteLine(string.Format("socketTimeout={0}", socketTimeout));
  1161. }
  1162. catch (Exception ex)
  1163. {
  1164. ////FDCPOSManager.tracer.WriteLine("EXCEPTION! " + ex.Message);
  1165. }
  1166. fdcposClient.sID = FDCPOSClient.getClientID(workstationID, applicationSender);
  1167. fdcposClient.workstationID = workstationID;
  1168. fdcposClient.applicationSender = applicationSender;
  1169. bool bConnected = false;
  1170. while (!bConnected)
  1171. {
  1172. //FDCPOSManager.tracer.WriteLine("trying Connect socketChannelResponse ...");
  1173. try
  1174. {
  1175. if (iResponsePort == ((FDCPOSInterfaceServerManager)fdcPosManager).FdcServerTcpHandler.IPPort)
  1176. fdcposClient.socketChannelResponse = fdcposClient.FdcClientTcpHandler.TcpClient;
  1177. else
  1178. {
  1179. fdcSocketLogger.LogError($"A Client(wId: {workstationID ?? ""}, appId: {applicationSender ?? ""}) is " +
  1180. $"trying use an unexpected ResponsePort: {iResponsePort} in LogOn ServiceRequest for setup socketChannelResponse, the expecting port is: {((FDCPOSInterfaceServerManager)fdcPosManager).FdcServerTcpHandler.IPPort}");
  1181. fdcposClient.socketChannelResponse = new TcpClient(fdcposClient.sIPAddress, iResponsePort);
  1182. }
  1183. bConnected = true;
  1184. ////FDCPOSManager.tracer.WriteLineIf(FDCPOSManager.tracer.CheckTraceLevel(4), string.Format("ReceiveTimeout={0}, SendTimeout={1}, NoDelay={2}", fdcposClient.socketChannelResponse.ReceiveTimeout, fdcposClient.socketChannelResponse.SendTimeout, fdcposClient.socketChannelResponse.NoDelay));
  1185. fdcposClient.socketChannelResponse.SendTimeout = socketTimeout;
  1186. fdcposClient.socketChannelResponse.NoDelay = noDelay;
  1187. ////FDCPOSManager.tracer.WriteLineIf(FDCPOSManager.tracer.CheckTraceLevel(4), string.Format("ReceiveTimeout={0}, SendTimeout={1}, NoDelay={2}", fdcposClient.socketChannelResponse.ReceiveTimeout, fdcposClient.socketChannelResponse.SendTimeout, fdcposClient.socketChannelResponse.NoDelay));
  1188. }
  1189. catch (Exception ex)
  1190. {
  1191. Thread.Sleep(1000);
  1192. }
  1193. }
  1194. ////FDCPOSManager.tracer.WriteLine("socketChannelResponse Connected");
  1195. if (!bError)
  1196. {
  1197. bConnected = false;
  1198. while (!bConnected)
  1199. {
  1200. ////FDCPOSManager.tracer.WriteLine("trying Connect socketChannelUnsolicited ...");
  1201. try
  1202. {
  1203. if (iUnsolicitedPort == ((FDCPOSInterfaceServerManager)fdcPosManager).FdcServerTcpHandler.IPPort)
  1204. fdcposClient.socketChannelUnsolicited = fdcposClient.FdcClientTcpHandler.TcpClient;
  1205. else
  1206. {
  1207. fdcSocketLogger.LogError($"A Client(wId: {workstationID ?? ""}, appId: {applicationSender ?? ""}) is " +
  1208. $"trying use an unexpected UnsolicitedPort: {iUnsolicitedPort} in LogOn ServiceRequest for setup socketChannelUnsolicited, the expecting port is: {((FDCPOSInterfaceServerManager)fdcPosManager).FdcServerTcpHandler.IPPort}");
  1209. fdcposClient.socketChannelUnsolicited = new TcpClient(fdcposClient.sIPAddress, iUnsolicitedPort);
  1210. }
  1211. bConnected = true;
  1212. }
  1213. catch (Exception ex)
  1214. {
  1215. Thread.Sleep(1000);
  1216. }
  1217. }
  1218. ////FDCPOSManager.tracer.WriteLine("socketChannelUnsolicited Connected");
  1219. }
  1220. ServiceResponseLogOn logOnRes = new ServiceResponseLogOn();
  1221. logOnRes.WorkstationID = workstationID;
  1222. logOnRes.ApplicationSender = applicationSender;
  1223. logOnRes.RequestID = requestId.ToString();
  1224. logOnRes.OverallResult = overallResult;
  1225. if (FDCGlobal.ProtocolVersion >= FDCVersion.V0005)
  1226. logOnRes.FDCdata[0].FDCStatus = ((ErrorCode)status).ToString();
  1227. fdcposClient.connected = true;
  1228. fdcposClient.logon = true;
  1229. ((FDCPOSInterfaceServerManager)fdcPosManager).FdcServerTcpHandler.SendResponse<ServiceResponseLogOn>(fdcposClient, logOnRes);
  1230. if (!bError)
  1231. {
  1232. // start heartbeat
  1233. fdcposClient.heartbeat.RestartHeartbeatTimer();
  1234. }
  1235. }
  1236. catch (Exception ex)
  1237. {
  1238. ////FDCPOSManager.tracer.WriteLine("Exception! " + ex.Message + " - " + ex.StackTrace);
  1239. }
  1240. ////FDCPOSManager.tracer.WriteLine("end");
  1241. }
  1242. public void LogOff(string workstationID, string applicationSender, int requestId, int status, string overallResult)
  1243. {
  1244. try
  1245. {
  1246. bool bError = false;
  1247. ////FDCPOSManager.tracer.WriteLine("init");
  1248. FDCPOSClient fdcposClient;
  1249. if (fdcPosManager.fdcClientList.ContainsKey(FDCPOSClient.getClientID(workstationID, applicationSender)))
  1250. fdcposClient = fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)];
  1251. else
  1252. {
  1253. ////FDCPOSManager.tracer.WriteLine(string.Format("end: Error! client ID='{0}' in an unknown client", FDCPOSClient.getClientID(workstationID, applicationSender)));
  1254. return;
  1255. }
  1256. fdcposClient.sID = FDCPOSClient.getClientID(workstationID, applicationSender);
  1257. fdcposClient.workstationID = workstationID;
  1258. fdcposClient.applicationSender = applicationSender;
  1259. ServiceResponseLogOff logOffRes = new ServiceResponseLogOff();
  1260. logOffRes.WorkstationID = workstationID;
  1261. logOffRes.ApplicationSender = applicationSender;
  1262. logOffRes.RequestID = requestId.ToString();
  1263. logOffRes.OverallResult = overallResult;
  1264. if (FDCGlobal.ProtocolVersion >= FDCVersion.V0005)
  1265. logOffRes.FDCdata[0].FDCStatus = ((ErrorCode)status).ToString();
  1266. fdcposClient.logon = false;
  1267. RemovePendingMessages(FDCPOSClient.getClientID(workstationID, applicationSender));
  1268. ((FDCPOSInterfaceServerManager)fdcPosManager).FdcServerTcpHandler.SendResponse<ServiceResponseLogOff>(fdcposClient, logOffRes);
  1269. }
  1270. catch (Exception ex)
  1271. {
  1272. //FDCPOSManager.tracer.WriteLine("Exception! " + ex.Message + " - " + ex.StackTrace);
  1273. }
  1274. //FDCPOSManager.tracer.WriteLine("end");
  1275. }
  1276. public void VersionInfo(string workstationID, string applicationSender, int requestId, string supplier, string version, string release, string hotfix, int status, string overallResult)
  1277. {
  1278. ////FDCPOSManager.tracer.WriteLine("init");
  1279. ServiceResponseVersionInfo SvRes = new ServiceResponseVersionInfo();
  1280. SvRes.WorkstationID = workstationID;
  1281. SvRes.ApplicationSender = applicationSender;
  1282. SvRes.RequestID = requestId.ToString(); ;
  1283. SvRes.OverallResult = overallResult;
  1284. ServiceResponseFDCdataVersionInfo FDCDataElem = new ServiceResponseFDCdataVersionInfo();
  1285. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  1286. switch (FDCGlobal.ProtocolVersion)
  1287. {
  1288. case FDCVersion.V0003: FDCDataElem.InterfaceVersion = "00.03"; break;
  1289. case FDCVersion.V0005: FDCDataElem.InterfaceVersion = "00.05"; break;
  1290. case FDCVersion.V0007: FDCDataElem.InterfaceVersion = "00.07"; break;
  1291. default: FDCDataElem.InterfaceVersion = ""; break;
  1292. }
  1293. FDCDataElem.FDCsupplier = supplier;
  1294. FDCDataElem.FDCversion = version;
  1295. FDCDataElem.FDCrelease = release;
  1296. FDCDataElem.FDChotfix = hotfix;
  1297. if (FDCGlobal.ProtocolVersion >= FDCVersion.V0005)
  1298. FDCDataElem.FDCStatus = ((ErrorCode)status).ToString();
  1299. ServiceResponseFDCdataVersionInfo[] FDCDataArray = { FDCDataElem };
  1300. SvRes.FDCdata = FDCDataArray;
  1301. ((FDCPOSInterfaceServerManager)fdcPosManager).FdcServerTcpHandler.SendResponse<ServiceResponseVersionInfo>(fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)], SvRes);
  1302. //FDCPOSManager.tracer.WriteLine("end");
  1303. }
  1304. public void StartForecourt(string workstationID, string applicationSender, int requestId, int status, string overallResult)
  1305. {
  1306. ////FDCPOSManager.tracer.WriteLine("init");
  1307. ServiceResponseStartForecourt SvRes = new ServiceResponseStartForecourt();
  1308. SvRes.WorkstationID = workstationID;
  1309. SvRes.ApplicationSender = applicationSender;
  1310. SvRes.RequestID = requestId.ToString();
  1311. SvRes.OverallResult = overallResult;
  1312. ServiceResponseFDCdataStartForecourt FDCDataElem = new ServiceResponseFDCdataStartForecourt();
  1313. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  1314. FDCDataElem.FDCStatus = ((ErrorCode)status).ToString();
  1315. ServiceResponseFDCdataStartForecourt[] FDCDataArray = { FDCDataElem };
  1316. SvRes.FDCdata = FDCDataArray;
  1317. ((FDCPOSInterfaceServerManager)fdcPosManager).FdcServerTcpHandler.SendResponse<ServiceResponseStartForecourt>(fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)], SvRes);
  1318. //FDCPOSManager.tracer.WriteLine("end");
  1319. }
  1320. public void StopForecourt(string workstationID, string applicationSender, int requestId, int status, string overallResult)
  1321. {
  1322. ////FDCPOSManager.tracer.WriteLine("init");
  1323. ServiceResponseStopForecourt SvRes = new ServiceResponseStopForecourt();
  1324. SvRes.WorkstationID = workstationID;
  1325. SvRes.ApplicationSender = applicationSender;
  1326. SvRes.RequestID = requestId.ToString();
  1327. SvRes.OverallResult = overallResult;
  1328. ServiceResponseFDCdataStopForecourt FDCDataElem = new ServiceResponseFDCdataStopForecourt();
  1329. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  1330. FDCDataElem.FDCStatus = ((ErrorCode)status).ToString();
  1331. ServiceResponseFDCdataStopForecourt[] FDCDataArray = { FDCDataElem };
  1332. SvRes.FDCdata = FDCDataArray;
  1333. ((FDCPOSInterfaceServerManager)fdcPosManager).FdcServerTcpHandler.SendResponse<ServiceResponseStopForecourt>(fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)], SvRes);
  1334. ////FDCPOSManager.tracer.WriteLine("end");
  1335. }
  1336. public bool GetCurrentFuellingStatusAdd(string workstationID, string applicationSender, int requestId, int deviceId, Decimal volume, Decimal amount, Decimal price, int nozzle, int transactionId, string releaseToken, string authorisationAS)
  1337. {
  1338. try
  1339. {
  1340. ////FDCPOSManager.tracer.WriteLine("init");
  1341. ServiceResponseGetCurrentFuellingStatus SvRes = null;
  1342. string key = FDCPOSClient.getClientID(workstationID, applicationSender) + "GetCurrentFuellingStatus";
  1343. if (serviceResponseClientList.ContainsKey(key))
  1344. SvRes = (ServiceResponseGetCurrentFuellingStatus)(serviceResponseClientList[key]);
  1345. if (SvRes == null)
  1346. {
  1347. SvRes = new ServiceResponseGetCurrentFuellingStatus();
  1348. SvRes.WorkstationID = workstationID;
  1349. SvRes.ApplicationSender = applicationSender;
  1350. SvRes.RequestID = requestId.ToString();
  1351. serviceResponseClientList.Add(key, SvRes);
  1352. }
  1353. else
  1354. {
  1355. if (SvRes.RequestType != "GetCurrentFuellingStatus" || Convert.ToInt32(SvRes.RequestID) != requestId)
  1356. {
  1357. ////FDCPOSManager.tracer.WriteLine(string.Format("SvRes.RequestID={0}, requestId={1} - end false", SvRes.RequestID, requestId));
  1358. return false;
  1359. }
  1360. }
  1361. ServiceResponseFDCdataGetCurrentFuellingStatus FDCDataElem = null;
  1362. if (SvRes.FDCdata != null)
  1363. FDCDataElem = SvRes.FDCdata[0];
  1364. else
  1365. {
  1366. ServiceResponseFDCdataGetCurrentFuellingStatus[] FDCDataArray = null;
  1367. FDCDataElem = new ServiceResponseFDCdataGetCurrentFuellingStatus();
  1368. Array.Resize<ServiceResponseFDCdataGetCurrentFuellingStatus>(ref FDCDataArray, (FDCDataArray != null) ? FDCDataArray.Length + 1 : 1);
  1369. FDCDataArray[FDCDataArray.Length - 1] = FDCDataElem;
  1370. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  1371. SvRes.FDCdata = FDCDataArray;
  1372. }
  1373. ServiceResponseDeviceClassGetCurrentFuellingStatus deviceClass = null;
  1374. if (FDCDataElem.DeviceClass != null)
  1375. {
  1376. foreach (ServiceResponseDeviceClassGetCurrentFuellingStatus fdcDeviceClassElemTemp in FDCDataElem.DeviceClass)
  1377. if (fdcDeviceClassElemTemp.DeviceID == Convert.ToString(deviceId))
  1378. deviceClass = fdcDeviceClassElemTemp;
  1379. }
  1380. if (deviceClass == null && deviceId > 0)
  1381. {
  1382. deviceClass = new ServiceResponseDeviceClassGetCurrentFuellingStatus();
  1383. deviceClass.DeviceID = Convert.ToString(deviceId);
  1384. deviceClass.PumpNo = Convert.ToString(deviceId);
  1385. deviceClass.Type = Wayne.FDCPOSLibrary.DeviceType.DT_FuellingPoint; // Wayne.FDCPOSLibrary.DeviceType.DT_FuelDispenser;
  1386. deviceClass.CurrentNozzle = Convert.ToString(nozzle);
  1387. deviceClass.CurrentVolume = FDCConvert.ToString(volume);
  1388. deviceClass.CurrentUnitPrice = Convert.ToString(price);
  1389. deviceClass.CurrentAmount = FDCConvert.ToString(amount);
  1390. if (FDCGlobal.ProtocolVersion == FDCVersion.V0003)
  1391. deviceClass.TransactionNo = Convert.ToString(transactionId);
  1392. else
  1393. deviceClass.TransactionSeqNo = Convert.ToString(transactionId);
  1394. deviceClass.ReleaseToken = releaseToken;
  1395. if (FDCGlobal.ProtocolVersion >= FDCVersion.V0005)
  1396. deviceClass.AuthorisationApplicationSender = authorisationAS;
  1397. ServiceResponseDeviceClassGetCurrentFuellingStatus[] fdcDeviceClassArray = FDCDataElem.DeviceClass;
  1398. Array.Resize<ServiceResponseDeviceClassGetCurrentFuellingStatus>(ref fdcDeviceClassArray, (fdcDeviceClassArray != null) ? fdcDeviceClassArray.Length + 1 : 1);
  1399. fdcDeviceClassArray[fdcDeviceClassArray.Length - 1] = deviceClass;
  1400. FDCDataElem.DeviceClass = fdcDeviceClassArray;
  1401. }
  1402. }
  1403. catch (Exception ex)
  1404. {
  1405. ////FDCPOSManager.tracer.WriteLine("Exception! " + ex.Message);
  1406. }
  1407. ////FDCPOSManager.tracer.WriteLine("end");
  1408. return true;
  1409. }
  1410. public bool GetCurrentFuellingStatusSend(string workstationID, string applicationSender, int requestId, int status, string overallResult)
  1411. {
  1412. try
  1413. {
  1414. ////FDCPOSManager.tracer.WriteLine("init");
  1415. ServiceResponseGetCurrentFuellingStatus SvRes = null;
  1416. string key = FDCPOSClient.getClientID(workstationID, applicationSender) + "GetCurrentFuellingStatus";
  1417. if (serviceResponseClientList.ContainsKey(key))
  1418. SvRes = (ServiceResponseGetCurrentFuellingStatus)(serviceResponseClientList[key]);
  1419. if (SvRes == null)
  1420. {
  1421. SvRes = new ServiceResponseGetCurrentFuellingStatus();
  1422. SvRes.WorkstationID = workstationID;
  1423. SvRes.ApplicationSender = applicationSender;
  1424. SvRes.RequestID = requestId.ToString();
  1425. serviceResponseClientList.Add(key, SvRes);
  1426. ServiceResponseFDCdataGetCurrentFuellingStatus FDCDataElem = new ServiceResponseFDCdataGetCurrentFuellingStatus();
  1427. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  1428. ServiceResponseFDCdataGetCurrentFuellingStatus[] FDCDataArray = { FDCDataElem };
  1429. SvRes.FDCdata = FDCDataArray;
  1430. }
  1431. else
  1432. {
  1433. if (SvRes.RequestType != "GetCurrentFuellingStatus" || Convert.ToInt32(SvRes.RequestID) != requestId)
  1434. {
  1435. ////FDCPOSManager.tracer.WriteLine(string.Format("SvRes.RequestID={0}, requestId={1} - end false", SvRes.RequestID, requestId));
  1436. return false;
  1437. }
  1438. }
  1439. if (FDCGlobal.ProtocolVersion >= FDCVersion.V0005)
  1440. SvRes.FDCdata[0].FDCStatus = ((ErrorCode)status).ToString();
  1441. SvRes.OverallResult = overallResult;
  1442. ((FDCPOSInterfaceServerManager)fdcPosManager).FdcServerTcpHandler.SendResponse<ServiceResponseGetCurrentFuellingStatus>(fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)], SvRes);
  1443. serviceResponseClientList.Remove(key);
  1444. ////FDCPOSManager.tracer.WriteLine("end");
  1445. return true;
  1446. }
  1447. catch (Exception ex)
  1448. {
  1449. ////FDCPOSManager.tracer.WriteLine("Exception! " + ex.Message);
  1450. }
  1451. return false;
  1452. }
  1453. public bool GetFuelPointTotalsAdd(string workstationID, string applicationSender, int requestId, int deviceId, int nozzleId, int productNo, decimal volume, decimal amount, decimal price)
  1454. {
  1455. try
  1456. {
  1457. ////FDCPOSManager.tracer.WriteLine("init");
  1458. ServiceResponseGetFuelPointTotals SvResFPTot = null;
  1459. ServiceResponseGetTotals SvResTot = null;
  1460. string commandName = (FDCGlobal.ProtocolVersion == FDCVersion.V0003) ? "GetFuelPointTotals" : "GetTotals";
  1461. string key = FDCPOSClient.getClientID(workstationID, applicationSender) + commandName;
  1462. if (FDCGlobal.ProtocolVersion == FDCVersion.V0003)
  1463. {
  1464. if (serviceResponseClientList.ContainsKey(key))
  1465. SvResFPTot = (ServiceResponseGetFuelPointTotals)(serviceResponseClientList[key]);
  1466. if (SvResFPTot == null)
  1467. {
  1468. SvResFPTot = new ServiceResponseGetFuelPointTotals();
  1469. SvResFPTot.WorkstationID = workstationID;
  1470. SvResFPTot.ApplicationSender = applicationSender;
  1471. SvResFPTot.RequestID = requestId.ToString();
  1472. serviceResponseClientList.Add(key, SvResFPTot);
  1473. }
  1474. else
  1475. {
  1476. if (SvResFPTot.RequestType != commandName || Convert.ToInt32(SvResFPTot.RequestID) != requestId)
  1477. {
  1478. ////FDCPOSManager.tracer.WriteLine(string.Format("SvResFPTot.RequestID={0}, requestId={1} - end false", SvResFPTot.RequestID, requestId));
  1479. return false;
  1480. }
  1481. }
  1482. }
  1483. else
  1484. {
  1485. if (serviceResponseClientList.ContainsKey(key))
  1486. SvResTot = (ServiceResponseGetTotals)(serviceResponseClientList[key]);
  1487. if (SvResTot == null)
  1488. {
  1489. SvResTot = new ServiceResponseGetTotals();
  1490. SvResTot.WorkstationID = workstationID;
  1491. SvResTot.ApplicationSender = applicationSender;
  1492. SvResTot.RequestID = requestId.ToString();
  1493. serviceResponseClientList.Add(key, SvResTot);
  1494. }
  1495. else
  1496. {
  1497. if (SvResTot.RequestType != commandName || Convert.ToInt32(SvResTot.RequestID) != requestId)
  1498. {
  1499. ////FDCPOSManager.tracer.WriteLine(string.Format("SvResTot.RequestID={0}, requestId={1} - end false", SvResTot.RequestID, requestId));
  1500. return false;
  1501. }
  1502. }
  1503. }
  1504. ServiceResponseFDCdataGetFuelPointTotals FDCDataElem = null;
  1505. if (SvResFPTot != null && SvResFPTot.FDCdata != null)
  1506. FDCDataElem = SvResFPTot.FDCdata[0];
  1507. else if (SvResTot != null && SvResTot.FDCdata != null)
  1508. FDCDataElem = SvResTot.FDCdata[0];
  1509. else
  1510. {
  1511. ServiceResponseFDCdataGetFuelPointTotals[] FDCDataArray = null;
  1512. FDCDataElem = new ServiceResponseFDCdataGetFuelPointTotals();
  1513. Array.Resize<ServiceResponseFDCdataGetFuelPointTotals>(ref FDCDataArray, (FDCDataArray != null) ? FDCDataArray.Length + 1 : 1);
  1514. FDCDataArray[FDCDataArray.Length - 1] = FDCDataElem;
  1515. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  1516. if (FDCGlobal.ProtocolVersion == FDCVersion.V0003)
  1517. SvResFPTot.FDCdata = FDCDataArray;
  1518. else
  1519. SvResTot.FDCdata = FDCDataArray;
  1520. }
  1521. ServiceResponseDeviceClassGetFuelPointTotals fdcDeviceClassElem = null;
  1522. if (FDCDataElem.DeviceClass != null)
  1523. {
  1524. foreach (ServiceResponseDeviceClassGetFuelPointTotals fdcDeviceClassElemTemp in FDCDataElem.DeviceClass)
  1525. if (fdcDeviceClassElemTemp.DeviceID == Convert.ToString(deviceId) && fdcDeviceClassElemTemp.NozzleNo == Convert.ToString(nozzleId))
  1526. fdcDeviceClassElem = fdcDeviceClassElemTemp;
  1527. }
  1528. if (fdcDeviceClassElem == null && deviceId > 0)
  1529. {
  1530. fdcDeviceClassElem = new ServiceResponseDeviceClassGetFuelPointTotals();
  1531. fdcDeviceClassElem.DeviceID = Convert.ToString(deviceId);
  1532. fdcDeviceClassElem.PumpNo = Convert.ToString(deviceId);
  1533. fdcDeviceClassElem.Type = Wayne.FDCPOSLibrary.DeviceType.DT_FuellingPoint; // Wayne.FDCPOSLibrary.DeviceType.DT_FuelDispenser;
  1534. fdcDeviceClassElem.NozzleNo = Convert.ToString(nozzleId);
  1535. if (FDCGlobal.ProtocolVersion == FDCVersion.V0003)
  1536. {
  1537. fdcDeviceClassElem.Product1No = Convert.ToString(productNo);
  1538. fdcDeviceClassElem.Product2No = "";
  1539. }
  1540. else
  1541. {
  1542. fdcDeviceClassElem.ProductNo1 = Convert.ToString(productNo);
  1543. fdcDeviceClassElem.ProductNo2 = "";
  1544. }
  1545. fdcDeviceClassElem.Amount = FDCConvert.ToString(amount);
  1546. fdcDeviceClassElem.Volume = FDCConvert.ToString(volume);
  1547. if (FDCGlobal.ProtocolVersion < FDCVersion.V0007)
  1548. fdcDeviceClassElem.UnitPrice = FDCConvert.ToString(price);
  1549. fdcDeviceClassElem.VolumeProduct1 = FDCConvert.ToString(volume);
  1550. fdcDeviceClassElem.VolumeProduct2 = FDCConvert.ToString((Decimal)0);
  1551. if (FDCGlobal.ProtocolVersion < FDCVersion.V0007)
  1552. fdcDeviceClassElem.BlendRatio = Convert.ToString(100);
  1553. ServiceResponseDeviceClassGetFuelPointTotals[] fdcDeviceClassArray = FDCDataElem.DeviceClass;
  1554. Array.Resize<ServiceResponseDeviceClassGetFuelPointTotals>(ref fdcDeviceClassArray, (fdcDeviceClassArray != null) ? fdcDeviceClassArray.Length + 1 : 1);
  1555. fdcDeviceClassArray[fdcDeviceClassArray.Length - 1] = fdcDeviceClassElem;
  1556. FDCDataElem.DeviceClass = fdcDeviceClassArray;
  1557. }
  1558. }
  1559. catch (Exception ex)
  1560. {
  1561. ////FDCPOSManager.tracer.WriteLine("Exception! " + ex.Message);
  1562. }
  1563. ////FDCPOSManager.tracer.WriteLine("end");
  1564. return true;
  1565. }
  1566. public bool GetFuelPointTotalsSend(string workstationID, string applicationSender, int requestId, int status, string overallResult)
  1567. {
  1568. try
  1569. {
  1570. ////FDCPOSManager.tracer.WriteLine("init");
  1571. ServiceResponseGetFuelPointTotals SvResFPTot = null;
  1572. ServiceResponseGetTotals SvResTot = null;
  1573. string commandName = (FDCGlobal.ProtocolVersion == FDCVersion.V0003) ? "GetFuelPointTotals" : "GetTotals";
  1574. string key = FDCPOSClient.getClientID(workstationID, applicationSender) + commandName;
  1575. if (FDCGlobal.ProtocolVersion == FDCVersion.V0003)
  1576. {
  1577. if (serviceResponseClientList.ContainsKey(key))
  1578. SvResFPTot = (ServiceResponseGetFuelPointTotals)(serviceResponseClientList[key]);
  1579. if (SvResFPTot != null)
  1580. {
  1581. if (SvResFPTot.RequestType != commandName || Convert.ToInt32(SvResFPTot.RequestID) != requestId)
  1582. {
  1583. ////FDCPOSManager.tracer.WriteLine(string.Format("SvResFPTot.RequestID={0}, requestId={1} - end false", SvResFPTot.RequestID, requestId));
  1584. return false;
  1585. }
  1586. }
  1587. else
  1588. {
  1589. // send an empty response - no available data added
  1590. SvResFPTot = new ServiceResponseGetFuelPointTotals();
  1591. SvResFPTot.WorkstationID = workstationID;
  1592. SvResFPTot.ApplicationSender = applicationSender;
  1593. SvResFPTot.RequestID = requestId.ToString();
  1594. serviceResponseClientList.Add(key, SvResFPTot);
  1595. ServiceResponseFDCdataGetFuelPointTotals FDCDataElem = new ServiceResponseFDCdataGetFuelPointTotals();
  1596. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  1597. ServiceResponseFDCdataGetFuelPointTotals[] FDCDataArray = { FDCDataElem };
  1598. SvResFPTot.FDCdata = FDCDataArray;
  1599. }
  1600. if (FDCGlobal.ProtocolVersion >= FDCVersion.V0005)
  1601. SvResFPTot.FDCdata[0].FDCStatus = ((ErrorCode)status).ToString();
  1602. SvResFPTot.OverallResult = overallResult;
  1603. ((FDCPOSInterfaceServerManager)fdcPosManager).FdcServerTcpHandler.SendResponse<ServiceResponseGetFuelPointTotals>(fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)], SvResFPTot);
  1604. }
  1605. else
  1606. {
  1607. if (serviceResponseClientList.ContainsKey(key))
  1608. SvResTot = (ServiceResponseGetTotals)(serviceResponseClientList[key]);
  1609. if (SvResTot != null)
  1610. {
  1611. if (SvResTot.RequestType != commandName || Convert.ToInt32(SvResTot.RequestID) != requestId)
  1612. {
  1613. ////FDCPOSManager.tracer.WriteLine(string.Format("SvResTot.RequestID={0}, requestId={1} - end false", SvResTot.RequestID, requestId));
  1614. return false;
  1615. }
  1616. }
  1617. else
  1618. {
  1619. // send an empty response - no available data added
  1620. SvResTot = new ServiceResponseGetTotals();
  1621. SvResTot.WorkstationID = workstationID;
  1622. SvResTot.ApplicationSender = applicationSender;
  1623. SvResTot.RequestID = requestId.ToString();
  1624. serviceResponseClientList.Add(key, SvResTot);
  1625. ServiceResponseFDCdataGetFuelPointTotals FDCDataElem = new ServiceResponseFDCdataGetFuelPointTotals();
  1626. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  1627. ServiceResponseFDCdataGetFuelPointTotals[] FDCDataArray = { FDCDataElem };
  1628. SvResTot.FDCdata = FDCDataArray;
  1629. }
  1630. if (FDCGlobal.ProtocolVersion >= FDCVersion.V0005)
  1631. SvResTot.FDCdata[0].FDCStatus = ((ErrorCode)status).ToString();
  1632. SvResTot.OverallResult = overallResult;
  1633. ((FDCPOSInterfaceServerManager)fdcPosManager).FdcServerTcpHandler.SendResponse<ServiceResponseGetTotals>(fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)], SvResTot);
  1634. }
  1635. serviceResponseClientList.Remove(key);
  1636. ////FDCPOSManager.tracer.WriteLine("end");
  1637. return true;
  1638. }
  1639. catch (Exception ex)
  1640. {
  1641. ////FDCPOSManager.tracer.WriteLine("Exception! " + ex.Message);
  1642. }
  1643. return false;
  1644. }
  1645. public bool GetDeviceStateAdd(string workstationID, string applicationSender, int requestId, string deviceType, int deviceId, LogicalDeviceState deviceState, LogicalDeviceState deviceSubState, string errorId, string errorDescription, LogicalState logicalState, string lockingAS, int nozzleListNum, int nozzleListState, int nozzleListLogicalState, int nozzleListTankState)
  1646. {
  1647. try
  1648. {
  1649. ////FDCPOSManager.tracer.WriteLine("init");
  1650. string commandName = (FDCGlobal.ProtocolVersion <= FDCVersion.V0005) ? "GetDeviceState" : "GetFPState";
  1651. string key = FDCPOSClient.getClientID(workstationID, applicationSender) + commandName;
  1652. ServiceResponseGetDeviceState SvResDevice = null;
  1653. ServiceResponseGetFPState SvResFP = null;
  1654. if (FDCGlobal.ProtocolVersion <= FDCVersion.V0005)
  1655. {
  1656. if (serviceResponseClientList.ContainsKey(key))
  1657. SvResDevice = (ServiceResponseGetDeviceState)(serviceResponseClientList[key]);
  1658. if (SvResDevice == null)
  1659. {
  1660. SvResDevice = new ServiceResponseGetDeviceState();
  1661. SvResDevice.WorkstationID = workstationID;
  1662. SvResDevice.ApplicationSender = applicationSender;
  1663. SvResDevice.RequestID = requestId.ToString();
  1664. serviceResponseClientList.Add(key, SvResDevice);
  1665. }
  1666. else
  1667. {
  1668. if (SvResDevice.RequestType != commandName || Convert.ToInt32(SvResDevice.RequestID) != requestId)
  1669. {
  1670. ////FDCPOSManager.tracer.WriteLine(string.Format("SvRes.RequestID={0}, requestId={1} - end false", SvResDevice.RequestID, requestId));
  1671. return false;
  1672. }
  1673. }
  1674. }
  1675. else
  1676. {
  1677. if (serviceResponseClientList.ContainsKey(key))
  1678. SvResFP = (ServiceResponseGetFPState)(serviceResponseClientList[key]);
  1679. if (SvResFP == null)
  1680. {
  1681. SvResFP = new ServiceResponseGetFPState();
  1682. SvResFP.WorkstationID = workstationID;
  1683. SvResFP.ApplicationSender = applicationSender;
  1684. SvResFP.RequestID = requestId.ToString();
  1685. serviceResponseClientList.Add(key, SvResFP);
  1686. }
  1687. else
  1688. {
  1689. if (SvResFP.RequestType != commandName || Convert.ToInt32(SvResFP.RequestID) != requestId)
  1690. {
  1691. ////FDCPOSManager.tracer.WriteLine(string.Format("SvRes.RequestID={0}, requestId={1} - end false", SvResFP.RequestID, requestId));
  1692. return false;
  1693. }
  1694. }
  1695. }
  1696. ServiceResponseFDCdataGetDeviceState FDCDataElem = null;
  1697. if (SvResDevice != null && SvResDevice.FDCdata != null)
  1698. FDCDataElem = SvResDevice.FDCdata[0];
  1699. else if (SvResFP != null && SvResFP.FDCdata != null)
  1700. FDCDataElem = SvResFP.FDCdata[0];
  1701. else
  1702. {
  1703. ServiceResponseFDCdataGetDeviceState[] FDCDataArray = null;
  1704. FDCDataElem = new ServiceResponseFDCdataGetDeviceState();
  1705. Array.Resize<ServiceResponseFDCdataGetDeviceState>(ref FDCDataArray, (FDCDataArray != null) ? FDCDataArray.Length + 1 : 1);
  1706. FDCDataArray[FDCDataArray.Length - 1] = FDCDataElem;
  1707. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  1708. if (FDCGlobal.ProtocolVersion <= FDCVersion.V0005)
  1709. SvResDevice.FDCdata = FDCDataArray;
  1710. else if (FDCGlobal.ProtocolVersion > FDCVersion.V0005)
  1711. SvResFP.FDCdata = FDCDataArray;
  1712. }
  1713. ServiceResponseDeviceClassGetDeviceState fdcDeviceClassElem = null;
  1714. if (FDCDataElem.DeviceClass != null)
  1715. {
  1716. foreach (ServiceResponseDeviceClassGetDeviceState fdcDeviceClassElemTemp in FDCDataElem.DeviceClass)
  1717. if (fdcDeviceClassElemTemp.DeviceID == Convert.ToString(deviceId))
  1718. fdcDeviceClassElem = fdcDeviceClassElemTemp;
  1719. }
  1720. if (fdcDeviceClassElem == null && deviceId > 0)
  1721. {
  1722. fdcDeviceClassElem = new ServiceResponseDeviceClassGetDeviceState();
  1723. fdcDeviceClassElem.DeviceID = Convert.ToString(deviceId);
  1724. fdcDeviceClassElem.Type = deviceType;
  1725. fdcDeviceClassElem.ErrorDescription = errorDescription;
  1726. fdcDeviceClassElem.ErrorID = errorId;
  1727. if (FDCGlobal.ProtocolVersion == FDCVersion.V0003)
  1728. {
  1729. fdcDeviceClassElem.PumpNo = Convert.ToString(deviceId);
  1730. fdcDeviceClassElem.LogicalState = deviceState.ToString();
  1731. fdcDeviceClassElem.LogicalSubState = (deviceSubState == LogicalDeviceState.FDC_UNDEFINED) ? "" : deviceSubState.ToString();
  1732. }
  1733. else
  1734. {
  1735. fdcDeviceClassElem.DeviceState = deviceState.ToString();
  1736. if (this.fdcPosManager.useExtensions)
  1737. fdcDeviceClassElem.DeviceSubState = (deviceSubState == LogicalDeviceState.FDC_UNDEFINED) ? "" : deviceSubState.ToString();
  1738. fdcDeviceClassElem.LockingApplicationSender = lockingAS;
  1739. if (FDCGlobal.ProtocolVersion >= FDCVersion.V0007)
  1740. {
  1741. NozzleStateClass[] nsArray = null;
  1742. NozzleState nozzleState;
  1743. LogicalState nozzleLogicalState, nozzleTankState;
  1744. int i;
  1745. for (i = 0; i < nozzleListNum; i++)
  1746. {
  1747. Array.Resize<NozzleStateClass>(ref nsArray, (nsArray != null) ? nsArray.Length + 1 : 1);
  1748. NozzleStateClass ns = new NozzleStateClass();
  1749. nsArray[nsArray.Length - 1] = ns;
  1750. ns.NozzleNo = Convert.ToString(i + 1);
  1751. nozzleState = ((nozzleListState & ((int)(1 << i))) != 0) ? NozzleState.NozzleUp : NozzleState.NozzleDown;
  1752. ns.LogicalNozzle = nozzleState.ToString();
  1753. nozzleLogicalState = ((nozzleListLogicalState & ((int)(1 << i))) != 0) ? LogicalState.Locked : LogicalState.Unlocked;
  1754. ns.LogicalState = nozzleLogicalState.ToString();
  1755. nozzleTankState = ((nozzleListTankState & ((int)(1 << i))) != 0) ? LogicalState.Locked : LogicalState.Unlocked;
  1756. ns.TankLogicalState = nozzleTankState.ToString();
  1757. }
  1758. fdcDeviceClassElem.Nozzle = nsArray;
  1759. }
  1760. else if (FDCGlobal.ProtocolVersion == FDCVersion.V0005)
  1761. {
  1762. fdcDeviceClassElem.LogicalState = logicalState.ToString();
  1763. }
  1764. }
  1765. ServiceResponseDeviceClassGetDeviceState[] fdcDeviceClassArray = FDCDataElem.DeviceClass;
  1766. Array.Resize<ServiceResponseDeviceClassGetDeviceState>(ref fdcDeviceClassArray, (fdcDeviceClassArray != null) ? fdcDeviceClassArray.Length + 1 : 1);
  1767. fdcDeviceClassArray[fdcDeviceClassArray.Length - 1] = fdcDeviceClassElem;
  1768. FDCDataElem.DeviceClass = fdcDeviceClassArray;
  1769. }
  1770. return true;
  1771. }
  1772. catch (Exception ex)
  1773. {
  1774. ////FDCPOSManager.tracer.WriteLine("Exception! " + ex.Message);
  1775. }
  1776. ////FDCPOSManager.tracer.WriteLine("end");
  1777. return false;
  1778. }
  1779. public bool GetDeviceStateSend(string workstationID, string applicationSender, int requestId, int status, string overallResult)
  1780. {
  1781. try
  1782. {
  1783. ////FDCPOSManager.tracer.WriteLine("init");
  1784. ServiceResponseGetDeviceState SvResDevice = null;
  1785. ServiceResponseGetFPState SvResFP = null;
  1786. string commandName = (FDCGlobal.ProtocolVersion <= FDCVersion.V0005) ? "GetDeviceState" : "GetFPState";
  1787. string key = FDCPOSClient.getClientID(workstationID, applicationSender) + commandName;
  1788. if (FDCGlobal.ProtocolVersion <= FDCVersion.V0005)
  1789. {
  1790. if (serviceResponseClientList.ContainsKey(key))
  1791. SvResDevice = (ServiceResponseGetDeviceState)(serviceResponseClientList[key]);
  1792. if (SvResDevice != null)
  1793. {
  1794. if (SvResDevice.RequestType != commandName || Convert.ToInt32(SvResDevice.RequestID) != requestId)
  1795. {
  1796. ////FDCPOSManager.tracer.WriteLine(string.Format("SvResDevice.RequestID={0}, requestId={1} - end false", SvResDevice.RequestID, requestId));
  1797. return false;
  1798. }
  1799. }
  1800. else
  1801. {
  1802. // send an empty response - no available data added
  1803. SvResDevice = new ServiceResponseGetDeviceState();
  1804. SvResDevice.WorkstationID = workstationID;
  1805. SvResDevice.ApplicationSender = applicationSender;
  1806. SvResDevice.RequestID = requestId.ToString();
  1807. serviceResponseClientList.Add(key, SvResDevice);
  1808. ServiceResponseFDCdataGetDeviceState FDCDataElem = new ServiceResponseFDCdataGetDeviceState();
  1809. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  1810. ServiceResponseFDCdataGetDeviceState[] FDCDataArray = { FDCDataElem };
  1811. SvResDevice.FDCdata = FDCDataArray;
  1812. }
  1813. if (FDCGlobal.ProtocolVersion >= FDCVersion.V0005)
  1814. SvResDevice.FDCdata[0].FDCStatus = ((ErrorCode)status).ToString();
  1815. SvResDevice.OverallResult = overallResult;
  1816. ((FDCPOSInterfaceServerManager)fdcPosManager).FdcServerTcpHandler.SendResponse<ServiceResponseGetDeviceState>(fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)], SvResDevice);
  1817. }
  1818. else
  1819. {
  1820. if (serviceResponseClientList.ContainsKey(key))
  1821. SvResFP = (ServiceResponseGetFPState)(serviceResponseClientList[key]);
  1822. if (SvResFP != null)
  1823. {
  1824. if (SvResFP.RequestType != commandName || Convert.ToInt32(SvResFP.RequestID) != requestId)
  1825. {
  1826. //FDCPOSManager.tracer.WriteLine(string.Format("SvResFP.RequestID={0}, requestId={1} - end false", SvResFP.RequestID, requestId));
  1827. return false;
  1828. }
  1829. }
  1830. else
  1831. {
  1832. // send an empty response - no available data added
  1833. SvResFP = new ServiceResponseGetFPState();
  1834. SvResFP.WorkstationID = workstationID;
  1835. SvResFP.ApplicationSender = applicationSender;
  1836. SvResFP.RequestID = requestId.ToString();
  1837. serviceResponseClientList.Add(key, SvResFP);
  1838. ServiceResponseFDCdataGetDeviceState FDCDataElem = new ServiceResponseFDCdataGetDeviceState();
  1839. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  1840. ServiceResponseFDCdataGetDeviceState[] FDCDataArray = { FDCDataElem };
  1841. SvResFP.FDCdata = FDCDataArray;
  1842. }
  1843. if (FDCGlobal.ProtocolVersion >= FDCVersion.V0005)
  1844. SvResFP.FDCdata[0].FDCStatus = ((ErrorCode)status).ToString();
  1845. SvResFP.OverallResult = overallResult;
  1846. ((FDCPOSInterfaceServerManager)fdcPosManager).FdcServerTcpHandler.SendResponse<ServiceResponseGetFPState>(fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)], SvResFP);
  1847. }
  1848. serviceResponseClientList.Remove(key);
  1849. //FDCPOSManager.tracer.WriteLine("end");
  1850. return true;
  1851. }
  1852. catch (Exception ex)
  1853. {
  1854. //FDCPOSManager.tracer.WriteLine("Exception! " + ex.Message);
  1855. }
  1856. return false;
  1857. }
  1858. public bool TerminateFuellingAdd(string workstationID, string applicationSender, int requestId, int deviceId, LogicalDeviceState deviceStatus)
  1859. {
  1860. try
  1861. {
  1862. //FDCPOSManager.tracer.WriteLine("init");
  1863. ServiceResponseTerminateFuelling SvRes = null;
  1864. string key = FDCPOSClient.getClientID(workstationID, applicationSender) + "TerminateFuelling";
  1865. if (serviceResponseClientList.ContainsKey(key))
  1866. SvRes = (ServiceResponseTerminateFuelling)(serviceResponseClientList[key]);
  1867. if (SvRes == null)
  1868. {
  1869. SvRes = new ServiceResponseTerminateFuelling();
  1870. SvRes.WorkstationID = workstationID;
  1871. SvRes.ApplicationSender = applicationSender;
  1872. SvRes.RequestID = requestId.ToString();
  1873. serviceResponseClientList.Add(key, SvRes);
  1874. }
  1875. else
  1876. {
  1877. if (SvRes.RequestType != "TerminateFuelling" || Convert.ToInt32(SvRes.RequestID) != requestId)
  1878. {
  1879. //FDCPOSManager.tracer.WriteLine(string.Format("SvRes.RequestID={0}, requestId={1} - end false", SvRes.RequestID, requestId));
  1880. return false;
  1881. }
  1882. }
  1883. ServiceResponseFDCdataTerminateFuelling FDCDataElem = null;
  1884. if (SvRes.FDCdata != null)
  1885. FDCDataElem = SvRes.FDCdata[0];
  1886. else
  1887. {
  1888. ServiceResponseFDCdataTerminateFuelling[] FDCDataArray = null;
  1889. FDCDataElem = new ServiceResponseFDCdataTerminateFuelling();
  1890. Array.Resize<ServiceResponseFDCdataTerminateFuelling>(ref FDCDataArray, (FDCDataArray != null) ? FDCDataArray.Length + 1 : 1);
  1891. FDCDataArray[FDCDataArray.Length - 1] = FDCDataElem;
  1892. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  1893. //FDCDataElem.FDCStatus = ((ErrorCode)status).ToString();
  1894. SvRes.FDCdata = FDCDataArray;
  1895. }
  1896. ServiceResponseDeviceClassTerminateFuelling fdcDeviceClassElem = null;
  1897. if (FDCDataElem.DeviceClass != null)
  1898. {
  1899. foreach (ServiceResponseDeviceClassTerminateFuelling fdcDeviceClassElemTemp in FDCDataElem.DeviceClass)
  1900. if (fdcDeviceClassElemTemp.DeviceID == Convert.ToString(deviceId))
  1901. fdcDeviceClassElem = fdcDeviceClassElemTemp;
  1902. }
  1903. if (fdcDeviceClassElem == null && deviceId > 0)
  1904. {
  1905. fdcDeviceClassElem = new ServiceResponseDeviceClassTerminateFuelling();
  1906. fdcDeviceClassElem.DeviceID = Convert.ToString(deviceId);
  1907. fdcDeviceClassElem.PumpNo = Convert.ToString(deviceId);
  1908. fdcDeviceClassElem.Type = Wayne.FDCPOSLibrary.DeviceType.DT_FuellingPoint; // Wayne.FDCPOSLibrary.DeviceType.DT_FuelDispenser;
  1909. if (FDCGlobal.ProtocolVersion == FDCVersion.V0005)
  1910. fdcDeviceClassElem.DeviceState = deviceStatus.ToString();
  1911. ServiceResponseDeviceClassTerminateFuelling[] fdcDeviceClassArray = FDCDataElem.DeviceClass;
  1912. Array.Resize<ServiceResponseDeviceClassTerminateFuelling>(ref fdcDeviceClassArray, (fdcDeviceClassArray != null) ? fdcDeviceClassArray.Length + 1 : 1);
  1913. fdcDeviceClassArray[fdcDeviceClassArray.Length - 1] = fdcDeviceClassElem;
  1914. FDCDataElem.DeviceClass = fdcDeviceClassArray;
  1915. }
  1916. //FDCPOSManager.tracer.WriteLine("end");
  1917. return true;
  1918. }
  1919. catch (Exception ex)
  1920. {
  1921. //FDCPOSManager.tracer.WriteLine("Exception! " + ex.Message);
  1922. }
  1923. //FDCPOSManager.tracer.WriteLine("end");
  1924. return false;
  1925. }
  1926. public bool TerminateFuellingSend(string workstationID, string applicationSender, int requestId, int status, string overallResult)
  1927. {
  1928. try
  1929. {
  1930. //FDCPOSManager.tracer.WriteLine("init");
  1931. ServiceResponseTerminateFuelling SvRes = null;
  1932. string key = FDCPOSClient.getClientID(workstationID, applicationSender) + "TerminateFuelling";
  1933. if (serviceResponseClientList.ContainsKey(key))
  1934. SvRes = (ServiceResponseTerminateFuelling)(serviceResponseClientList[key]);
  1935. if (SvRes != null)
  1936. {
  1937. if (SvRes.RequestType != "TerminateFuelling" || Convert.ToInt32(SvRes.RequestID) != requestId)
  1938. {
  1939. //FDCPOSManager.tracer.WriteLine(string.Format("SvRes.RequestID={0}, requestId={1} - end false", SvRes.RequestID, requestId));
  1940. return false;
  1941. }
  1942. }
  1943. else
  1944. {
  1945. // send an empty response - no available data added
  1946. SvRes = new ServiceResponseTerminateFuelling();
  1947. SvRes.WorkstationID = workstationID;
  1948. SvRes.ApplicationSender = applicationSender;
  1949. SvRes.RequestID = requestId.ToString();
  1950. serviceResponseClientList.Add(key, SvRes);
  1951. ServiceResponseFDCdataTerminateFuelling FDCDataElem = new ServiceResponseFDCdataTerminateFuelling();
  1952. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  1953. ServiceResponseFDCdataTerminateFuelling[] FDCDataArray = { FDCDataElem };
  1954. SvRes.FDCdata = FDCDataArray;
  1955. }
  1956. if (FDCGlobal.ProtocolVersion >= FDCVersion.V0005)
  1957. SvRes.FDCdata[0].FDCStatus = ((ErrorCode)status).ToString();
  1958. SvRes.OverallResult = overallResult;
  1959. ((FDCPOSInterfaceServerManager)fdcPosManager).FdcServerTcpHandler.SendResponse<ServiceResponseTerminateFuelling>(fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)], SvRes);
  1960. serviceResponseClientList.Remove(key);
  1961. //FDCPOSManager.tracer.WriteLine("end");
  1962. return true;
  1963. }
  1964. catch (Exception ex)
  1965. {
  1966. //FDCPOSManager.tracer.WriteLine("Exception! " + ex.Message);
  1967. }
  1968. return false;
  1969. }
  1970. public void AuthoriseFuelPoint(string workstationID, string applicationSender, int requestId, int transactionId, string releaseToken, int deviceId, LogicalDeviceState deviceStatus, int status, string overallResult)
  1971. {
  1972. //form.TransactionIdSetText(Convert.ToString(transactionId));
  1973. //FDCPOSManager.tracer.WriteLine("init");
  1974. ServiceResponseAuthoriseFuelPoint SvRes = new ServiceResponseAuthoriseFuelPoint();
  1975. SvRes.WorkstationID = workstationID;
  1976. SvRes.ApplicationSender = applicationSender;
  1977. SvRes.RequestID = requestId.ToString();
  1978. SvRes.OverallResult = overallResult;
  1979. ServiceResponseFDCdataAuthoriseFuelPoint FDCDataElem = new ServiceResponseFDCdataAuthoriseFuelPoint();
  1980. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  1981. FDCDataElem.FDCStatus = ((ErrorCode)status).ToString();
  1982. ServiceResponseDeviceClassAuthoriseFuelPoint deviceClass = new ServiceResponseDeviceClassAuthoriseFuelPoint();
  1983. deviceClass.DeviceID = Convert.ToString(deviceId);
  1984. deviceClass.PumpNo = Convert.ToString(deviceId);
  1985. deviceClass.Type = Wayne.FDCPOSLibrary.DeviceType.DT_FuellingPoint; // Wayne.FDCPOSLibrary.DeviceType.DT_FuelDispenser;
  1986. if (FDCGlobal.ProtocolVersion >= FDCVersion.V0005)
  1987. deviceClass.DeviceState = deviceStatus.ToString();
  1988. if (this.fdcPosManager.useExtensions)
  1989. deviceClass.ReleaseToken = releaseToken;
  1990. FDCDataElem.DeviceClass = deviceClass;
  1991. ServiceResponseFDCdataAuthoriseFuelPoint[] FDCDataArray = { FDCDataElem };
  1992. SvRes.FDCdata = FDCDataArray;
  1993. ((FDCPOSInterfaceServerManager)fdcPosManager).FdcServerTcpHandler.SendResponse<ServiceResponseAuthoriseFuelPoint>(fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)], SvRes);
  1994. //FDCPOSManager.tracer.WriteLine("end");
  1995. }
  1996. public void ChangeFuelMode(string workstationID, string applicationSender, int requestId, string deviceType, int deviceId, int mode, int status, string overallResult)
  1997. {
  1998. //FDCPOSManager.tracer.WriteLine(string.Format("init: deviceId={0}", deviceId));
  1999. ServiceResponseChangeFuelMode SvRes = new ServiceResponseChangeFuelMode();
  2000. SvRes.WorkstationID = workstationID;
  2001. SvRes.ApplicationSender = applicationSender;
  2002. SvRes.RequestID = requestId.ToString(); ;
  2003. SvRes.OverallResult = overallResult;
  2004. ServiceResponseFDCdataChangeFuelMode FDCDataElem = new ServiceResponseFDCdataChangeFuelMode();
  2005. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  2006. FDCDataElem.FDCStatus = ((ErrorCode)status).ToString();
  2007. ServiceResponseDeviceClassChangeFuelMode deviceClass = new ServiceResponseDeviceClassChangeFuelMode();
  2008. deviceClass.DeviceID = Convert.ToString(deviceId);
  2009. deviceClass.PumpNo = Convert.ToString(deviceId);
  2010. ////FDCPOSManager.tracer.WriteLine(string.Format("deviceId={0}, deviceClass.DeviceID={1}", deviceId, deviceClass.DeviceID));
  2011. deviceClass.Type = deviceType; // Wayne.FDCPOSLibrary.DeviceType.DT_FuelDispenser;
  2012. FDCDataElem.DeviceClass = deviceClass;
  2013. ServiceResponseFDCdataChangeFuelMode[] FDCDataArray = { FDCDataElem };
  2014. SvRes.FDCdata = FDCDataArray;
  2015. ((FDCPOSInterfaceServerManager)fdcPosManager).FdcServerTcpHandler.SendResponse<ServiceResponseChangeFuelMode>(fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)], SvRes);
  2016. //FDCPOSManager.tracer.WriteLine("end");
  2017. }
  2018. //public bool ChangeFuelModeAdd(string workstationID, string applicationSender, int requestId, int deviceId, int mode, int status)
  2019. //{
  2020. // try
  2021. // {
  2022. // //FDCPOSManager.tracer.WriteLine("init");
  2023. // ServiceResponseChangeFuelMode SvRes = null;
  2024. // string key = FDCPOSClient.getClientID(workstationID, applicationSender) + "ChangeFuelMode";
  2025. // if (serviceResponseClientList.ContainsKey(key))
  2026. // SvRes = (ServiceResponseChangeFuelMode)(serviceResponseClientList[key]);
  2027. // if (SvRes == null)
  2028. // {
  2029. // SvRes = new ServiceResponseChangeFuelMode();
  2030. // SvRes.WorkstationID = workstationID;
  2031. // SvRes.ApplicationSender = applicationSender;
  2032. // SvRes.RequestID = requestId.ToString();
  2033. // serviceResponseClientList.Add(key, SvRes);
  2034. // }
  2035. // else
  2036. // {
  2037. // if (SvRes.RequestType != "ChangeFuelMode" || Convert.ToInt32(SvRes.RequestID) != requestId)
  2038. // return false;
  2039. // }
  2040. // ServiceResponseFDCdataChangeFuelMode FDCDataElem = null;
  2041. // if (SvRes.FDCdata != null)
  2042. // FDCDataElem = SvRes.FDCdata[0];
  2043. // else
  2044. // {
  2045. // ServiceResponseFDCdataChangeFuelMode[] FDCDataArray = null;
  2046. // FDCDataElem = new ServiceResponseFDCdataChangeFuelMode();
  2047. // Array.Resize<ServiceResponseFDCdataChangeFuelMode>(ref FDCDataArray, (FDCDataArray != null) ? FDCDataArray.Length + 1 : 1);
  2048. // FDCDataArray[FDCDataArray.Length - 1] = FDCDataElem;
  2049. // FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  2050. // FDCDataElem.FDCStatus = ((ErrorCode)status).ToString();
  2051. // SvRes.FDCdata = FDCDataArray;
  2052. // }
  2053. // ServiceResponseDeviceClassChangeFuelMode fdcDeviceClassElem = null;
  2054. // if (FDCDataElem.DeviceClass != null)
  2055. // {
  2056. // foreach (ServiceResponseDeviceClassChangeFuelMode fdcDeviceClassElemTemp in FDCDataElem.DeviceClass)
  2057. // if (fdcDeviceClassElemTemp.DeviceID == Convert.ToString(deviceId))
  2058. // fdcDeviceClassElem = fdcDeviceClassElemTemp;
  2059. // }
  2060. // if (fdcDeviceClassElem == null && deviceId > 0)
  2061. // {
  2062. // fdcDeviceClassElem = new ServiceResponseDeviceClassChangeFuelMode();
  2063. // fdcDeviceClassElem.DeviceID = Convert.ToString(deviceId);
  2064. // fdcDeviceClassElem.PumpNo = Convert.ToString(deviceId);
  2065. // fdcDeviceClassElem.Type = Wayne.FDCPOSLibrary.DeviceType.DT_FuelDispenser;
  2066. // ServiceResponseDeviceClassChangeFuelMode[] fdcDeviceClassArray = FDCDataElem.DeviceClass;
  2067. // Array.Resize<ServiceResponseDeviceClassChangeFuelMode>(ref fdcDeviceClassArray, (fdcDeviceClassArray != null) ? fdcDeviceClassArray.Length + 1 : 1);
  2068. // fdcDeviceClassArray[fdcDeviceClassArray.Length - 1] = fdcDeviceClassElem;
  2069. // FDCDataElem.DeviceClass = fdcDeviceClassArray;
  2070. // }
  2071. // //FDCPOSManager.tracer.WriteLine("end");
  2072. // return true;
  2073. // }
  2074. // catch (Exception ex)
  2075. // {
  2076. // //FDCPOSManager.tracer.WriteLine("Exception! " + ex.Message);
  2077. // }
  2078. // //FDCPOSManager.tracer.WriteLine("end");
  2079. // return false;
  2080. //}
  2081. //public bool ChangeFuelModeSend(string workstationID, string applicationSender, int requestId, int status, string overallResult)
  2082. //{
  2083. // try
  2084. // {
  2085. // //FDCPOSManager.tracer.WriteLine("init");
  2086. // ServiceResponseChangeFuelMode SvRes = null;
  2087. // string key = FDCPOSClient.getClientID(workstationID, applicationSender) + "ChangeFuelMode";
  2088. // if (serviceResponseClientList.ContainsKey(key))
  2089. // SvRes = (ServiceResponseChangeFuelMode)(serviceResponseClientList[key]);
  2090. // if (SvRes != null)
  2091. // {
  2092. // if (SvRes.RequestType != "ChangeFuelMode" || Convert.ToInt32(SvRes.RequestID) != requestId)
  2093. // return false;
  2094. // }
  2095. // else
  2096. // {
  2097. // // send an empty response - no available data added
  2098. // SvRes = new ServiceResponseChangeFuelMode();
  2099. // SvRes.WorkstationID = workstationID;
  2100. // SvRes.ApplicationSender = applicationSender;
  2101. // SvRes.RequestID = requestId.ToString();
  2102. // serviceResponseClientList.Add(key, SvRes);
  2103. // ServiceResponseFDCdataChangeFuelMode FDCDataElem = new ServiceResponseFDCdataChangeFuelMode();
  2104. // FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  2105. // FDCDataElem.FDCStatus = ((ErrorCode)status).ToString();
  2106. // ServiceResponseFDCdataChangeFuelMode[] FDCDataArray = { FDCDataElem };
  2107. // SvRes.FDCdata = FDCDataArray;
  2108. // }
  2109. // SvRes.OverallResult = overallResult;
  2110. // ((FDCPOSInterfaceServerManager)fdcposManager).respChannelAThreadObj.SendResponse<ServiceResponseChangeFuelMode>(fdcposManager.tcpClientList[FDCPOSClient.getClientID(workstationID, applicationSender)], SvRes);
  2111. // serviceResponseClientList.Remove(key);
  2112. // //FDCPOSManager.tracer.WriteLine("end");
  2113. // return true;
  2114. // }
  2115. // catch (Exception ex)
  2116. // {
  2117. // //FDCPOSManager.tracer.WriteLine("Exception! " + ex.Message);
  2118. // }
  2119. // return false;
  2120. //}
  2121. //public void ChangeFuelPrice(string workstationID, string applicationSender, int requestId, int productId, decimal newprice, int mode, Decimal oldprice, string overallResult)
  2122. //{
  2123. // //form.PriceSetText(Convert.ToString(newprice));
  2124. // //FDCPOSManager.tracer.WriteLine("init");
  2125. // ServiceResponseChangeFuelPrice SvRes = new ServiceResponseChangeFuelPrice();
  2126. // SvRes.WorkstationID = workstationID;
  2127. // SvRes.ApplicationSender = applicationSender;
  2128. // SvRes.RequestID = requestId.ToString();
  2129. // SvRes.OverallResult = overallResult;
  2130. // ServiceResponseFDCdataChangeFuelPrice FDCDataElem = new ServiceResponseFDCdataChangeFuelPrice();
  2131. // FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  2132. // ServiceResponseProductChangeFuelPrice product = new ServiceResponseProductChangeFuelPrice();
  2133. // product.EffectiveDateTime = DateTime.Now.ToString(Define.DateFormat);
  2134. // product.ModeNo = Convert.ToString(mode);
  2135. // product.ProductNo = Convert.ToString(productId);
  2136. // product.NewPrice = FDCConvert.ToString(newprice);
  2137. // product.OldPrice = FDCConvert.ToString(oldprice);
  2138. // FDCDataElem.Product = product;
  2139. // ServiceResponseFDCdataChangeFuelPrice[] FDCDataArray = { FDCDataElem };
  2140. // SvRes.FDCdata = FDCDataArray;
  2141. // ((FDCPOSInterfaceServerManager)fdcposManager).respChannelAThreadObj.SendResponse<ServiceResponseChangeFuelPrice>(fdcposManager.tcpClientList[FDCPOSClient.getClientID(workstationID, applicationSender)], SvRes);
  2142. // //FDCPOSManager.tracer.WriteLine("end");
  2143. //}
  2144. public bool ChangeFuelPriceAdd(string workstationID, string applicationSender, int requestId, int productId, decimal newprice, int mode, string effectiveDateTime, Decimal oldprice)
  2145. {
  2146. try
  2147. {
  2148. //FDCPOSManager.tracer.WriteLine("init");
  2149. ServiceResponseChangeFuelPrice SvRes = null;
  2150. string key = FDCPOSClient.getClientID(workstationID, applicationSender) + "ChangeFuelPrice";
  2151. if (serviceResponseClientList.ContainsKey(key))
  2152. SvRes = (ServiceResponseChangeFuelPrice)(serviceResponseClientList[key]);
  2153. if (SvRes == null)
  2154. {
  2155. SvRes = new ServiceResponseChangeFuelPrice();
  2156. SvRes.WorkstationID = workstationID;
  2157. SvRes.ApplicationSender = applicationSender;
  2158. SvRes.RequestID = requestId.ToString();
  2159. serviceResponseClientList.Add(key, SvRes);
  2160. }
  2161. else
  2162. {
  2163. if (SvRes.RequestType != "ChangeFuelPrice" || Convert.ToInt32(SvRes.RequestID) != requestId)
  2164. {
  2165. //FDCPOSManager.tracer.WriteLine(string.Format("SvRes.RequestID={0}, requestId={1} - end false", SvRes.RequestID, requestId));
  2166. return false;
  2167. }
  2168. }
  2169. ServiceResponseFDCdataChangeFuelPrice FDCDataElem = null;
  2170. if (SvRes.FDCdata != null)
  2171. FDCDataElem = SvRes.FDCdata[0];
  2172. else
  2173. {
  2174. ServiceResponseFDCdataChangeFuelPrice[] FDCDataArray = null;
  2175. FDCDataElem = new ServiceResponseFDCdataChangeFuelPrice();
  2176. Array.Resize<ServiceResponseFDCdataChangeFuelPrice>(ref FDCDataArray, (FDCDataArray != null) ? FDCDataArray.Length + 1 : 1);
  2177. FDCDataArray[FDCDataArray.Length - 1] = FDCDataElem;
  2178. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  2179. SvRes.FDCdata = FDCDataArray;
  2180. }
  2181. ServiceResponseProductChangeFuelPrice fdcProductElem = null;
  2182. if (FDCDataElem.Product != null)
  2183. {
  2184. foreach (ServiceResponseProductChangeFuelPrice fdcProductElemTemp in FDCDataElem.Product)
  2185. if ((fdcProductElemTemp.ProductNo == Convert.ToString(productId) && fdcProductElemTemp.ModeNo == null) ||
  2186. (fdcProductElemTemp.ProductNo == Convert.ToString(productId) && fdcProductElemTemp.ModeNo == Convert.ToString(mode)))
  2187. fdcProductElem = fdcProductElemTemp;
  2188. }
  2189. if (fdcProductElem == null && productId > 0)
  2190. {
  2191. fdcProductElem = new ServiceResponseProductChangeFuelPrice();
  2192. fdcProductElem.ProductNo = Convert.ToString(productId);
  2193. if (FDCGlobal.ProtocolVersion == FDCVersion.V0003)
  2194. {
  2195. fdcProductElem.ModeNo = mode.ToString();
  2196. fdcProductElem.NewPrice = FDCConvert.ToString(newprice);
  2197. fdcProductElem.OldPrice = FDCConvert.ToString(oldprice);
  2198. fdcProductElem.EffectiveDateTime = effectiveDateTime;
  2199. }
  2200. ServiceResponseProductChangeFuelPrice[] fdcProductArray = FDCDataElem.Product;
  2201. Array.Resize<ServiceResponseProductChangeFuelPrice>(ref fdcProductArray, (fdcProductArray != null) ? fdcProductArray.Length + 1 : 1);
  2202. fdcProductArray[fdcProductArray.Length - 1] = fdcProductElem;
  2203. FDCDataElem.Product = fdcProductArray;
  2204. }
  2205. if (FDCGlobal.ProtocolVersion > FDCVersion.V0003)
  2206. {
  2207. ServiceResponseFuelModeChangeFuelPrice fdcFuelModeElem = null;
  2208. if (fdcProductElem.FuelMode != null)
  2209. {
  2210. foreach (ServiceResponseFuelModeChangeFuelPrice fdcFuelModeElemTemp in fdcProductElem.FuelMode)
  2211. if ((fdcFuelModeElemTemp.ModeNo == Convert.ToString(mode)))
  2212. fdcFuelModeElem = fdcFuelModeElemTemp;
  2213. }
  2214. if (fdcFuelModeElem == null && mode > 0)
  2215. {
  2216. fdcFuelModeElem = new ServiceResponseFuelModeChangeFuelPrice();
  2217. fdcFuelModeElem.ModeNo = mode.ToString();
  2218. fdcFuelModeElem.NewPrice = FDCConvert.ToString(newprice);
  2219. if (FDCGlobal.ProtocolVersion == FDCVersion.V0005)
  2220. fdcFuelModeElem.OldPrice = FDCConvert.ToString(oldprice);
  2221. fdcProductElem.EffectiveDateTime = effectiveDateTime;
  2222. ServiceResponseFuelModeChangeFuelPrice[] fdcFuelModeArray = fdcProductElem.FuelMode;
  2223. Array.Resize<ServiceResponseFuelModeChangeFuelPrice>(ref fdcFuelModeArray, (fdcFuelModeArray != null) ? fdcFuelModeArray.Length + 1 : 1);
  2224. fdcFuelModeArray[fdcFuelModeArray.Length - 1] = fdcFuelModeElem;
  2225. fdcProductElem.FuelMode = fdcFuelModeArray;
  2226. }
  2227. }
  2228. //FDCPOSManager.tracer.WriteLine("end");
  2229. return true;
  2230. }
  2231. catch (Exception ex)
  2232. {
  2233. //FDCPOSManager.tracer.WriteLine("Exception! " + ex.Message);
  2234. }
  2235. //FDCPOSManager.tracer.WriteLine("end");
  2236. return false;
  2237. }
  2238. public bool ChangeFuelPriceSend(string workstationID, string applicationSender, int requestId, int status, string overallResult)
  2239. {
  2240. try
  2241. {
  2242. //FDCPOSManager.tracer.WriteLine("init");
  2243. ServiceResponseChangeFuelPrice SvRes = null;
  2244. string key = FDCPOSClient.getClientID(workstationID, applicationSender) + "ChangeFuelPrice";
  2245. if (serviceResponseClientList.ContainsKey(key))
  2246. SvRes = (ServiceResponseChangeFuelPrice)(serviceResponseClientList[key]);
  2247. if (SvRes != null)
  2248. {
  2249. if (SvRes.RequestType != "ChangeFuelPrice" || Convert.ToInt32(SvRes.RequestID) != requestId)
  2250. {
  2251. //FDCPOSManager.tracer.WriteLine(string.Format("SvRes.RequestID={0}, requestId={1} - end false", SvRes.RequestID, requestId));
  2252. return false;
  2253. }
  2254. }
  2255. else
  2256. {
  2257. // send an empty response - no available data added
  2258. SvRes = new ServiceResponseChangeFuelPrice();
  2259. SvRes.WorkstationID = workstationID;
  2260. SvRes.ApplicationSender = applicationSender;
  2261. SvRes.RequestID = requestId.ToString();
  2262. serviceResponseClientList.Add(key, SvRes);
  2263. ServiceResponseFDCdataChangeFuelPrice FDCDataElem = new ServiceResponseFDCdataChangeFuelPrice();
  2264. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  2265. FDCDataElem.Product = null;
  2266. ServiceResponseFDCdataChangeFuelPrice[] FDCDataArray = { FDCDataElem };
  2267. SvRes.FDCdata = FDCDataArray;
  2268. }
  2269. if (FDCGlobal.ProtocolVersion >= FDCVersion.V0005)
  2270. SvRes.FDCdata[0].FDCStatus = ((ErrorCode)status).ToString();
  2271. SvRes.OverallResult = overallResult;
  2272. ((FDCPOSInterfaceServerManager)fdcPosManager).FdcServerTcpHandler.SendResponse<ServiceResponseChangeFuelPrice>(fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)], SvRes);
  2273. serviceResponseClientList.Remove(key);
  2274. //FDCPOSManager.tracer.WriteLine("end");
  2275. return true;
  2276. }
  2277. catch (Exception ex)
  2278. {
  2279. //FDCPOSManager.tracer.WriteLine("Exception! " + ex.Message);
  2280. }
  2281. return false;
  2282. }
  2283. public void LockFuelSaleTrx(string workstationID, string applicationSender, int requestId, int deviceId, int transactionNo, string releaseToken, int status, int fuellingState, string overallResult)
  2284. {
  2285. //FDCPOSManager.tracer.WriteLine("init");
  2286. ServiceResponseLockFuelSaleTrx SvRes = new ServiceResponseLockFuelSaleTrx();
  2287. SvRes.WorkstationID = workstationID;
  2288. SvRes.ApplicationSender = applicationSender;
  2289. SvRes.RequestID = requestId.ToString(); ;
  2290. SvRes.OverallResult = overallResult;
  2291. ServiceResponseFDCdataLockFuelSaleTrx FDCDataElem = new ServiceResponseFDCdataLockFuelSaleTrx();
  2292. ServiceResponseDeviceClassLockFuelSaleTrx fdcDeviceClassElem = new ServiceResponseDeviceClassLockFuelSaleTrx();
  2293. fdcDeviceClassElem.DeviceID = Convert.ToString(deviceId);
  2294. fdcDeviceClassElem.PumpNo = Convert.ToString(deviceId);
  2295. if (FDCGlobal.ProtocolVersion == FDCVersion.V0003)
  2296. fdcDeviceClassElem.TransactionNo = Convert.ToString(transactionNo);
  2297. else
  2298. fdcDeviceClassElem.TransactionSeqNo = Convert.ToString(transactionNo);
  2299. if (this.fdcPosManager.useExtensions)
  2300. fdcDeviceClassElem.ReleaseToken = releaseToken;
  2301. fdcDeviceClassElem.Type = Wayne.FDCPOSLibrary.DeviceType.DT_FuellingPoint; // Wayne.FDCPOSLibrary.DeviceType.DT_FuelDispenser;
  2302. if (FDCGlobal.ProtocolVersion == FDCVersion.V0003)
  2303. fdcDeviceClassElem.State = ((FuellingState)fuellingState).ToString();
  2304. else
  2305. fdcDeviceClassElem.State = ((FuellingState)fuellingState == FuellingState.Paid) ? FuellingState.Cleared.ToString() : ((FuellingState)fuellingState).ToString();
  2306. FDCDataElem.DeviceClass = fdcDeviceClassElem;
  2307. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  2308. FDCDataElem.FDCStatus = ((ErrorCode)status).ToString();
  2309. ServiceResponseFDCdataLockFuelSaleTrx[] FDCDataArray = { FDCDataElem };
  2310. SvRes.FDCdata = FDCDataArray;
  2311. if (fdcPosManager.fdcClientList.TryGetValue(FDCPOSClient.getClientID(workstationID, applicationSender), out FDCPOSClient cachedFdcPosClient))
  2312. ((FDCPOSInterfaceServerManager)fdcPosManager).FdcServerTcpHandler.SendResponse<ServiceResponseLockFuelSaleTrx>(cachedFdcPosClient, SvRes);
  2313. //FDCPOSManager.tracer.WriteLine("end");
  2314. }
  2315. public void UnlockFuelSaleTrx(string workstationID, string applicationSender, int requestId, int deviceId, int transactionNo, string releaseToken, int status, int fuellingState, string overallResult)
  2316. {
  2317. //FDCPOSManager.tracer.WriteLine("init");
  2318. ServiceResponseUnlockFuelSaleTrx SvRes = new ServiceResponseUnlockFuelSaleTrx();
  2319. SvRes.WorkstationID = workstationID;
  2320. SvRes.ApplicationSender = applicationSender;
  2321. SvRes.RequestID = requestId.ToString(); ;
  2322. SvRes.OverallResult = overallResult;
  2323. ServiceResponseFDCdataBaseFuelSaleTrx FDCDataElem = new ServiceResponseFDCdataBaseFuelSaleTrx();
  2324. ServiceResponseDeviceClassBaseFuelSaleTrx fdcDeviceClassElem = new ServiceResponseDeviceClassBaseFuelSaleTrx();
  2325. fdcDeviceClassElem.DeviceID = Convert.ToString(deviceId);
  2326. fdcDeviceClassElem.PumpNo = Convert.ToString(deviceId);
  2327. if (FDCGlobal.ProtocolVersion == FDCVersion.V0003)
  2328. fdcDeviceClassElem.TransactionNo = Convert.ToString(transactionNo);
  2329. else
  2330. fdcDeviceClassElem.TransactionSeqNo = Convert.ToString(transactionNo);
  2331. if (this.fdcPosManager.useExtensions)
  2332. fdcDeviceClassElem.ReleaseToken = releaseToken;
  2333. fdcDeviceClassElem.Type = Wayne.FDCPOSLibrary.DeviceType.DT_FuellingPoint; // Wayne.FDCPOSLibrary.DeviceType.DT_FuelDispenser;
  2334. if (FDCGlobal.ProtocolVersion == FDCVersion.V0005)
  2335. fdcDeviceClassElem.State = ((FuellingState)fuellingState == FuellingState.Paid) ? FuellingState.Cleared.ToString() : ((FuellingState)fuellingState).ToString();
  2336. FDCDataElem.DeviceClass = fdcDeviceClassElem;
  2337. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  2338. FDCDataElem.FDCStatus = ((ErrorCode)status).ToString();
  2339. ServiceResponseFDCdataBaseFuelSaleTrx[] FDCDataArray = { FDCDataElem };
  2340. SvRes.FDCdata = FDCDataArray;
  2341. if (fdcPosManager.fdcClientList.TryGetValue(FDCPOSClient.getClientID(workstationID, applicationSender), out FDCPOSClient cachedFdcPosClient))
  2342. ((FDCPOSInterfaceServerManager)fdcPosManager).FdcServerTcpHandler.SendResponse<ServiceResponseUnlockFuelSaleTrx>(cachedFdcPosClient, SvRes);
  2343. //FDCPOSManager.tracer.WriteLine("end");
  2344. }
  2345. public void ClearFuelSaleTrx(string workstationID, string applicationSender, int requestId, int deviceId, int transactionNo, string releaseToken, int status, int fuellingState, string overallResult)
  2346. {
  2347. //FDCPOSManager.tracer.WriteLine("init");
  2348. ServiceResponseClearFuelSaleTrx SvRes = new ServiceResponseClearFuelSaleTrx();
  2349. SvRes.WorkstationID = workstationID;
  2350. SvRes.ApplicationSender = applicationSender;
  2351. SvRes.RequestID = requestId.ToString(); ;
  2352. SvRes.OverallResult = overallResult;
  2353. ServiceResponseFDCdataBaseFuelSaleTrx FDCDataElem = new ServiceResponseFDCdataBaseFuelSaleTrx();
  2354. ServiceResponseDeviceClassBaseFuelSaleTrx fdcDeviceClassElem = new ServiceResponseDeviceClassBaseFuelSaleTrx();
  2355. fdcDeviceClassElem.DeviceID = Convert.ToString(deviceId);
  2356. fdcDeviceClassElem.PumpNo = Convert.ToString(deviceId);
  2357. if (FDCGlobal.ProtocolVersion == FDCVersion.V0003)
  2358. fdcDeviceClassElem.TransactionNo = Convert.ToString(transactionNo);
  2359. else
  2360. fdcDeviceClassElem.TransactionSeqNo = Convert.ToString(transactionNo);
  2361. if (this.fdcPosManager.useExtensions)
  2362. fdcDeviceClassElem.ReleaseToken = releaseToken;
  2363. fdcDeviceClassElem.Type = Wayne.FDCPOSLibrary.DeviceType.DT_FuellingPoint; // Wayne.FDCPOSLibrary.DeviceType.DT_FuelDispenser;
  2364. if (FDCGlobal.ProtocolVersion == FDCVersion.V0005)
  2365. fdcDeviceClassElem.State = ((FuellingState)fuellingState == FuellingState.Paid) ? FuellingState.Cleared.ToString() : ((FuellingState)fuellingState).ToString();
  2366. FDCDataElem.DeviceClass = fdcDeviceClassElem;
  2367. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  2368. FDCDataElem.FDCStatus = ((ErrorCode)status).ToString();
  2369. ServiceResponseFDCdataBaseFuelSaleTrx[] FDCDataArray = { FDCDataElem };
  2370. SvRes.FDCdata = FDCDataArray;
  2371. if (fdcPosManager.fdcClientList.TryGetValue(FDCPOSClient.getClientID(workstationID, applicationSender), out FDCPOSClient cachedFdcPosClient))
  2372. ((FDCPOSInterfaceServerManager)fdcPosManager).FdcServerTcpHandler.SendResponse<ServiceResponseClearFuelSaleTrx>(cachedFdcPosClient, SvRes);
  2373. //FDCPOSManager.tracer.WriteLine("end");
  2374. }
  2375. public bool GetAvailableFuelSaleTrxsAdd(string workstationID, string applicationSender, int requestId, int deviceId, int transactionNo, string releaseToken, int state)
  2376. {
  2377. try
  2378. {
  2379. //FDCPOSManager.tracer.WriteLine("init");
  2380. ServiceResponseGetAvailableFuelSaleTrxs SvRes = null;
  2381. string key = FDCPOSClient.getClientID(workstationID, applicationSender) + "GetAvailableFuelSaleTrxs";
  2382. if (serviceResponseClientList.ContainsKey(key))
  2383. SvRes = (ServiceResponseGetAvailableFuelSaleTrxs)(serviceResponseClientList[key]);
  2384. if (SvRes == null)
  2385. {
  2386. SvRes = new ServiceResponseGetAvailableFuelSaleTrxs();
  2387. SvRes.WorkstationID = workstationID;
  2388. SvRes.ApplicationSender = applicationSender;
  2389. SvRes.RequestID = requestId.ToString();
  2390. serviceResponseClientList.Add(key, SvRes);
  2391. }
  2392. else
  2393. {
  2394. if (SvRes.RequestType != "GetAvailableFuelSaleTrxs" || Convert.ToInt32(SvRes.RequestID) != requestId)
  2395. {
  2396. //FDCPOSManager.tracer.WriteLine(string.Format("SvRes.RequestID={0}, requestId={1} - end false", SvRes.RequestID, requestId));
  2397. return false;
  2398. }
  2399. }
  2400. ServiceResponseFDCdataGetAvailableFuelSaleTrxs FDCDataElem = null;
  2401. if (SvRes.FDCdata != null)
  2402. FDCDataElem = SvRes.FDCdata[0];
  2403. else
  2404. {
  2405. ServiceResponseFDCdataGetAvailableFuelSaleTrxs[] FDCDataArray = null;
  2406. FDCDataElem = new ServiceResponseFDCdataGetAvailableFuelSaleTrxs();
  2407. Array.Resize<ServiceResponseFDCdataGetAvailableFuelSaleTrxs>(ref FDCDataArray, (FDCDataArray != null) ? FDCDataArray.Length + 1 : 1);
  2408. FDCDataArray[FDCDataArray.Length - 1] = FDCDataElem;
  2409. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  2410. SvRes.FDCdata = FDCDataArray;
  2411. }
  2412. ServiceResponseDeviceClassGetAvailableFuelSaleTrxs fdcDeviceClassElem = null;
  2413. if (FDCDataElem.DeviceClass != null)
  2414. {
  2415. foreach (ServiceResponseDeviceClassGetAvailableFuelSaleTrxs fdcDeviceClassElemTemp in FDCDataElem.DeviceClass)
  2416. if ((FDCGlobal.ProtocolVersion == FDCVersion.V0003 && fdcDeviceClassElemTemp.DeviceID == Convert.ToString(deviceId)) ||
  2417. (FDCGlobal.ProtocolVersion > FDCVersion.V0003 && fdcDeviceClassElemTemp.DeviceID == Convert.ToString(deviceId)) && fdcDeviceClassElemTemp.TransactionSeqNo == Convert.ToString(transactionNo) && fdcDeviceClassElemTemp.ReleaseToken == Convert.ToString(releaseToken))
  2418. fdcDeviceClassElem = fdcDeviceClassElemTemp;
  2419. }
  2420. if (fdcDeviceClassElem == null && deviceId > 0)
  2421. {
  2422. fdcDeviceClassElem = new ServiceResponseDeviceClassGetAvailableFuelSaleTrxs();
  2423. fdcDeviceClassElem.DeviceID = Convert.ToString(deviceId);
  2424. fdcDeviceClassElem.PumpNo = Convert.ToString(deviceId);
  2425. fdcDeviceClassElem.Type = Wayne.FDCPOSLibrary.DeviceType.DT_FuellingPoint; // Wayne.FDCPOSLibrary.DeviceType.DT_FuelDispenser;
  2426. ServiceResponseDeviceClassGetAvailableFuelSaleTrxs[] fdcDeviceClassArray = FDCDataElem.DeviceClass;
  2427. Array.Resize<ServiceResponseDeviceClassGetAvailableFuelSaleTrxs>(ref fdcDeviceClassArray, (fdcDeviceClassArray != null) ? fdcDeviceClassArray.Length + 1 : 1);
  2428. fdcDeviceClassArray[fdcDeviceClassArray.Length - 1] = fdcDeviceClassElem;
  2429. FDCDataElem.DeviceClass = fdcDeviceClassArray;
  2430. }
  2431. if (FDCGlobal.ProtocolVersion == FDCVersion.V0003)
  2432. {
  2433. ServiceResponseTransactionGetAvailableFuelSaleTrxs fdcTransactionElem = new ServiceResponseTransactionGetAvailableFuelSaleTrxs();
  2434. if (FDCGlobal.ProtocolVersion == FDCVersion.V0003)
  2435. fdcTransactionElem.TransactionNo = Convert.ToString(transactionNo);
  2436. else
  2437. fdcTransactionElem.TransactionSeqNo = Convert.ToString(transactionNo);
  2438. fdcTransactionElem.State = ((FuellingState)state).ToString();
  2439. ServiceResponseTransactionGetAvailableFuelSaleTrxs[] fdcTransactionArray = fdcDeviceClassElem.Transaction;
  2440. Array.Resize<ServiceResponseTransactionGetAvailableFuelSaleTrxs>(ref fdcTransactionArray, (fdcTransactionArray != null) ? fdcTransactionArray.Length + 1 : 1);
  2441. fdcTransactionArray[fdcTransactionArray.Length - 1] = fdcTransactionElem;
  2442. fdcDeviceClassElem.Transaction = fdcTransactionArray;
  2443. }
  2444. else
  2445. {
  2446. fdcDeviceClassElem.TransactionSeqNo = Convert.ToString(transactionNo);
  2447. fdcDeviceClassElem.State = ((FuellingState)state == FuellingState.Paid) ? FuellingState.Cleared.ToString() : ((FuellingState)state).ToString();
  2448. }
  2449. if (this.fdcPosManager.useExtensions)
  2450. fdcDeviceClassElem.ReleaseToken = releaseToken;
  2451. //FDCPOSManager.tracer.WriteLine("end");
  2452. return true;
  2453. }
  2454. catch (Exception ex)
  2455. {
  2456. //FDCPOSManager.tracer.WriteLine("Exception! " + ex.Message);
  2457. }
  2458. //FDCPOSManager.tracer.WriteLine("end");
  2459. return false;
  2460. }
  2461. public bool GetAvailableFuelSaleTrxsSend(string workstationID, string applicationSender, int requestId, int status, string overallResult)
  2462. {
  2463. try
  2464. {
  2465. //FDCPOSManager.tracer.WriteLine("init");
  2466. ServiceResponseGetAvailableFuelSaleTrxs SvRes = null;
  2467. string key = FDCPOSClient.getClientID(workstationID, applicationSender) + "GetAvailableFuelSaleTrxs";
  2468. if (serviceResponseClientList.ContainsKey(key))
  2469. SvRes = (ServiceResponseGetAvailableFuelSaleTrxs)(serviceResponseClientList[key]);
  2470. if (SvRes != null)
  2471. {
  2472. if (SvRes.RequestType != "GetAvailableFuelSaleTrxs" || Convert.ToInt32(SvRes.RequestID) != requestId)
  2473. {
  2474. //FDCPOSManager.tracer.WriteLine(string.Format("SvRes.RequestID={0}, requestId={1} - end false", SvRes.RequestID, requestId));
  2475. return false;
  2476. }
  2477. }
  2478. else
  2479. {
  2480. // send an empty response - no available transaction added
  2481. SvRes = new ServiceResponseGetAvailableFuelSaleTrxs();
  2482. SvRes.WorkstationID = workstationID;
  2483. SvRes.ApplicationSender = applicationSender;
  2484. SvRes.RequestID = requestId.ToString();
  2485. serviceResponseClientList.Add(key, SvRes);
  2486. ServiceResponseFDCdataGetAvailableFuelSaleTrxs FDCDataElem = new ServiceResponseFDCdataGetAvailableFuelSaleTrxs();
  2487. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  2488. ServiceResponseFDCdataGetAvailableFuelSaleTrxs[] FDCDataArray = { FDCDataElem };
  2489. SvRes.FDCdata = FDCDataArray;
  2490. }
  2491. if (FDCGlobal.ProtocolVersion >= FDCVersion.V0005)
  2492. SvRes.FDCdata[0].FDCStatus = ((ErrorCode)status).ToString();
  2493. SvRes.OverallResult = overallResult;
  2494. ((FDCPOSInterfaceServerManager)fdcPosManager).FdcServerTcpHandler.SendResponse<ServiceResponseGetAvailableFuelSaleTrxs>(fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)], SvRes);
  2495. serviceResponseClientList.Remove(key);
  2496. //FDCPOSManager.tracer.WriteLine("end");
  2497. return true;
  2498. }
  2499. catch (Exception ex)
  2500. {
  2501. //FDCPOSManager.tracer.WriteLine("Exception! " + ex.Message);
  2502. }
  2503. return false;
  2504. }
  2505. public bool GetFuelSaleTrxDetailsAdd(string workstationID, string applicationSender, int requestId, int deviceId, decimal volume, decimal amount, decimal price, int nozzle, int productNo, string productName, string productUM, int mode, int transactionId, string releaseToken, int state, string startTime, string endTime, string lockingAS, string authorisationAS, int reservingDeviceId, int fuellingType)
  2506. {
  2507. try
  2508. {
  2509. //FDCPOSManager.tracer.WriteLine(string.Format("init: pumpid={0}, trid={1}, releaseToken={2}", deviceId, transactionId, releaseToken));
  2510. if (FDCGlobal.ProtocolVersion > FDCVersion.V0003)
  2511. {
  2512. ServiceResponseGetFuelSaleTrxDetails SvRes = null;
  2513. string key = FDCPOSClient.getClientID(workstationID, applicationSender) + "GetFuelSaleTrxDetails";
  2514. if (serviceResponseClientList.ContainsKey(key))
  2515. SvRes = (ServiceResponseGetFuelSaleTrxDetails)(serviceResponseClientList[key]);
  2516. if (SvRes == null)
  2517. {
  2518. SvRes = new ServiceResponseGetFuelSaleTrxDetails();
  2519. SvRes.WorkstationID = workstationID;
  2520. SvRes.ApplicationSender = applicationSender;
  2521. SvRes.RequestID = requestId.ToString();
  2522. serviceResponseClientList.Add(key, SvRes);
  2523. }
  2524. else
  2525. {
  2526. if (SvRes.RequestType != "GetFuelSaleTrxDetails" || Convert.ToInt32(SvRes.RequestID) != requestId)
  2527. {
  2528. //FDCPOSManager.tracer.WriteLine(string.Format("SvRes.RequestID={0}, requestId={1} - end false", SvRes.RequestID, requestId));
  2529. return false;
  2530. }
  2531. }
  2532. ServiceResponseFDCdataGetFuelSaleTrxDetails FDCDataElem = null;
  2533. if (SvRes.FDCdata != null)
  2534. FDCDataElem = SvRes.FDCdata[0];
  2535. else
  2536. {
  2537. ServiceResponseFDCdataGetFuelSaleTrxDetails[] FDCDataArray = null;
  2538. FDCDataElem = new ServiceResponseFDCdataGetFuelSaleTrxDetails();
  2539. Array.Resize<ServiceResponseFDCdataGetFuelSaleTrxDetails>(ref FDCDataArray, (FDCDataArray != null) ? FDCDataArray.Length + 1 : 1);
  2540. FDCDataArray[FDCDataArray.Length - 1] = FDCDataElem;
  2541. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  2542. SvRes.FDCdata = FDCDataArray;
  2543. }
  2544. ServiceResponseDeviceClassGetFuelSaleTrxDetails fdcDeviceClassElem = null;
  2545. if (FDCDataElem.DeviceClass != null)
  2546. {
  2547. //FDCPOSManager.tracer.WriteLineIf(FDCPOSManager.tracer.CheckTraceLevel(4), string.Format("FDCDataElem.DeviceClass != null - count={0} - looping", FDCDataElem.DeviceClass.GetLength(0)));
  2548. foreach (ServiceResponseDeviceClassGetFuelSaleTrxDetails fdcDeviceClassElemTemp in FDCDataElem.DeviceClass)
  2549. {
  2550. //string transactionNo = (fdcDeviceClassElemTemp.TransactionNo != null) ? fdcDeviceClassElemTemp.TransactionNo : ((fdcDeviceClassElemTemp.TransactionSeqNo != null) ? fdcDeviceClassElemTemp.TransactionSeqNo : "");
  2551. string transactionNo = (fdcDeviceClassElemTemp.TransactionSeqNo != null) ? fdcDeviceClassElemTemp.TransactionSeqNo : "";
  2552. //FDCPOSManager.tracer.WriteLineIf(FDCPOSManager.tracer.CheckTraceLevel(4), string.Format("read temp_pumpid={0}, temp_trid={1}", fdcDeviceClassElemTemp.DeviceID, transactionNo));
  2553. if (fdcDeviceClassElemTemp.DeviceID == Convert.ToString(deviceId) && transactionNo == Convert.ToString(transactionId) && fdcDeviceClassElemTemp.TransactionSeqNo == releaseToken)
  2554. {
  2555. //FDCPOSManager.tracer.WriteLineIf(FDCPOSManager.tracer.CheckTraceLevel(4), string.Format("FOUND! temp_pumpid={0}, temp_trid={1}, temp_releaseToken={2}", fdcDeviceClassElemTemp.DeviceID, transactionNo, fdcDeviceClassElemTemp.TransactionSeqNo));
  2556. fdcDeviceClassElem = fdcDeviceClassElemTemp;
  2557. }
  2558. }
  2559. }
  2560. else
  2561. //FDCPOSManager.tracer.WriteLineIf(FDCPOSManager.tracer.CheckTraceLevel(4), string.Format("FDCDataElem.DeviceClass == null"));
  2562. if (fdcDeviceClassElem == null && deviceId > 0)
  2563. {
  2564. fdcDeviceClassElem = new ServiceResponseDeviceClassGetFuelSaleTrxDetails();
  2565. fdcDeviceClassElem.DeviceID = Convert.ToString(deviceId);
  2566. fdcDeviceClassElem.PumpNo = Convert.ToString(deviceId);
  2567. fdcDeviceClassElem.NozzleNo = Convert.ToString(nozzle);
  2568. fdcDeviceClassElem.Type = Wayne.FDCPOSLibrary.DeviceType.DT_FuellingPoint; // Wayne.FDCPOSLibrary.DeviceType.DT_FuelDispenser;
  2569. //if (FDCGlobal.ProtocolVersion == FDCVersion.V0003)
  2570. // fdcDeviceClassElem.TransactionNo = Convert.ToString(transactionId);
  2571. //else
  2572. fdcDeviceClassElem.TransactionSeqNo = Convert.ToString(transactionId);
  2573. fdcDeviceClassElem.State = ((FuellingState)state == FuellingState.Paid) ? FuellingState.Cleared.ToString() : ((FuellingState)state).ToString();
  2574. fdcDeviceClassElem.ReleaseToken = releaseToken;
  2575. fdcDeviceClassElem.TypePOS = "";
  2576. //if (FDCGlobal.ProtocolVersion >= FDCVersion.V0005)
  2577. //{
  2578. FuelModeElementClass fuelMode = new FuelModeElementClass();
  2579. fuelMode.ModeNo = (mode == -1) ? "" : Convert.ToString(mode);
  2580. fdcDeviceClassElem.FuelMode = fuelMode;
  2581. //}
  2582. fdcDeviceClassElem.VolumeProduct1 = FDCConvert.ToString(volume);
  2583. fdcDeviceClassElem.VolumeProduct2 = FDCConvert.ToString((Decimal)0);
  2584. fdcDeviceClassElem.ProductNo1 = Convert.ToString(productNo);
  2585. fdcDeviceClassElem.ProductNo2 = "";
  2586. if (this.fdcPosManager.useExtensions)
  2587. {
  2588. fdcDeviceClassElem.ProductName = productName;
  2589. fdcDeviceClassElem.ProductUM = productUM;
  2590. }
  2591. fdcDeviceClassElem.BlendRatio = FDCConvert.ToString((Decimal)100);
  2592. fdcDeviceClassElem.Amount = FDCConvert.ToString(amount);
  2593. fdcDeviceClassElem.Volume = FDCConvert.ToString(volume);
  2594. fdcDeviceClassElem.UnitPrice = FDCConvert.ToString(price);
  2595. fdcDeviceClassElem.StartTimeStamp = startTime;
  2596. fdcDeviceClassElem.EndTimeStamp = endTime;
  2597. //if (FDCGlobal.ProtocolVersion > FDCVersion.V0003)
  2598. //{
  2599. fdcDeviceClassElem.AuthorisationApplicationSender = authorisationAS;
  2600. fdcDeviceClassElem.LockingApplicationSender = lockingAS;
  2601. //}
  2602. if (this.fdcPosManager.useExtensions)
  2603. {
  2604. fdcDeviceClassElem.ReservingDeviceId = Convert.ToString(reservingDeviceId);
  2605. fdcDeviceClassElem.FuellingType = Convert.ToString(fuellingType);
  2606. }
  2607. FuellingInfo fuellingInfo = new FuellingInfo(deviceId, nozzle, productNo, productName, productUM, amount, volume, price, DateTime.Parse(endTime), transactionId);
  2608. fdcDeviceClassElem.DSPFields = fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)].getDSPFields(fuellingInfo);
  2609. fdcDeviceClassElem.CRCMode = fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)].getCRC(fuellingInfo);
  2610. ServiceResponseDeviceClassGetFuelSaleTrxDetails[] fdcDeviceClassArray = FDCDataElem.DeviceClass;
  2611. Array.Resize<ServiceResponseDeviceClassGetFuelSaleTrxDetails>(ref fdcDeviceClassArray, (fdcDeviceClassArray != null) ? fdcDeviceClassArray.Length + 1 : 1);
  2612. fdcDeviceClassArray[fdcDeviceClassArray.Length - 1] = fdcDeviceClassElem;
  2613. FDCDataElem.DeviceClass = fdcDeviceClassArray;
  2614. }
  2615. }
  2616. else
  2617. {
  2618. ServiceResponseGetFuelSaleTrxDetailsV03 SvRes = null;
  2619. string key = FDCPOSClient.getClientID(workstationID, applicationSender) + "GetFuelSaleTrxDetails";
  2620. if (serviceResponseClientList.ContainsKey(key))
  2621. SvRes = (ServiceResponseGetFuelSaleTrxDetailsV03)(serviceResponseClientList[key]);
  2622. if (SvRes == null)
  2623. {
  2624. SvRes = new ServiceResponseGetFuelSaleTrxDetailsV03();
  2625. SvRes.WorkstationID = workstationID;
  2626. SvRes.ApplicationSender = applicationSender;
  2627. SvRes.RequestID = requestId.ToString();
  2628. serviceResponseClientList.Add(key, SvRes);
  2629. }
  2630. else
  2631. {
  2632. if (SvRes.RequestType != "GetFuelSaleTrxDetails" || Convert.ToInt32(SvRes.RequestID) != requestId)
  2633. {
  2634. //FDCPOSManager.tracer.WriteLine(string.Format("SvRes.RequestID={0}, requestId={1} - end false", SvRes.RequestID, requestId));
  2635. return false;
  2636. }
  2637. }
  2638. ServiceResponseFDCdataGetFuelSaleTrxDetailsV03 FDCDataElem = null;
  2639. if (SvRes.FDCdata != null)
  2640. FDCDataElem = SvRes.FDCdata[0];
  2641. else
  2642. {
  2643. ServiceResponseFDCdataGetFuelSaleTrxDetailsV03[] FDCDataArray = null;
  2644. FDCDataElem = new ServiceResponseFDCdataGetFuelSaleTrxDetailsV03();
  2645. Array.Resize<ServiceResponseFDCdataGetFuelSaleTrxDetailsV03>(ref FDCDataArray, (FDCDataArray != null) ? FDCDataArray.Length + 1 : 1);
  2646. FDCDataArray[FDCDataArray.Length - 1] = FDCDataElem;
  2647. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  2648. SvRes.FDCdata = FDCDataArray;
  2649. }
  2650. ServiceResponseDeviceClassGetFuelSaleTrxDetailsV03 fdcDeviceClassElem = null;
  2651. if (FDCDataElem.DeviceClass != null)
  2652. {
  2653. //FDCPOSManager.tracer.WriteLineIf(FDCPOSManager.tracer.CheckTraceLevel(4), string.Format("FDCDataElem.DeviceClass != null - count={0} - looping", FDCDataElem.DeviceClass.GetLength(0)));
  2654. foreach (ServiceResponseDeviceClassGetFuelSaleTrxDetailsV03 fdcDeviceClassElemTemp in FDCDataElem.DeviceClass)
  2655. {
  2656. string transactionNo = (fdcDeviceClassElemTemp.TransactionNo != null) ? fdcDeviceClassElemTemp.TransactionNo : "";
  2657. //FDCPOSManager.tracer.WriteLineIf(FDCPOSManager.tracer.CheckTraceLevel(4), string.Format("read temp_pumpid={0}, temp_trid={1}", fdcDeviceClassElemTemp.DeviceID, transactionNo));
  2658. if (fdcDeviceClassElemTemp.DeviceID == Convert.ToString(deviceId) && transactionNo == Convert.ToString(transactionId))
  2659. {
  2660. //FDCPOSManager.tracer.WriteLineIf(FDCPOSManager.tracer.CheckTraceLevel(4), string.Format("FOUND! temp_pumpid={0}, temp_trid={1}", fdcDeviceClassElemTemp.DeviceID, transactionNo));
  2661. fdcDeviceClassElem = fdcDeviceClassElemTemp;
  2662. }
  2663. }
  2664. }
  2665. else
  2666. //FDCPOSManager.tracer.WriteLineIf(FDCPOSManager.tracer.CheckTraceLevel(4), string.Format("FDCDataElem.DeviceClass == null"));
  2667. if (fdcDeviceClassElem == null && deviceId > 0)
  2668. {
  2669. fdcDeviceClassElem = new ServiceResponseDeviceClassGetFuelSaleTrxDetailsV03();
  2670. fdcDeviceClassElem.DeviceID = Convert.ToString(deviceId);
  2671. fdcDeviceClassElem.PumpNo = Convert.ToString(deviceId);
  2672. fdcDeviceClassElem.NozzleNo = Convert.ToString(nozzle);
  2673. fdcDeviceClassElem.Type = Wayne.FDCPOSLibrary.DeviceType.DT_FuellingPoint; // Wayne.FDCPOSLibrary.DeviceType.DT_FuelDispenser;
  2674. fdcDeviceClassElem.TransactionNo = Convert.ToString(transactionId);
  2675. fdcDeviceClassElem.State = ((FuellingState)state).ToString();
  2676. fdcDeviceClassElem.ReleaseToken = releaseToken;
  2677. fdcDeviceClassElem.TypePOS = "";
  2678. fdcDeviceClassElem.FuelMode = Convert.ToString(mode);
  2679. fdcDeviceClassElem.VolumeProduct1 = FDCConvert.ToString(volume);
  2680. fdcDeviceClassElem.VolumeProduct2 = FDCConvert.ToString((Decimal)0);
  2681. fdcDeviceClassElem.Product1No = Convert.ToString(productNo);
  2682. fdcDeviceClassElem.Product2No = "";
  2683. if (this.fdcPosManager.useExtensions)
  2684. {
  2685. fdcDeviceClassElem.ProductName = productName;
  2686. fdcDeviceClassElem.ProductUM = productUM;
  2687. }
  2688. fdcDeviceClassElem.BlendRatio = FDCConvert.ToString((Decimal)100);
  2689. fdcDeviceClassElem.Amount = FDCConvert.ToString(amount);
  2690. fdcDeviceClassElem.Volume = FDCConvert.ToString(volume);
  2691. fdcDeviceClassElem.UnitPrice = FDCConvert.ToString(price);
  2692. fdcDeviceClassElem.StartTimeStamp = startTime;
  2693. fdcDeviceClassElem.EndTimeStamp = endTime;
  2694. FuellingInfo fuellingInfo = new FuellingInfo(deviceId, nozzle, productNo, productName, productUM, amount, volume, price, DateTime.Parse(endTime), transactionId);
  2695. fdcDeviceClassElem.DSPFields = fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)].getDSPFields(fuellingInfo);
  2696. fdcDeviceClassElem.CRCMode = fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)].getCRC(fuellingInfo);
  2697. ServiceResponseDeviceClassGetFuelSaleTrxDetailsV03[] fdcDeviceClassArray = FDCDataElem.DeviceClass;
  2698. Array.Resize<ServiceResponseDeviceClassGetFuelSaleTrxDetailsV03>(ref fdcDeviceClassArray, (fdcDeviceClassArray != null) ? fdcDeviceClassArray.Length + 1 : 1);
  2699. fdcDeviceClassArray[fdcDeviceClassArray.Length - 1] = fdcDeviceClassElem;
  2700. FDCDataElem.DeviceClass = fdcDeviceClassArray;
  2701. }
  2702. }
  2703. //FDCPOSManager.tracer.WriteLine("end");
  2704. return true;
  2705. }
  2706. catch (Exception ex)
  2707. {
  2708. //FDCPOSManager.tracer.WriteLine("Exception! " + ex.Message);
  2709. }
  2710. //FDCPOSManager.tracer.WriteLine("end");
  2711. return false;
  2712. }
  2713. public bool GetFuelSaleTrxDetailsSend(string workstationID, string applicationSender, int requestId, int status, string overallResult)
  2714. {
  2715. try
  2716. {
  2717. //FDCPOSManager.tracer.WriteLine("init");
  2718. ServiceResponseGetFuelSaleTrxDetails SvRes = null;
  2719. ServiceResponseGetFuelSaleTrxDetailsV03 SvResV03 = null;
  2720. string key = FDCPOSClient.getClientID(workstationID, applicationSender) + "GetFuelSaleTrxDetails";
  2721. if (serviceResponseClientList.ContainsKey(key))
  2722. {
  2723. if (FDCGlobal.ProtocolVersion == FDCVersion.V0003)
  2724. {
  2725. SvResV03 = (ServiceResponseGetFuelSaleTrxDetailsV03)(serviceResponseClientList[key]);
  2726. if (SvResV03 != null)
  2727. {
  2728. if (SvResV03.RequestType != "GetFuelSaleTrxDetails" || Convert.ToInt32(SvResV03.RequestID) != requestId)
  2729. {
  2730. //FDCPOSManager.tracer.WriteLine(string.Format("SvRes.RequestID={0}, requestId={1} - end false", SvResV03.RequestID, requestId));
  2731. return false;
  2732. }
  2733. }
  2734. }
  2735. else
  2736. {
  2737. SvRes = (ServiceResponseGetFuelSaleTrxDetails)(serviceResponseClientList[key]);
  2738. if (SvRes != null)
  2739. {
  2740. if (SvRes.RequestType != "GetFuelSaleTrxDetails" || Convert.ToInt32(SvRes.RequestID) != requestId)
  2741. {
  2742. //FDCPOSManager.tracer.WriteLine(string.Format("SvRes.RequestID={0}, requestId={1} - end false", SvRes.RequestID, requestId));
  2743. return false;
  2744. }
  2745. }
  2746. }
  2747. }
  2748. // in that case can build the same object because FuelMode is not created
  2749. if (FDCGlobal.ProtocolVersion > FDCVersion.V0003 && SvRes == null)
  2750. {
  2751. SvRes = new ServiceResponseGetFuelSaleTrxDetails();
  2752. SvRes.WorkstationID = workstationID;
  2753. SvRes.ApplicationSender = applicationSender;
  2754. SvRes.RequestID = requestId.ToString();
  2755. serviceResponseClientList.Add(key, SvRes);
  2756. ServiceResponseFDCdataGetFuelSaleTrxDetails FDCDataElem = new ServiceResponseFDCdataGetFuelSaleTrxDetails();
  2757. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  2758. ServiceResponseFDCdataGetFuelSaleTrxDetails[] FDCDataArray = { FDCDataElem };
  2759. SvRes.FDCdata = FDCDataArray;
  2760. }
  2761. else if (FDCGlobal.ProtocolVersion == FDCVersion.V0003 && SvResV03 == null)
  2762. {
  2763. SvResV03 = new ServiceResponseGetFuelSaleTrxDetailsV03();
  2764. SvResV03.WorkstationID = workstationID;
  2765. SvResV03.ApplicationSender = applicationSender;
  2766. SvResV03.RequestID = requestId.ToString();
  2767. serviceResponseClientList.Add(key, SvResV03);
  2768. ServiceResponseFDCdataGetFuelSaleTrxDetailsV03 FDCDataElem = new ServiceResponseFDCdataGetFuelSaleTrxDetailsV03();
  2769. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  2770. ServiceResponseFDCdataGetFuelSaleTrxDetailsV03[] FDCDataArray = { FDCDataElem };
  2771. SvResV03.FDCdata = FDCDataArray;
  2772. }
  2773. if (FDCGlobal.ProtocolVersion > FDCVersion.V0003)
  2774. {
  2775. SvRes.FDCdata[0].FDCStatus = ((ErrorCode)status).ToString();
  2776. SvRes.OverallResult = overallResult;
  2777. ((FDCPOSInterfaceServerManager)fdcPosManager).FdcServerTcpHandler.SendResponse<ServiceResponseGetFuelSaleTrxDetails>(fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)], SvRes);
  2778. }
  2779. else
  2780. {
  2781. SvResV03.OverallResult = overallResult;
  2782. ((FDCPOSInterfaceServerManager)fdcPosManager).FdcServerTcpHandler.SendResponse<ServiceResponseGetFuelSaleTrxDetailsV03>(fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)], SvResV03);
  2783. }
  2784. serviceResponseClientList.Remove(key);
  2785. }
  2786. catch (Exception ex)
  2787. {
  2788. //FDCPOSManager.tracer.WriteLine("Exception! " + ex.Message);
  2789. }
  2790. //FDCPOSManager.tracer.WriteLine("end");
  2791. return true;
  2792. }
  2793. public bool GetProductTableAdd(string workstationID, string applicationSender, int requestId, int productNo, string ProductName)
  2794. {
  2795. try
  2796. {
  2797. ServiceResponseGetProductTable SvRes = null;
  2798. string key = FDCPOSClient.getClientID(workstationID, applicationSender) + "GetProductTable";
  2799. if (serviceResponseClientList.ContainsKey(key))
  2800. SvRes = (ServiceResponseGetProductTable)(serviceResponseClientList[key]);
  2801. if (SvRes == null)
  2802. {
  2803. SvRes = new ServiceResponseGetProductTable();
  2804. SvRes.WorkstationID = workstationID;
  2805. SvRes.ApplicationSender = applicationSender;
  2806. SvRes.RequestID = requestId.ToString();
  2807. serviceResponseClientList.Add(key, SvRes);
  2808. }
  2809. else
  2810. {
  2811. if (SvRes.RequestType != "GetProductTable" || Convert.ToInt32(SvRes.RequestID) != requestId)
  2812. {
  2813. //FDCPOSManager.tracer.WriteLine(string.Format("SvRes.RequestID={0}, requestId={1} - end false", SvRes.RequestID, requestId));
  2814. return false;
  2815. }
  2816. }
  2817. ServiceResponseFDCdataGetProductTable FDCDataElem = null;
  2818. if (SvRes.FDCdata != null)
  2819. FDCDataElem = SvRes.FDCdata[0];
  2820. else
  2821. {
  2822. ServiceResponseFDCdataGetProductTable[] FDCDataArray = null;
  2823. FDCDataElem = new ServiceResponseFDCdataGetProductTable();
  2824. Array.Resize<ServiceResponseFDCdataGetProductTable>(ref FDCDataArray, (FDCDataArray != null) ? FDCDataArray.Length + 1 : 1);
  2825. FDCDataArray[FDCDataArray.Length - 1] = FDCDataElem;
  2826. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  2827. SvRes.FDCdata = FDCDataArray;
  2828. }
  2829. ServiceResponseFuelProductsGetProductTable fdcFuelProductsElem = null;
  2830. if (FDCDataElem.FuelProducts != null)
  2831. {
  2832. fdcFuelProductsElem = FDCDataElem.FuelProducts[0];
  2833. }
  2834. if (fdcFuelProductsElem == null)
  2835. {
  2836. fdcFuelProductsElem = new ServiceResponseFuelProductsGetProductTable();
  2837. ServiceResponseFuelProductsGetProductTable[] fdcFuelProductArray = FDCDataElem.FuelProducts;
  2838. Array.Resize<ServiceResponseFuelProductsGetProductTable>(ref fdcFuelProductArray, (fdcFuelProductArray != null) ? fdcFuelProductArray.Length + 1 : 1);
  2839. fdcFuelProductArray[fdcFuelProductArray.Length - 1] = fdcFuelProductsElem;
  2840. FDCDataElem.FuelProducts = fdcFuelProductArray;
  2841. }
  2842. ServiceResponseProductGetProductTable fdcProductElem = new ServiceResponseProductGetProductTable();
  2843. fdcProductElem.ProductNo = Convert.ToString(productNo);
  2844. fdcProductElem.ProductName = ProductName;
  2845. ServiceResponseProductGetProductTable[] fdcProductArray = fdcFuelProductsElem.Product;
  2846. Array.Resize<ServiceResponseProductGetProductTable>(ref fdcProductArray, (fdcProductArray != null) ? fdcProductArray.Length + 1 : 1);
  2847. fdcProductArray[fdcProductArray.Length - 1] = fdcProductElem;
  2848. fdcFuelProductsElem.Product = fdcProductArray;
  2849. }
  2850. catch (Exception ex)
  2851. {
  2852. //FDCPOSManager.tracer.WriteLine("Exception! " + ex.Message);
  2853. }
  2854. return true;
  2855. }
  2856. public bool GetProductTableSend(string workstationID, string applicationSender, int requestId, int status, string overallResult)
  2857. {
  2858. try
  2859. {
  2860. ServiceResponseGetProductTable SvRes = null;
  2861. string key = FDCPOSClient.getClientID(workstationID, applicationSender) + "GetProductTable";
  2862. if (serviceResponseClientList.ContainsKey(key))
  2863. SvRes = (ServiceResponseGetProductTable)(serviceResponseClientList[key]);
  2864. if (SvRes != null)
  2865. {
  2866. if (SvRes.RequestType != "GetProductTable" || Convert.ToInt32(SvRes.RequestID) != requestId)
  2867. {
  2868. //FDCPOSManager.tracer.WriteLine(string.Format("SvRes.RequestID={0}, requestId={1} - end false", SvRes.RequestID, requestId));
  2869. return false;
  2870. }
  2871. }
  2872. else
  2873. {
  2874. // send an empty response - no available transaction added
  2875. SvRes = new ServiceResponseGetProductTable();
  2876. SvRes.WorkstationID = workstationID;
  2877. SvRes.ApplicationSender = applicationSender;
  2878. SvRes.RequestID = requestId.ToString();
  2879. serviceResponseClientList.Add(key, SvRes);
  2880. ServiceResponseFDCdataGetProductTable FDCDataElem = new ServiceResponseFDCdataGetProductTable();
  2881. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  2882. ServiceResponseFDCdataGetProductTable[] FDCDataArray = { FDCDataElem };
  2883. SvRes.FDCdata = FDCDataArray;
  2884. }
  2885. if (FDCGlobal.ProtocolVersion >= FDCVersion.V0005)
  2886. SvRes.FDCdata[0].FDCStatus = ((ErrorCode)status).ToString();
  2887. SvRes.OverallResult = overallResult;
  2888. ((FDCPOSInterfaceServerManager)fdcPosManager).FdcServerTcpHandler.SendResponse<ServiceResponseGetProductTable>(fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)], SvRes);
  2889. serviceResponseClientList.Remove(key);
  2890. }
  2891. catch (Exception ex)
  2892. {
  2893. //FDCPOSManager.tracer.WriteLine("Exception! " + ex.Message);
  2894. }
  2895. return true;
  2896. }
  2897. public bool GetModeTableAdd(string workstationID, string applicationSender, int requestId, int modeNo, string ModeName)
  2898. {
  2899. try
  2900. {
  2901. ServiceResponseGetModeTable SvRes = null;
  2902. string key = FDCPOSClient.getClientID(workstationID, applicationSender) + "GetModeTable";
  2903. if (serviceResponseClientList.ContainsKey(key))
  2904. SvRes = (ServiceResponseGetModeTable)(serviceResponseClientList[key]);
  2905. if (SvRes == null)
  2906. {
  2907. SvRes = new ServiceResponseGetModeTable();
  2908. SvRes.WorkstationID = workstationID;
  2909. SvRes.ApplicationSender = applicationSender;
  2910. SvRes.RequestID = requestId.ToString();
  2911. serviceResponseClientList.Add(key, SvRes);
  2912. }
  2913. else
  2914. {
  2915. if (SvRes.RequestType != "GetModeTable" || Convert.ToInt32(SvRes.RequestID) != requestId)
  2916. {
  2917. //FDCPOSManager.tracer.WriteLine(string.Format("SvRes.RequestID={0}, requestId={1} - end false", SvRes.RequestID, requestId));
  2918. return false;
  2919. }
  2920. }
  2921. ServiceResponseFDCdataGetModeTable FDCDataElem = null;
  2922. if (SvRes.FDCdata != null)
  2923. FDCDataElem = SvRes.FDCdata[0];
  2924. else
  2925. {
  2926. ServiceResponseFDCdataGetModeTable[] FDCDataArray = null;
  2927. FDCDataElem = new ServiceResponseFDCdataGetModeTable();
  2928. Array.Resize<ServiceResponseFDCdataGetModeTable>(ref FDCDataArray, (FDCDataArray != null) ? FDCDataArray.Length + 1 : 1);
  2929. FDCDataArray[FDCDataArray.Length - 1] = FDCDataElem;
  2930. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  2931. SvRes.FDCdata = FDCDataArray;
  2932. }
  2933. ServiceResponseFuelModeGetModeTable FuelModeElem = new ServiceResponseFuelModeGetModeTable();
  2934. ServiceResponseFuelModeGetModeTable[] FuelModeArray = null;
  2935. if (FDCDataElem.FuelMode != null)
  2936. {
  2937. FuelModeArray = FDCDataElem.FuelMode;
  2938. }
  2939. Array.Resize<ServiceResponseFuelModeGetModeTable>(ref FuelModeArray, (FuelModeArray != null) ? FuelModeArray.Length + 1 : 1);
  2940. FuelModeArray[FuelModeArray.Length - 1] = FuelModeElem;
  2941. FDCDataElem.FuelMode = FuelModeArray;
  2942. FuelModeElem.ModeNo = Convert.ToString(modeNo);
  2943. FuelModeElem.ModeName = ModeName;
  2944. }
  2945. catch (Exception ex)
  2946. {
  2947. //FDCPOSManager.tracer.WriteLine("Exception! " + ex.Message);
  2948. }
  2949. return true;
  2950. }
  2951. public bool GetModeTableSend(string workstationID, string applicationSender, int requestId, int status, string overallResult)
  2952. {
  2953. try
  2954. {
  2955. ServiceResponseGetModeTable SvRes = null;
  2956. string key = FDCPOSClient.getClientID(workstationID, applicationSender) + "GetModeTable";
  2957. if (serviceResponseClientList.ContainsKey(key))
  2958. SvRes = (ServiceResponseGetModeTable)(serviceResponseClientList[key]);
  2959. if (SvRes != null)
  2960. {
  2961. if (SvRes.RequestType != "GetModeTable" || Convert.ToInt32(SvRes.RequestID) != requestId)
  2962. {
  2963. //FDCPOSManager.tracer.WriteLine(string.Format("SvRes.RequestID={0}, requestId={1} - end false", SvRes.RequestID, requestId));
  2964. return false;
  2965. }
  2966. }
  2967. else
  2968. {
  2969. // send an empty response - no available transaction added
  2970. SvRes = new ServiceResponseGetModeTable();
  2971. SvRes.WorkstationID = workstationID;
  2972. SvRes.ApplicationSender = applicationSender;
  2973. SvRes.RequestID = requestId.ToString();
  2974. serviceResponseClientList.Add(key, SvRes);
  2975. ServiceResponseFDCdataGetModeTable FDCDataElem = new ServiceResponseFDCdataGetModeTable();
  2976. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  2977. ServiceResponseFDCdataGetModeTable[] FDCDataArray = { FDCDataElem };
  2978. SvRes.FDCdata = FDCDataArray;
  2979. }
  2980. if (FDCGlobal.ProtocolVersion >= FDCVersion.V0005)
  2981. SvRes.FDCdata[0].FDCStatus = ((ErrorCode)status).ToString();
  2982. SvRes.OverallResult = overallResult;
  2983. ((FDCPOSInterfaceServerManager)fdcPosManager).FdcServerTcpHandler.SendResponse<ServiceResponseGetModeTable>(fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)], SvRes);
  2984. serviceResponseClientList.Remove(key);
  2985. }
  2986. catch (Exception ex)
  2987. {
  2988. //FDCPOSManager.tracer.WriteLine("Exception! " + ex.Message);
  2989. }
  2990. return true;
  2991. }
  2992. public bool GetFuelModeAdd(string workstationID, string applicationSender, int requestId, string deviceType, int deviceId, int modeNo)
  2993. {
  2994. try
  2995. {
  2996. ServiceResponseGetFuelMode SvRes = null;
  2997. string key = FDCPOSClient.getClientID(workstationID, applicationSender) + "GetFuelMode";
  2998. if (serviceResponseClientList.ContainsKey(key))
  2999. SvRes = (ServiceResponseGetFuelMode)(serviceResponseClientList[key]);
  3000. if (SvRes == null)
  3001. {
  3002. SvRes = new ServiceResponseGetFuelMode();
  3003. SvRes.WorkstationID = workstationID;
  3004. SvRes.ApplicationSender = applicationSender;
  3005. SvRes.RequestID = requestId.ToString();
  3006. serviceResponseClientList.Add(key, SvRes);
  3007. }
  3008. else
  3009. {
  3010. if (SvRes.RequestType != "GetFuelMode" || Convert.ToInt32(SvRes.RequestID) != requestId)
  3011. {
  3012. //FDCPOSManager.tracer.WriteLine(string.Format("SvRes.RequestID={0}, requestId={1} - end false", SvRes.RequestID, requestId));
  3013. return false;
  3014. }
  3015. }
  3016. ServiceResponseFDCdataGetFuelMode FDCDataElem = null;
  3017. if (SvRes.FDCdata != null)
  3018. FDCDataElem = SvRes.FDCdata[0];
  3019. else
  3020. {
  3021. ServiceResponseFDCdataGetFuelMode[] FDCDataArray = null;
  3022. FDCDataElem = new ServiceResponseFDCdataGetFuelMode();
  3023. Array.Resize<ServiceResponseFDCdataGetFuelMode>(ref FDCDataArray, (FDCDataArray != null) ? FDCDataArray.Length + 1 : 1);
  3024. FDCDataArray[FDCDataArray.Length - 1] = FDCDataElem;
  3025. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  3026. SvRes.FDCdata = FDCDataArray;
  3027. }
  3028. ServiceResponseDeviceClassGetFuelMode fdcDeviceClassElem = null;
  3029. if (FDCDataElem.DeviceClass != null)
  3030. {
  3031. foreach (ServiceResponseDeviceClassGetFuelMode fdcDeviceClassElemTemp in FDCDataElem.DeviceClass)
  3032. if (fdcDeviceClassElemTemp.DeviceID == Convert.ToString(deviceId))
  3033. fdcDeviceClassElem = fdcDeviceClassElemTemp;
  3034. }
  3035. if (fdcDeviceClassElem == null && deviceId > 0)
  3036. {
  3037. fdcDeviceClassElem = new ServiceResponseDeviceClassGetFuelMode();
  3038. fdcDeviceClassElem.DeviceID = Convert.ToString(deviceId);
  3039. fdcDeviceClassElem.PumpNo = Convert.ToString(deviceId);
  3040. fdcDeviceClassElem.Type = deviceType; //Wayne.FDCPOSLibrary.DeviceType.DT_FuellingPoint;
  3041. if (FDCGlobal.ProtocolVersion == FDCVersion.V0003)
  3042. fdcDeviceClassElem.ModeNo = (modeNo == -1) ? "" : Convert.ToString(modeNo);
  3043. else
  3044. {
  3045. FuelModeElementClass fuelMode = new FuelModeElementClass();
  3046. fuelMode.ModeNo = (modeNo == -1) ? "" : Convert.ToString(modeNo);
  3047. fdcDeviceClassElem.FuelMode = fuelMode;
  3048. }
  3049. ServiceResponseDeviceClassGetFuelMode[] fdcDeviceClassArray = FDCDataElem.DeviceClass;
  3050. Array.Resize<ServiceResponseDeviceClassGetFuelMode>(ref fdcDeviceClassArray, (fdcDeviceClassArray != null) ? fdcDeviceClassArray.Length + 1 : 1);
  3051. fdcDeviceClassArray[fdcDeviceClassArray.Length - 1] = fdcDeviceClassElem;
  3052. FDCDataElem.DeviceClass = fdcDeviceClassArray;
  3053. }
  3054. //ServiceResponseModeNoGetFuelMode fdcModeNoElem = new ServiceResponseModeNoGetFuelMode();
  3055. //fdcModeNoElem.ModeNo = ModeNo;
  3056. //ServiceResponseModeNoGetFuelMode[] fdcModeNoArray = fdcDeviceClassElem.ModeNo;
  3057. //Array.Resize<ServiceResponseModeNoGetFuelMode>(ref fdcModeNoArray, (fdcModeNoArray != null) ? fdcModeNoArray.Length + 1 : 1);
  3058. //fdcModeNoArray[fdcModeNoArray.Length - 1] = fdcModeNoElem;
  3059. //fdcDeviceClassElem.ModeNo = fdcModeNoArray;
  3060. }
  3061. catch (Exception ex)
  3062. {
  3063. //FDCPOSManager.tracer.WriteLine("Exception! " + ex.Message);
  3064. }
  3065. return true;
  3066. }
  3067. public bool GetFuelModeSend(string workstationID, string applicationSender, int requestId, int status, string overallResult)
  3068. {
  3069. try
  3070. {
  3071. ServiceResponseGetFuelMode SvRes = null;
  3072. string key = FDCPOSClient.getClientID(workstationID, applicationSender) + "GetFuelMode";
  3073. if (serviceResponseClientList.ContainsKey(key))
  3074. SvRes = (ServiceResponseGetFuelMode)(serviceResponseClientList[key]);
  3075. if (SvRes != null)
  3076. {
  3077. if (SvRes.RequestType != "GetFuelMode" || Convert.ToInt32(SvRes.RequestID) != requestId)
  3078. {
  3079. //FDCPOSManager.tracer.WriteLine(string.Format("SvRes.RequestID={0}, requestId={1} - end false", SvRes.RequestID, requestId));
  3080. return false;
  3081. }
  3082. }
  3083. else
  3084. {
  3085. // send an empty response - no available transaction added
  3086. SvRes = new ServiceResponseGetFuelMode();
  3087. SvRes.WorkstationID = workstationID;
  3088. SvRes.ApplicationSender = applicationSender;
  3089. SvRes.RequestID = requestId.ToString();
  3090. serviceResponseClientList.Add(key, SvRes);
  3091. ServiceResponseFDCdataGetFuelMode FDCDataElem = new ServiceResponseFDCdataGetFuelMode();
  3092. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  3093. ServiceResponseFDCdataGetFuelMode[] FDCDataArray = { FDCDataElem };
  3094. SvRes.FDCdata = FDCDataArray;
  3095. }
  3096. if (FDCGlobal.ProtocolVersion >= FDCVersion.V0005)
  3097. SvRes.FDCdata[0].FDCStatus = ((ErrorCode)status).ToString();
  3098. SvRes.OverallResult = overallResult;
  3099. ((FDCPOSInterfaceServerManager)fdcPosManager).FdcServerTcpHandler.SendResponse<ServiceResponseGetFuelMode>(fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)], SvRes);
  3100. serviceResponseClientList.Remove(key);
  3101. }
  3102. catch (Exception ex)
  3103. {
  3104. //FDCPOSManager.tracer.WriteLine("Exception! " + ex.Message);
  3105. }
  3106. return true;
  3107. }
  3108. public bool GetConfigurationAddDSP(string workstationID, string applicationSender, int requestId, int deviceId, int productNo, string ProductName, int fuelPriceModeNo, decimal fuelPrice)
  3109. {
  3110. try
  3111. {
  3112. //FDCPOSManager.tracer.WriteLine("init");
  3113. ServiceResponseGetConfiguration SvRes = null;
  3114. ServiceResponseGetDSPConfiguration SvResDSP = null;
  3115. string commandName = (FDCGlobal.ProtocolVersion == FDCVersion.V0003 || Messages.bWholeConfiguration) ? "GetConfiguration" : "GetDSPConfiguration";
  3116. string key = FDCPOSClient.getClientID(workstationID, applicationSender) + commandName;
  3117. if (FDCGlobal.ProtocolVersion == FDCVersion.V0003 || Messages.bWholeConfiguration)
  3118. {
  3119. if (serviceResponseClientList.ContainsKey(key))
  3120. SvRes = (ServiceResponseGetConfiguration)(serviceResponseClientList[key]);
  3121. if (SvRes == null)
  3122. {
  3123. SvRes = new ServiceResponseGetConfiguration();
  3124. SvRes.WorkstationID = workstationID;
  3125. SvRes.ApplicationSender = applicationSender;
  3126. SvRes.RequestID = requestId.ToString();
  3127. serviceResponseClientList.Add(key, SvRes);
  3128. }
  3129. else
  3130. {
  3131. if (SvRes.RequestType != "GetConfiguration" || Convert.ToInt32(SvRes.RequestID) != requestId)
  3132. {
  3133. //FDCPOSManager.tracer.WriteLine(string.Format("SvRes.RequestID={0}, requestId={1} - end false", SvRes.RequestID, requestId));
  3134. return false;
  3135. }
  3136. }
  3137. }
  3138. else
  3139. {
  3140. if (serviceResponseClientList.ContainsKey(key))
  3141. SvResDSP = (ServiceResponseGetDSPConfiguration)(serviceResponseClientList[key]);
  3142. if (SvResDSP == null)
  3143. {
  3144. SvResDSP = new ServiceResponseGetDSPConfiguration();
  3145. SvResDSP.WorkstationID = workstationID;
  3146. SvResDSP.ApplicationSender = applicationSender;
  3147. SvResDSP.RequestID = requestId.ToString();
  3148. serviceResponseClientList.Add(key, SvResDSP);
  3149. }
  3150. else
  3151. {
  3152. if (SvResDSP.RequestType != "GetDSPConfiguration" || Convert.ToInt32(SvResDSP.RequestID) != requestId)
  3153. {
  3154. //FDCPOSManager.tracer.WriteLine(string.Format("SvResDSP.RequestID={0}, requestId={1} - end false", SvResDSP.RequestID, requestId));
  3155. return false;
  3156. }
  3157. }
  3158. }
  3159. ServiceResponseFDCdataGetConfiguration FDCDataElem = null;
  3160. if (SvRes != null && SvRes.FDCdata != null)
  3161. FDCDataElem = SvRes.FDCdata[0];
  3162. else if (SvResDSP != null && SvResDSP.FDCdata != null)
  3163. FDCDataElem = SvResDSP.FDCdata[0];
  3164. else
  3165. {
  3166. ServiceResponseFDCdataGetConfiguration[] FDCDataArray = null;
  3167. FDCDataElem = new ServiceResponseFDCdataGetConfiguration();
  3168. Array.Resize<ServiceResponseFDCdataGetConfiguration>(ref FDCDataArray, (FDCDataArray != null) ? FDCDataArray.Length + 1 : 1);
  3169. FDCDataArray[FDCDataArray.Length - 1] = FDCDataElem;
  3170. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  3171. if (SvRes != null)
  3172. SvRes.FDCdata = FDCDataArray;
  3173. else if (SvResDSP != null)
  3174. SvResDSP.FDCdata = FDCDataArray;
  3175. }
  3176. ServiceDeviceClassConfiguration fdcDSPDeviceClassElem = null;
  3177. if (FDCDataElem.DeviceClass != null)
  3178. {
  3179. foreach (ServiceDeviceClassConfiguration fdcDSPDeviceClassElemTemp in FDCDataElem.DeviceClass)
  3180. if (fdcDSPDeviceClassElemTemp.DeviceID == Convert.ToString(deviceId) && fdcDSPDeviceClassElemTemp.Type == Wayne.FDCPOSLibrary.DeviceType.DT_FuelDispenser)
  3181. fdcDSPDeviceClassElem = fdcDSPDeviceClassElemTemp;
  3182. }
  3183. if (fdcDSPDeviceClassElem == null)
  3184. {
  3185. fdcDSPDeviceClassElem = new ServiceDeviceClassConfiguration();
  3186. fdcDSPDeviceClassElem.DeviceID = Convert.ToString(deviceId);
  3187. fdcDSPDeviceClassElem.Type = Wayne.FDCPOSLibrary.DeviceType.DT_FuelDispenser;
  3188. ServiceDeviceClassConfiguration[] fdcDSPDeviceClassArray = FDCDataElem.DeviceClass;
  3189. Array.Resize<ServiceDeviceClassConfiguration>(ref fdcDSPDeviceClassArray, (fdcDSPDeviceClassArray != null) ? fdcDSPDeviceClassArray.Length + 1 : 1);
  3190. fdcDSPDeviceClassArray[fdcDSPDeviceClassArray.Length - 1] = fdcDSPDeviceClassElem;
  3191. FDCDataElem.DeviceClass = fdcDSPDeviceClassArray;
  3192. }
  3193. ServiceProductDSPDeviceClassConfiguration DSPProductElem = null;
  3194. if (fdcDSPDeviceClassElem.DSPProduct != null)
  3195. {
  3196. foreach (ServiceProductDSPDeviceClassConfiguration DSPProductDeviceClassElemTemp in fdcDSPDeviceClassElem.DSPProduct)
  3197. if (DSPProductDeviceClassElemTemp.DSPProductNo == Convert.ToString(productNo))
  3198. DSPProductElem = DSPProductDeviceClassElemTemp;
  3199. }
  3200. if (DSPProductElem == null)
  3201. {
  3202. DSPProductElem = new ServiceProductDSPDeviceClassConfiguration();
  3203. DSPProductElem.DSPProductNo = Convert.ToString(productNo);
  3204. DSPProductElem.DSPProductName = ProductName;
  3205. ServiceProductDSPDeviceClassConfiguration[] DSPProductDeviceClassArray = fdcDSPDeviceClassElem.DSPProduct;
  3206. Array.Resize<ServiceProductDSPDeviceClassConfiguration>(ref DSPProductDeviceClassArray, (DSPProductDeviceClassArray != null) ? DSPProductDeviceClassArray.Length + 1 : 1);
  3207. DSPProductDeviceClassArray[DSPProductDeviceClassArray.Length - 1] = DSPProductElem;
  3208. fdcDSPDeviceClassElem.DSPProduct = DSPProductDeviceClassArray;
  3209. }
  3210. ServiceFuelPriceDSPDeviceClassConfiguration DSPFuelPriceElem = new ServiceFuelPriceDSPDeviceClassConfiguration();
  3211. DSPFuelPriceElem.FPDSPModeNo = Convert.ToString(fuelPriceModeNo);
  3212. DSPFuelPriceElem.FPDSPPrice = FDCConvert.ToString(fuelPrice);
  3213. ServiceFuelPriceDSPDeviceClassConfiguration[] DSPFuelPriceArray = DSPProductElem.DSPFuelPrice;
  3214. Array.Resize<ServiceFuelPriceDSPDeviceClassConfiguration>(ref DSPFuelPriceArray, (DSPFuelPriceArray != null) ? DSPFuelPriceArray.Length + 1 : 1);
  3215. DSPFuelPriceArray[DSPFuelPriceArray.Length - 1] = DSPFuelPriceElem;
  3216. DSPProductElem.DSPFuelPrice = DSPFuelPriceArray;
  3217. }
  3218. catch (Exception ex)
  3219. {
  3220. //FDCPOSManager.tracer.WriteLine("Exception! " + ex.Message);
  3221. }
  3222. //FDCPOSManager.tracer.WriteLine("end");
  3223. return true;
  3224. }
  3225. public bool GetConfigurationAddFP(string workstationID, string applicationSender, int requestId, int deviceId, int pumpNo, int nozzleNo, int productNo1, int productNo2, decimal blendRatio, int blendProductNo)
  3226. {
  3227. try
  3228. {
  3229. //FDCPOSManager.tracer.WriteLine("init");
  3230. ServiceResponseGetConfiguration SvRes = null;
  3231. ServiceResponseGetDSPConfiguration SvResDSP = null;
  3232. string commandName = (FDCGlobal.ProtocolVersion == FDCVersion.V0003 || Messages.bWholeConfiguration) ? "GetConfiguration" : "GetDSPConfiguration";
  3233. string key = FDCPOSClient.getClientID(workstationID, applicationSender) + commandName;
  3234. if (FDCGlobal.ProtocolVersion == FDCVersion.V0003 || Messages.bWholeConfiguration)
  3235. {
  3236. if (serviceResponseClientList.ContainsKey(key))
  3237. SvRes = (ServiceResponseGetConfiguration)(serviceResponseClientList[key]);
  3238. if (SvRes == null)
  3239. {
  3240. SvRes = new ServiceResponseGetConfiguration();
  3241. SvRes.WorkstationID = workstationID;
  3242. SvRes.ApplicationSender = applicationSender;
  3243. SvRes.RequestID = requestId.ToString();
  3244. serviceResponseClientList.Add(key, SvRes);
  3245. }
  3246. else
  3247. {
  3248. if (SvRes.RequestType != "GetConfiguration" || Convert.ToInt32(SvRes.RequestID) != requestId)
  3249. {
  3250. //FDCPOSManager.tracer.WriteLine(string.Format("SvRes.RequestID={0}, requestId={1} - end false", SvRes.RequestID, requestId));
  3251. return false;
  3252. }
  3253. }
  3254. }
  3255. else
  3256. {
  3257. if (serviceResponseClientList.ContainsKey(key))
  3258. SvResDSP = (ServiceResponseGetDSPConfiguration)(serviceResponseClientList[key]);
  3259. if (SvResDSP == null)
  3260. {
  3261. SvResDSP = new ServiceResponseGetDSPConfiguration();
  3262. SvResDSP.WorkstationID = workstationID;
  3263. SvResDSP.ApplicationSender = applicationSender;
  3264. SvResDSP.RequestID = requestId.ToString();
  3265. serviceResponseClientList.Add(key, SvResDSP);
  3266. }
  3267. else
  3268. {
  3269. if (SvResDSP.RequestType != "GetDSPConfiguration" || Convert.ToInt32(SvResDSP.RequestID) != requestId)
  3270. {
  3271. //FDCPOSManager.tracer.WriteLine(string.Format("SvResDSP.RequestID={0}, requestId={1} - end false", SvResDSP.RequestID, requestId));
  3272. return false;
  3273. }
  3274. }
  3275. }
  3276. ServiceResponseFDCdataGetConfiguration FDCDataElem = null;
  3277. if (SvRes != null && SvRes.FDCdata != null)
  3278. FDCDataElem = SvRes.FDCdata[0];
  3279. else if (SvResDSP != null && SvResDSP.FDCdata != null)
  3280. FDCDataElem = SvResDSP.FDCdata[0];
  3281. else
  3282. {
  3283. ServiceResponseFDCdataGetConfiguration[] FDCDataArray = null;
  3284. FDCDataElem = new ServiceResponseFDCdataGetConfiguration();
  3285. Array.Resize<ServiceResponseFDCdataGetConfiguration>(ref FDCDataArray, (FDCDataArray != null) ? FDCDataArray.Length + 1 : 1);
  3286. FDCDataArray[FDCDataArray.Length - 1] = FDCDataElem;
  3287. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  3288. if (SvRes != null)
  3289. SvRes.FDCdata = FDCDataArray;
  3290. else if (SvResDSP != null)
  3291. SvResDSP.FDCdata = FDCDataArray;
  3292. }
  3293. ServiceDeviceClassConfiguration fdcFPDeviceClassElem = null;
  3294. if (FDCDataElem.DeviceClass != null && (FDCGlobal.ProtocolVersion < FDCVersion.V0007 || Messages.bWholeConfiguration))
  3295. {
  3296. foreach (ServiceDeviceClassConfiguration fdcFPDeviceClassElemTemp in FDCDataElem.DeviceClass)
  3297. if (fdcFPDeviceClassElemTemp.DeviceID == Convert.ToString(deviceId) &&
  3298. fdcFPDeviceClassElemTemp.FPPumpNo == Convert.ToString(pumpNo) &&
  3299. fdcFPDeviceClassElemTemp.Type == Wayne.FDCPOSLibrary.DeviceType.DT_FuellingPoint)
  3300. {
  3301. //FDCPOSManager.tracer.WriteLine(string.Format("DT_FuellingPoint deviceId={0} found", deviceId));
  3302. fdcFPDeviceClassElem = fdcFPDeviceClassElemTemp;
  3303. }
  3304. }
  3305. else if (FDCDataElem.DeviceClass != null && FDCGlobal.ProtocolVersion >= FDCVersion.V0007)
  3306. {
  3307. ServiceDeviceClassConfiguration fdcFDCDeviceClassElem = null;
  3308. foreach (ServiceDeviceClassConfiguration fdcFDCDeviceClassElemTemp in FDCDataElem.DeviceClass)
  3309. if (fdcFDCDeviceClassElemTemp.DeviceID == Convert.ToString(deviceId) &&
  3310. fdcFDCDeviceClassElemTemp.Type == Wayne.FDCPOSLibrary.DeviceType.DT_FuelDispenser)
  3311. {
  3312. //FDCPOSManager.tracer.WriteLine(string.Format(">=V0007 - DT_FuelDispenser deviceId={0} found", deviceId));
  3313. fdcFDCDeviceClassElem = fdcFDCDeviceClassElemTemp;
  3314. if (fdcFDCDeviceClassElem.DeviceClass != null)
  3315. {
  3316. foreach (ServiceDeviceClassConfiguration fdcFPDeviceClassElemTemp in fdcFDCDeviceClassElem.DeviceClass)
  3317. if (fdcFPDeviceClassElemTemp.DeviceID == Convert.ToString(deviceId) &&
  3318. fdcFPDeviceClassElemTemp.FPPumpNo == Convert.ToString(pumpNo) &&
  3319. fdcFPDeviceClassElemTemp.Type == Wayne.FDCPOSLibrary.DeviceType.DT_FuellingPoint)
  3320. {
  3321. //FDCPOSManager.tracer.WriteLine(string.Format("DT_FuellingPoint deviceId={0} found", deviceId));
  3322. fdcFPDeviceClassElem = fdcFPDeviceClassElemTemp;
  3323. }
  3324. }
  3325. }
  3326. }
  3327. if (fdcFPDeviceClassElem == null)
  3328. {
  3329. //FDCPOSManager.tracer.WriteLine(string.Format("DT_FuellingPoint deviceId={0} create", deviceId));
  3330. fdcFPDeviceClassElem = new ServiceDeviceClassConfiguration();
  3331. fdcFPDeviceClassElem.DeviceID = Convert.ToString(deviceId);
  3332. fdcFPDeviceClassElem.FPPumpNo = Convert.ToString(pumpNo);
  3333. fdcFPDeviceClassElem.Type = Wayne.FDCPOSLibrary.DeviceType.DT_FuellingPoint;
  3334. if (FDCGlobal.ProtocolVersion < FDCVersion.V0007 || Messages.bWholeConfiguration)
  3335. {
  3336. ServiceDeviceClassConfiguration[] fdcFPDeviceClassArray = FDCDataElem.DeviceClass;
  3337. Array.Resize<ServiceDeviceClassConfiguration>(ref fdcFPDeviceClassArray, (fdcFPDeviceClassArray != null) ? fdcFPDeviceClassArray.Length + 1 : 1);
  3338. fdcFPDeviceClassArray[fdcFPDeviceClassArray.Length - 1] = fdcFPDeviceClassElem;
  3339. FDCDataElem.DeviceClass = fdcFPDeviceClassArray;
  3340. //FDCPOSManager.tracer.WriteLine("<V0007 - array resized");
  3341. }
  3342. else
  3343. {
  3344. //ServiceDeviceClassConfiguration fdcDSPDeviceClassElem = null;
  3345. foreach (ServiceDeviceClassConfiguration fdcDSPDeviceClassElemTemp in FDCDataElem.DeviceClass)
  3346. if (fdcDSPDeviceClassElemTemp.DeviceID == Convert.ToString(deviceId) && fdcDSPDeviceClassElemTemp.Type == Wayne.FDCPOSLibrary.DeviceType.DT_FuelDispenser)
  3347. {
  3348. ServiceDeviceClassConfiguration[] fdcFPDeviceClassArray = fdcDSPDeviceClassElemTemp.DeviceClass;
  3349. Array.Resize<ServiceDeviceClassConfiguration>(ref fdcFPDeviceClassArray, (fdcFPDeviceClassArray != null) ? fdcFPDeviceClassArray.Length + 1 : 1);
  3350. fdcFPDeviceClassArray[fdcFPDeviceClassArray.Length - 1] = fdcFPDeviceClassElem;
  3351. fdcDSPDeviceClassElemTemp.DeviceClass = fdcFPDeviceClassArray;
  3352. //FDCPOSManager.tracer.WriteLine(">=V0007 - array resized");
  3353. }
  3354. }
  3355. }
  3356. ServiceNozzleFPDeviceClassConfiguration FPNozzleElem = null;
  3357. if (fdcFPDeviceClassElem.FPNozzle != null)
  3358. {
  3359. foreach (ServiceNozzleFPDeviceClassConfiguration FPNozzleDeviceClassElemTemp in fdcFPDeviceClassElem.FPNozzle)
  3360. if (FPNozzleDeviceClassElemTemp.FPNozzleNo == Convert.ToString(nozzleNo))
  3361. FPNozzleElem = FPNozzleDeviceClassElemTemp;
  3362. }
  3363. if (FPNozzleElem == null)
  3364. {
  3365. FPNozzleElem = new ServiceNozzleFPDeviceClassConfiguration();
  3366. FPNozzleElem.FPNozzleNo = Convert.ToString(nozzleNo);
  3367. ServiceNozzleFPDeviceClassConfiguration[] FPNozzleDeviceClassArray = fdcFPDeviceClassElem.FPNozzle;
  3368. Array.Resize<ServiceNozzleFPDeviceClassConfiguration>(ref FPNozzleDeviceClassArray, (FPNozzleDeviceClassArray != null) ? FPNozzleDeviceClassArray.Length + 1 : 1);
  3369. FPNozzleDeviceClassArray[FPNozzleDeviceClassArray.Length - 1] = FPNozzleElem;
  3370. fdcFPDeviceClassElem.FPNozzle = FPNozzleDeviceClassArray;
  3371. }
  3372. ServiceProductIdFPDeviceClassConfiguration FPProductIdElem = new ServiceProductIdFPDeviceClassConfiguration();
  3373. FPProductIdElem.PIFPProductNo1 = Convert.ToString(productNo1);
  3374. FPProductIdElem.PIFPProductNo2 = Convert.ToString(productNo2);
  3375. FPProductIdElem.PIFPBlendRatio = (blendRatio < 0) ? "" : FDCConvert.ToString(blendRatio);
  3376. FPProductIdElem.PIFPBlendProductNo = (blendProductNo < 0) ? "" : Convert.ToString(blendProductNo);
  3377. ServiceProductIdFPDeviceClassConfiguration[] FPProductIdArray = FPNozzleElem.FPProductId;
  3378. Array.Resize<ServiceProductIdFPDeviceClassConfiguration>(ref FPProductIdArray, (FPProductIdArray != null) ? FPProductIdArray.Length + 1 : 1);
  3379. FPProductIdArray[FPProductIdArray.Length - 1] = FPProductIdElem;
  3380. FPNozzleElem.FPProductId = FPProductIdArray;
  3381. }
  3382. catch (Exception ex)
  3383. {
  3384. //FDCPOSManager.tracer.WriteLine("Exception! " + ex.Message);
  3385. }
  3386. //FDCPOSManager.tracer.WriteLine("end");
  3387. return true;
  3388. }
  3389. /// <summary>
  3390. ///
  3391. /// </summary>
  3392. /// <param name="workstationID"></param>
  3393. /// <param name="applicationSender"></param>
  3394. /// <param name="requestId"></param>
  3395. /// <param name="tankDevice_pumpId_nozzleId_Map">list of tankDevice:PumpId:NozzleLogicalId</param>
  3396. /// <returns></returns>
  3397. public bool GetConfigurationAddTLG(string workstationID, string applicationSender, int requestId,
  3398. IEnumerable<IGrouping<Tank, IGrouping<int, byte>>> tankDevice_pumpId_nozzleId_Map)
  3399. {
  3400. try
  3401. {
  3402. //FDCPOSManager.tracer.WriteLine("init");
  3403. ServiceResponseGetConfiguration SvRes = null;
  3404. ServiceResponseGetTLGConfiguration SvResTLG = null;
  3405. string commandName = (FDCGlobal.ProtocolVersion == FDCVersion.V0003 || Messages.bWholeConfiguration) ? "GetConfiguration" : "GetTLGConfiguration";
  3406. string key = FDCPOSClient.getClientID(workstationID, applicationSender) + commandName;
  3407. if (FDCGlobal.ProtocolVersion == FDCVersion.V0003 || Messages.bWholeConfiguration)
  3408. {
  3409. if (serviceResponseClientList.ContainsKey(key))
  3410. SvRes = (ServiceResponseGetConfiguration)(serviceResponseClientList[key]);
  3411. if (SvRes == null)
  3412. {
  3413. SvRes = new ServiceResponseGetConfiguration();
  3414. SvRes.WorkstationID = workstationID;
  3415. SvRes.ApplicationSender = applicationSender;
  3416. SvRes.RequestID = requestId.ToString();
  3417. serviceResponseClientList.Add(key, SvRes);
  3418. }
  3419. else
  3420. {
  3421. if (SvRes.RequestType != "GetConfiguration" || Convert.ToInt32(SvRes.RequestID) != requestId)
  3422. {
  3423. //FDCPOSManager.tracer.WriteLine(string.Format("SvRes.RequestID={0}, requestId={1} - end false", SvRes.RequestID, requestId));
  3424. return false;
  3425. }
  3426. }
  3427. }
  3428. else
  3429. {
  3430. if (serviceResponseClientList.ContainsKey(key))
  3431. SvResTLG = (ServiceResponseGetTLGConfiguration)(serviceResponseClientList[key]);
  3432. if (SvResTLG == null)
  3433. {
  3434. SvResTLG = new ServiceResponseGetTLGConfiguration();
  3435. SvResTLG.WorkstationID = workstationID;
  3436. SvResTLG.ApplicationSender = applicationSender;
  3437. SvResTLG.RequestID = requestId.ToString();
  3438. serviceResponseClientList.Add(key, SvResTLG);
  3439. }
  3440. else
  3441. {
  3442. if (SvResTLG.RequestType != "GetTLGConfiguration" || Convert.ToInt32(SvResTLG.RequestID) != requestId)
  3443. {
  3444. //FDCPOSManager.tracer.WriteLine(string.Format("SvResTLG.RequestID={0}, requestId={1} - end false", SvResTLG.RequestID, requestId));
  3445. return false;
  3446. }
  3447. }
  3448. }
  3449. ServiceResponseFDCdataGetConfiguration FDCDataElem = null;
  3450. if (SvRes != null && SvRes.FDCdata != null)
  3451. FDCDataElem = SvRes.FDCdata[0];
  3452. else if (SvResTLG != null && SvResTLG.FDCdata != null)
  3453. FDCDataElem = SvResTLG.FDCdata[0];
  3454. else
  3455. {
  3456. ServiceResponseFDCdataGetConfiguration[] FDCDataArray = null;
  3457. FDCDataElem = new ServiceResponseFDCdataGetConfiguration();
  3458. Array.Resize<ServiceResponseFDCdataGetConfiguration>(ref FDCDataArray, (FDCDataArray != null) ? FDCDataArray.Length + 1 : 1);
  3459. FDCDataArray[FDCDataArray.Length - 1] = FDCDataElem;
  3460. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  3461. if (SvRes != null)
  3462. SvRes.FDCdata = FDCDataArray;
  3463. else if (SvResTLG != null)
  3464. SvResTLG.FDCdata = FDCDataArray;
  3465. }
  3466. ServiceDeviceClassConfiguration fdcTLGDeviceClassElem = null;
  3467. //if (FDCDataElem.DeviceClass != null)
  3468. //{
  3469. // foreach (ServiceDeviceClassConfiguration fdcTLGDeviceClassElemTemp in FDCDataElem.DeviceClass)
  3470. // {
  3471. // if (fdcTLGDeviceClassElemTemp.DeviceID == Convert.ToString(tankDeviceId) && fdcTLGDeviceClassElemTemp.Type == Wayne.FDCPOSLibrary.DeviceType.DT_TankLevelGauge)
  3472. // {
  3473. // //VERIFICARE
  3474. // //fdcTLGDeviceClassElem = fdcTLGDeviceClassElemTemp;
  3475. // return true;
  3476. // }
  3477. // }
  3478. //}
  3479. //<ServiceResponse\<FDCdata>\<DeviceClass>
  3480. var deviceClassesOfTLG = new List<ServiceDeviceClassConfiguration>();
  3481. //group by TankNumber
  3482. foreach (var tankGroup in tankDevice_pumpId_nozzleId_Map)
  3483. {
  3484. fdcTLGDeviceClassElem = new ServiceDeviceClassConfiguration();
  3485. fdcTLGDeviceClassElem.TPProductNo = tankGroup.Key.Product?.ProductCode;
  3486. fdcTLGDeviceClassElem.TPProductName = tankGroup.Key.Product?.ProductLabel;
  3487. fdcTLGDeviceClassElem.TPShellCapacity = (tankGroup.Key.Limit?.FullVolume ?? 0).ToString();
  3488. fdcTLGDeviceClassElem.TPMaxSafeFillCap = (tankGroup.Key.Limit?.MaxVolume ?? 0).ToString();
  3489. fdcTLGDeviceClassElem.TPLowCapacity = (tankGroup.Key.Limit?.LowProduct ?? 0).ToString();
  3490. fdcTLGDeviceClassElem.TPMinOperatingCapacity = (tankGroup.Key.Limit?.LowProduct ?? 0).ToString();
  3491. //tank device id
  3492. fdcTLGDeviceClassElem.DeviceID = Convert.ToString(tankGroup.Key.TankNumber);
  3493. fdcTLGDeviceClassElem.Type = Wayne.FDCPOSLibrary.DeviceType.DT_TankLevelGauge;
  3494. #region
  3495. //<ServiceResponse\<FDCdata>\<DeviceClass>\<DeviceClass>
  3496. var deviceClassesOfPump = new List<ServiceDeviceClassConfiguration>();
  3497. foreach (var pumpGroup in tankGroup)
  3498. {
  3499. deviceClassesOfPump.Add(new ServiceDeviceClassConfiguration()
  3500. {
  3501. Type = Wayne.FDCPOSLibrary.DeviceType.DT_FuellingPoint,
  3502. FPPumpNo = pumpGroup.Key.ToString(),
  3503. FPNozzle = pumpGroup.Select(nzId => new ServiceNozzleFPDeviceClassConfiguration()
  3504. {
  3505. FPNozzleNo = nzId.ToString(),
  3506. }).ToArray()
  3507. });
  3508. }
  3509. #endregion
  3510. fdcTLGDeviceClassElem.DeviceClass = deviceClassesOfPump.ToArray();
  3511. deviceClassesOfTLG.Add(fdcTLGDeviceClassElem);
  3512. //ServiceDeviceClassConfiguration[] fdcTLGDeviceClassArray = FDCDataElem.DeviceClass;
  3513. //Array.Resize<ServiceDeviceClassConfiguration>(ref fdcTLGDeviceClassArray, (fdcTLGDeviceClassArray != null) ? fdcTLGDeviceClassArray.Length + 1 : 1);
  3514. //fdcTLGDeviceClassArray[fdcTLGDeviceClassArray.Length - 1] = fdcTLGDeviceClassElem;
  3515. }
  3516. FDCDataElem.DeviceClass = deviceClassesOfTLG.ToArray();
  3517. }
  3518. catch (Exception ex)
  3519. {
  3520. //FDCPOSManager.tracer.WriteLine("Exception! " + ex.Message);
  3521. }
  3522. //FDCPOSManager.tracer.WriteLine("end");
  3523. return true;
  3524. }
  3525. public bool GetConfigurationAddTP(string workstationID, string applicationSender, int requestId, int tlgId, int deviceId, int tankNo, int productNo, string ProductName, int manualMode, decimal shellCapacity, decimal maxSafeFillCap, decimal lowCapacity, decimal minOperatingCapacity, int tankManifoldPartnersTankNo, decimal hiHiLevel, decimal hiLevel, decimal loLevel, decimal loLoLevel, decimal hiWater)
  3526. {
  3527. try
  3528. {
  3529. //FDCPOSManager.tracer.WriteLine("init");
  3530. ServiceResponseGetConfiguration SvRes = null;
  3531. ServiceResponseGetTLGConfiguration SvResTLG = null;
  3532. string commandName = (FDCGlobal.ProtocolVersion == FDCVersion.V0003 || Messages.bWholeConfiguration) ? "GetConfiguration" : "GetTLGConfiguration";
  3533. string key = FDCPOSClient.getClientID(workstationID, applicationSender) + commandName;
  3534. if (FDCGlobal.ProtocolVersion == FDCVersion.V0003 || Messages.bWholeConfiguration)
  3535. {
  3536. if (serviceResponseClientList.ContainsKey(key))
  3537. SvRes = (ServiceResponseGetConfiguration)(serviceResponseClientList[key]);
  3538. if (SvRes == null)
  3539. {
  3540. SvRes = new ServiceResponseGetConfiguration();
  3541. SvRes.WorkstationID = workstationID;
  3542. SvRes.ApplicationSender = applicationSender;
  3543. SvRes.RequestID = requestId.ToString();
  3544. serviceResponseClientList.Add(key, SvRes);
  3545. }
  3546. else
  3547. {
  3548. if (SvRes.RequestType != "GetConfiguration" || Convert.ToInt32(SvRes.RequestID) != requestId)
  3549. {
  3550. //FDCPOSManager.tracer.WriteLine(string.Format("SvRes.RequestID={0}, requestId={1} - end false", SvRes.RequestID, requestId));
  3551. return false;
  3552. }
  3553. }
  3554. }
  3555. else
  3556. {
  3557. if (serviceResponseClientList.ContainsKey(key))
  3558. SvResTLG = (ServiceResponseGetTLGConfiguration)(serviceResponseClientList[key]);
  3559. if (SvResTLG == null)
  3560. {
  3561. SvResTLG = new ServiceResponseGetTLGConfiguration();
  3562. SvResTLG.WorkstationID = workstationID;
  3563. SvResTLG.ApplicationSender = applicationSender;
  3564. SvResTLG.RequestID = requestId.ToString();
  3565. serviceResponseClientList.Add(key, SvResTLG);
  3566. }
  3567. else
  3568. {
  3569. if (SvResTLG.RequestType != "GetTLGConfiguration" || Convert.ToInt32(SvResTLG.RequestID) != requestId)
  3570. {
  3571. //FDCPOSManager.tracer.WriteLine(string.Format("SvResTLG.RequestID={0}, requestId={1} - end false", SvResTLG.RequestID, requestId));
  3572. return false;
  3573. }
  3574. }
  3575. }
  3576. ServiceResponseFDCdataGetConfiguration FDCDataElem = null;
  3577. if (SvRes != null && SvRes.FDCdata != null)
  3578. FDCDataElem = SvRes.FDCdata[0];
  3579. else if (SvResTLG != null && SvResTLG.FDCdata != null)
  3580. FDCDataElem = SvResTLG.FDCdata[0];
  3581. else
  3582. {
  3583. ServiceResponseFDCdataGetConfiguration[] FDCDataArray = null;
  3584. FDCDataElem = new ServiceResponseFDCdataGetConfiguration();
  3585. Array.Resize<ServiceResponseFDCdataGetConfiguration>(ref FDCDataArray, (FDCDataArray != null) ? FDCDataArray.Length + 1 : 1);
  3586. FDCDataArray[FDCDataArray.Length - 1] = FDCDataElem;
  3587. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  3588. if (SvRes != null)
  3589. SvRes.FDCdata = FDCDataArray;
  3590. else if (SvResTLG != null)
  3591. SvResTLG.FDCdata = FDCDataArray;
  3592. }
  3593. ServiceDeviceClassConfiguration fdcTPDeviceClassElem = null;
  3594. if (FDCDataElem.DeviceClass != null && (FDCGlobal.ProtocolVersion == FDCVersion.V0003 || Messages.bWholeConfiguration))
  3595. {
  3596. foreach (ServiceDeviceClassConfiguration fdcTPDeviceClassElemTemp in FDCDataElem.DeviceClass)
  3597. if (fdcTPDeviceClassElemTemp.DeviceID == Convert.ToString(deviceId) &&
  3598. fdcTPDeviceClassElemTemp.TPTankNo == Convert.ToString(tankNo) &&
  3599. fdcTPDeviceClassElemTemp.Type == Wayne.FDCPOSLibrary.DeviceType.DT_TankProbe)
  3600. fdcTPDeviceClassElem = fdcTPDeviceClassElemTemp;
  3601. }
  3602. else if (FDCDataElem.DeviceClass != null && FDCGlobal.ProtocolVersion > FDCVersion.V0003)
  3603. {
  3604. ServiceDeviceClassConfiguration fdcTLGDeviceClassElem = null;
  3605. foreach (ServiceDeviceClassConfiguration fdcTLGDeviceClassElemTemp in FDCDataElem.DeviceClass)
  3606. if (fdcTLGDeviceClassElemTemp.DeviceID == Convert.ToString(tlgId) &&
  3607. fdcTLGDeviceClassElemTemp.Type == Wayne.FDCPOSLibrary.DeviceType.DT_TankLevelGauge)
  3608. {
  3609. //FDCPOSManager.tracer.WriteLine(string.Format(">V0003 - DT_TankLevelGauge deviceId={0} found", tlgId));
  3610. fdcTLGDeviceClassElem = fdcTLGDeviceClassElemTemp;
  3611. if (fdcTLGDeviceClassElem.DeviceClass != null)
  3612. {
  3613. foreach (ServiceDeviceClassConfiguration fdcTPDeviceClassElemTemp in fdcTLGDeviceClassElem.DeviceClass)
  3614. if (fdcTPDeviceClassElemTemp.DeviceID == Convert.ToString(deviceId) &&
  3615. fdcTPDeviceClassElemTemp.TPTankNo == Convert.ToString(tankNo) &&
  3616. fdcTPDeviceClassElemTemp.Type == Wayne.FDCPOSLibrary.DeviceType.DT_TankProbe)
  3617. {
  3618. //FDCPOSManager.tracer.WriteLine(string.Format("DT_TankProbe deviceId={0} tankNo={1} found", deviceId, tankNo));
  3619. fdcTPDeviceClassElem = fdcTPDeviceClassElemTemp;
  3620. }
  3621. }
  3622. }
  3623. }
  3624. if (fdcTPDeviceClassElem == null)
  3625. {
  3626. //FDCPOSManager.tracer.WriteLine(string.Format("DT_TankProbe deviceId={0} create", deviceId));
  3627. fdcTPDeviceClassElem = new ServiceDeviceClassConfiguration();
  3628. fdcTPDeviceClassElem.Type = Wayne.FDCPOSLibrary.DeviceType.DT_TankProbe;
  3629. fdcTPDeviceClassElem.DeviceID = Convert.ToString(deviceId);
  3630. fdcTPDeviceClassElem.TPTankNo = Convert.ToString(tankNo);
  3631. fdcTPDeviceClassElem.TPProductNo = Convert.ToString(productNo);
  3632. fdcTPDeviceClassElem.TPProductName = ProductName;
  3633. fdcTPDeviceClassElem.TP_PPManualMode = (manualMode != 0) ? "True" : "False";
  3634. fdcTPDeviceClassElem.TPShellCapacity = (shellCapacity < 0) ? "" : FDCConvert.ToString(shellCapacity);
  3635. fdcTPDeviceClassElem.TPMaxSafeFillCap = (maxSafeFillCap < 0) ? "" : FDCConvert.ToString(maxSafeFillCap);
  3636. fdcTPDeviceClassElem.TPLowCapacity = (lowCapacity < 0) ? "" : FDCConvert.ToString(lowCapacity);
  3637. fdcTPDeviceClassElem.TPMinOperatingCapacity = (minOperatingCapacity < 0) ? "" : FDCConvert.ToString(minOperatingCapacity);
  3638. ServiceTankManifoldPartnersTPDeviceClassConfiguration TPTankManifoldPartnersElem = new ServiceTankManifoldPartnersTPDeviceClassConfiguration();
  3639. ServiceTankManifoldPartnersTPDeviceClassConfiguration[] TPTankManifolPartnersArray = null;
  3640. Array.Resize<ServiceTankManifoldPartnersTPDeviceClassConfiguration>(ref TPTankManifolPartnersArray, (TPTankManifolPartnersArray != null) ? TPTankManifolPartnersArray.Length + 1 : 1);
  3641. TPTankManifolPartnersArray[TPTankManifolPartnersArray.Length - 1] = TPTankManifoldPartnersElem;
  3642. fdcTPDeviceClassElem.TPTankManifoldPartners = TPTankManifolPartnersArray;
  3643. ServiceSetPointsTPDeviceClassConfiguration SetPoints = new ServiceSetPointsTPDeviceClassConfiguration();
  3644. SetPoints.TPHiHiLevel = (hiHiLevel < 0) ? "" : FDCConvert.ToString(hiHiLevel);
  3645. SetPoints.TPHiLevel = (hiLevel < 0) ? "" : FDCConvert.ToString(hiLevel);
  3646. SetPoints.TPHiWater = (hiWater < 0) ? "" : FDCConvert.ToString(hiWater);
  3647. SetPoints.TPLoLevel = (loLevel < 0) ? "" : FDCConvert.ToString(loLevel);
  3648. SetPoints.TPLoLoLevel = (loLoLevel < 0) ? "" : FDCConvert.ToString(loLoLevel);
  3649. ServiceSetPointsTPDeviceClassConfiguration[] SetPointsArray = null;
  3650. Array.Resize<ServiceSetPointsTPDeviceClassConfiguration>(ref SetPointsArray, 1);
  3651. SetPointsArray[0] = SetPoints;
  3652. fdcTPDeviceClassElem.TPSetPoints = SetPointsArray;
  3653. if (FDCGlobal.ProtocolVersion == FDCVersion.V0003 || Messages.bWholeConfiguration)
  3654. {
  3655. ServiceDeviceClassConfiguration[] fdcTPDeviceClassArray = FDCDataElem.DeviceClass;
  3656. Array.Resize<ServiceDeviceClassConfiguration>(ref fdcTPDeviceClassArray, (fdcTPDeviceClassArray != null) ? fdcTPDeviceClassArray.Length + 1 : 1);
  3657. fdcTPDeviceClassArray[fdcTPDeviceClassArray.Length - 1] = fdcTPDeviceClassElem;
  3658. FDCDataElem.DeviceClass = fdcTPDeviceClassArray;
  3659. //FDCPOSManager.tracer.WriteLine("<V0007 - array resized");
  3660. }
  3661. else
  3662. {
  3663. //ServiceDeviceClassConfiguration fdcDSPDeviceClassElem = null;
  3664. foreach (ServiceDeviceClassConfiguration fdcTLGDeviceClassElemTemp in FDCDataElem.DeviceClass)
  3665. if (fdcTLGDeviceClassElemTemp.DeviceID == Convert.ToString(tlgId) && fdcTLGDeviceClassElemTemp.Type == Wayne.FDCPOSLibrary.DeviceType.DT_TankLevelGauge)
  3666. {
  3667. ServiceDeviceClassConfiguration[] fdcTPDeviceClassArray = fdcTLGDeviceClassElemTemp.DeviceClass;
  3668. Array.Resize<ServiceDeviceClassConfiguration>(ref fdcTPDeviceClassArray, (fdcTPDeviceClassArray != null) ? fdcTPDeviceClassArray.Length + 1 : 1);
  3669. fdcTPDeviceClassArray[fdcTPDeviceClassArray.Length - 1] = fdcTPDeviceClassElem;
  3670. fdcTLGDeviceClassElemTemp.DeviceClass = fdcTPDeviceClassArray;
  3671. //FDCPOSManager.tracer.WriteLine(">V0003 - array resized");
  3672. }
  3673. }
  3674. }
  3675. ServiceTankNoTPDeviceClassConfiguration TPTankNoElem = new ServiceTankNoTPDeviceClassConfiguration();
  3676. TPTankNoElem.TPTankNo = (tankManifoldPartnersTankNo <= 0) ? "" : Convert.ToString(tankManifoldPartnersTankNo);
  3677. if (fdcTPDeviceClassElem.TPTankManifoldPartners[0].TPTankNo == null ||
  3678. (fdcTPDeviceClassElem.TPTankManifoldPartners[0].TPTankNo != null && tankManifoldPartnersTankNo >= 0))
  3679. {
  3680. ServiceTankNoTPDeviceClassConfiguration[] TPTankNoArray = fdcTPDeviceClassElem.TPTankManifoldPartners[0].TPTankNo;
  3681. Array.Resize<ServiceTankNoTPDeviceClassConfiguration>(ref TPTankNoArray, (TPTankNoArray != null) ? TPTankNoArray.Length + 1 : 1);
  3682. TPTankNoArray[TPTankNoArray.Length - 1] = TPTankNoElem;
  3683. fdcTPDeviceClassElem.TPTankManifoldPartners[0].TPTankNo = TPTankNoArray;
  3684. }
  3685. }
  3686. catch (Exception ex)
  3687. {
  3688. //FDCPOSManager.tracer.WriteLine("Exception! " + ex.Message);
  3689. }
  3690. //FDCPOSManager.tracer.WriteLine("end");
  3691. return true;
  3692. }
  3693. public bool GetConfigurationAddPP(string workstationID, string applicationSender, int requestId, int deviceId, int logicalDeviceNo, int manualMode, int segmentNo, int productNo, string ProductName, decimal productPrice, int modeNo)
  3694. {
  3695. try
  3696. {
  3697. //FDCPOSManager.tracer.WriteLine("init");
  3698. ServiceResponseGetConfiguration SvRes = null;
  3699. ServiceResponseGetPPConfiguration SvResPP = null;
  3700. string commandName = (FDCGlobal.ProtocolVersion == FDCVersion.V0003 || Messages.bWholeConfiguration) ? "GetConfiguration" : "GetPPConfiguration";
  3701. string key = FDCPOSClient.getClientID(workstationID, applicationSender) + commandName;
  3702. if (FDCGlobal.ProtocolVersion == FDCVersion.V0003 || Messages.bWholeConfiguration)
  3703. {
  3704. if (serviceResponseClientList.ContainsKey(key))
  3705. SvRes = (ServiceResponseGetConfiguration)(serviceResponseClientList[key]);
  3706. if (SvRes == null)
  3707. {
  3708. SvRes = new ServiceResponseGetConfiguration();
  3709. SvRes.WorkstationID = workstationID;
  3710. SvRes.ApplicationSender = applicationSender;
  3711. SvRes.RequestID = requestId.ToString();
  3712. serviceResponseClientList.Add(key, SvRes);
  3713. }
  3714. else
  3715. {
  3716. if (SvRes.RequestType != "GetConfiguration" || Convert.ToInt32(SvRes.RequestID) != requestId)
  3717. {
  3718. //FDCPOSManager.tracer.WriteLine(string.Format("SvRes.RequestID={0}, requestId={1} - end false", SvRes.RequestID, requestId));
  3719. return false;
  3720. }
  3721. }
  3722. }
  3723. else
  3724. {
  3725. if (serviceResponseClientList.ContainsKey(key))
  3726. SvResPP = (ServiceResponseGetPPConfiguration)(serviceResponseClientList[key]);
  3727. if (SvResPP == null)
  3728. {
  3729. SvResPP = new ServiceResponseGetPPConfiguration();
  3730. SvResPP.WorkstationID = workstationID;
  3731. SvResPP.ApplicationSender = applicationSender;
  3732. SvResPP.RequestID = requestId.ToString();
  3733. serviceResponseClientList.Add(key, SvResPP);
  3734. }
  3735. else
  3736. {
  3737. if (SvResPP.RequestType != "GetPPConfiguration" || Convert.ToInt32(SvResPP.RequestID) != requestId)
  3738. {
  3739. //FDCPOSManager.tracer.WriteLine(string.Format("SvResPP.RequestID={0}, requestId={1} - end false", SvResPP.RequestID, requestId));
  3740. return false;
  3741. }
  3742. }
  3743. }
  3744. ServiceResponseFDCdataGetConfiguration FDCDataElem = null;
  3745. if (SvRes != null && SvRes.FDCdata != null)
  3746. FDCDataElem = SvRes.FDCdata[0];
  3747. else if (SvResPP != null && SvResPP.FDCdata != null)
  3748. FDCDataElem = SvResPP.FDCdata[0];
  3749. else
  3750. {
  3751. ServiceResponseFDCdataGetConfiguration[] FDCDataArray = null;
  3752. FDCDataElem = new ServiceResponseFDCdataGetConfiguration();
  3753. Array.Resize<ServiceResponseFDCdataGetConfiguration>(ref FDCDataArray, (FDCDataArray != null) ? FDCDataArray.Length + 1 : 1);
  3754. FDCDataArray[FDCDataArray.Length - 1] = FDCDataElem;
  3755. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  3756. if (SvRes != null)
  3757. SvRes.FDCdata = FDCDataArray;
  3758. else if (SvResPP != null)
  3759. SvResPP.FDCdata = FDCDataArray;
  3760. }
  3761. ServiceDeviceClassConfiguration fdcPPDeviceClassElem = null;
  3762. if (FDCDataElem.DeviceClass != null)
  3763. {
  3764. foreach (ServiceDeviceClassConfiguration fdcPPDeviceClassElemTemp in FDCDataElem.DeviceClass)
  3765. {
  3766. if (fdcPPDeviceClassElemTemp.DeviceID == Convert.ToString(deviceId) && fdcPPDeviceClassElemTemp.Type == Wayne.FDCPOSLibrary.DeviceType.DT_PricePole)
  3767. {
  3768. fdcPPDeviceClassElem = fdcPPDeviceClassElemTemp;
  3769. }
  3770. }
  3771. }
  3772. if (fdcPPDeviceClassElem == null)
  3773. {
  3774. fdcPPDeviceClassElem = new ServiceDeviceClassConfiguration();
  3775. fdcPPDeviceClassElem.DeviceID = Convert.ToString(deviceId);
  3776. fdcPPDeviceClassElem.Type = Wayne.FDCPOSLibrary.DeviceType.DT_PricePole;
  3777. ServiceDeviceClassConfiguration[] fdcPPDeviceClassArray = FDCDataElem.DeviceClass;
  3778. Array.Resize<ServiceDeviceClassConfiguration>(ref fdcPPDeviceClassArray, (fdcPPDeviceClassArray != null) ? fdcPPDeviceClassArray.Length + 1 : 1);
  3779. fdcPPDeviceClassArray[fdcPPDeviceClassArray.Length - 1] = fdcPPDeviceClassElem;
  3780. FDCDataElem.DeviceClass = fdcPPDeviceClassArray;
  3781. }
  3782. ServiceDeviceClassConfiguration fdcPPPDeviceClassElem = null;
  3783. if (FDCDataElem.DeviceClass != null && (FDCGlobal.ProtocolVersion == FDCVersion.V0003 || Messages.bWholeConfiguration))
  3784. {
  3785. // for V03 there is only one device level (PP)
  3786. foreach (ServiceDeviceClassConfiguration fdcPPDeviceClassElemTemp in FDCDataElem.DeviceClass)
  3787. if (fdcPPDeviceClassElemTemp.DeviceID == Convert.ToString(deviceId) && fdcPPDeviceClassElemTemp.Type == Wayne.FDCPOSLibrary.DeviceType.DT_PricePole)
  3788. fdcPPPDeviceClassElem = fdcPPDeviceClassElemTemp;
  3789. }
  3790. else if (FDCDataElem.DeviceClass != null && FDCGlobal.ProtocolVersion > FDCVersion.V0003)
  3791. {
  3792. fdcPPDeviceClassElem = null;
  3793. foreach (ServiceDeviceClassConfiguration fdcPPDeviceClassElemTemp in FDCDataElem.DeviceClass)
  3794. if (fdcPPDeviceClassElemTemp.DeviceID == Convert.ToString(deviceId) &&
  3795. fdcPPDeviceClassElemTemp.Type == Wayne.FDCPOSLibrary.DeviceType.DT_PricePole)
  3796. {
  3797. //FDCPOSManager.tracer.WriteLine(string.Format(">V0003 - DT_PricePole deviceId={0} found", deviceId));
  3798. fdcPPDeviceClassElem = fdcPPDeviceClassElemTemp;
  3799. if (fdcPPDeviceClassElem.DeviceClass != null)
  3800. {
  3801. foreach (ServiceDeviceClassConfiguration fdcPPPDeviceClassElemTemp in fdcPPDeviceClassElem.DeviceClass)
  3802. if (fdcPPPDeviceClassElemTemp.DeviceID == Convert.ToString(deviceId) &&
  3803. fdcPPPDeviceClassElemTemp.SignNo == Convert.ToString(logicalDeviceNo) &&
  3804. fdcPPPDeviceClassElemTemp.Type == Wayne.FDCPOSLibrary.DeviceType.DT_PricePolePoint)
  3805. {
  3806. //FDCPOSManager.tracer.WriteLine(string.Format("DT_PricePolePoint deviceId={0} signNo={1} found", deviceId, logicalDeviceNo));
  3807. fdcPPPDeviceClassElem = fdcPPPDeviceClassElemTemp;
  3808. }
  3809. }
  3810. }
  3811. if (fdcPPDeviceClassElem == null)
  3812. {
  3813. fdcPPDeviceClassElem = new ServiceDeviceClassConfiguration();
  3814. fdcPPDeviceClassElem.DeviceID = Convert.ToString(deviceId);
  3815. fdcPPDeviceClassElem.Type = Wayne.FDCPOSLibrary.DeviceType.DT_PricePole;
  3816. }
  3817. }
  3818. if (fdcPPPDeviceClassElem == null)
  3819. {
  3820. //FDCPOSManager.tracer.WriteLine(string.Format("DT_PricePolePoint deviceId={0} signId={1} create", deviceId, logicalDeviceNo));
  3821. fdcPPPDeviceClassElem = new ServiceDeviceClassConfiguration();
  3822. fdcPPPDeviceClassElem.DeviceID = Convert.ToString(deviceId);
  3823. if (FDCGlobal.ProtocolVersion == FDCVersion.V0003)
  3824. {
  3825. fdcPPPDeviceClassElem.PPLogicalDeviceNo = Convert.ToString(logicalDeviceNo);
  3826. fdcPPPDeviceClassElem.Type = Wayne.FDCPOSLibrary.DeviceType.DT_PricePole;
  3827. }
  3828. else
  3829. {
  3830. fdcPPPDeviceClassElem.SignNo = Convert.ToString(logicalDeviceNo);
  3831. fdcPPPDeviceClassElem.Type = Wayne.FDCPOSLibrary.DeviceType.DT_PricePolePoint;
  3832. }
  3833. fdcPPPDeviceClassElem.TP_PPManualMode = (manualMode != 0) ? "True" : "False"; ;
  3834. if (FDCGlobal.ProtocolVersion == FDCVersion.V0003 || Messages.bWholeConfiguration)
  3835. {
  3836. ServiceDeviceClassConfiguration[] fdcPPDeviceClassArray = FDCDataElem.DeviceClass;
  3837. Array.Resize<ServiceDeviceClassConfiguration>(ref fdcPPDeviceClassArray, (fdcPPDeviceClassArray != null) ? fdcPPDeviceClassArray.Length + 1 : 1);
  3838. fdcPPDeviceClassArray[fdcPPDeviceClassArray.Length - 1] = fdcPPPDeviceClassElem;
  3839. FDCDataElem.DeviceClass = fdcPPDeviceClassArray;
  3840. //FDCPOSManager.tracer.WriteLine("=V0003 - array resized");
  3841. }
  3842. else
  3843. {
  3844. //ServiceDeviceClassConfiguration fdcDSPDeviceClassElem = null;
  3845. foreach (ServiceDeviceClassConfiguration fdcPPDeviceClassElemTemp in FDCDataElem.DeviceClass)
  3846. if (fdcPPDeviceClassElemTemp.DeviceID == Convert.ToString(deviceId) && fdcPPDeviceClassElemTemp.Type == Wayne.FDCPOSLibrary.DeviceType.DT_PricePole)
  3847. {
  3848. ServiceDeviceClassConfiguration[] fdcPPPDeviceClassArray = fdcPPDeviceClassElemTemp.DeviceClass;
  3849. Array.Resize<ServiceDeviceClassConfiguration>(ref fdcPPPDeviceClassArray, (fdcPPPDeviceClassArray != null) ? fdcPPPDeviceClassArray.Length + 1 : 1);
  3850. fdcPPPDeviceClassArray[fdcPPPDeviceClassArray.Length - 1] = fdcPPPDeviceClassElem;
  3851. fdcPPDeviceClassElemTemp.DeviceClass = fdcPPPDeviceClassArray;
  3852. //FDCPOSManager.tracer.WriteLine(">V0003 - array resized");
  3853. }
  3854. }
  3855. }
  3856. ServiceSegmentsPPDeviceClassConfiguration PPSegmentsElem = null;
  3857. if (fdcPPPDeviceClassElem.PPSegments != null)
  3858. {
  3859. PPSegmentsElem = fdcPPPDeviceClassElem.PPSegments[0];
  3860. }
  3861. else
  3862. {
  3863. PPSegmentsElem = new ServiceSegmentsPPDeviceClassConfiguration();
  3864. ServiceSegmentsPPDeviceClassConfiguration[] SegmentsPPDeviceClassArray = fdcPPPDeviceClassElem.PPSegments;
  3865. Array.Resize<ServiceSegmentsPPDeviceClassConfiguration>(ref SegmentsPPDeviceClassArray, (SegmentsPPDeviceClassArray != null) ? SegmentsPPDeviceClassArray.Length + 1 : 1);
  3866. SegmentsPPDeviceClassArray[SegmentsPPDeviceClassArray.Length - 1] = PPSegmentsElem;
  3867. fdcPPPDeviceClassElem.PPSegments = SegmentsPPDeviceClassArray;
  3868. }
  3869. ServiceLinePPDeviceClassConfiguration PPLineElem = null;
  3870. PPLineElem = new ServiceLinePPDeviceClassConfiguration();
  3871. PPLineElem.LSPPSegmentNo = Convert.ToString(segmentNo);
  3872. PPLineElem.LSPPProductNo = Convert.ToString(productNo);
  3873. PPLineElem.LSPPProductName = ProductName;
  3874. PPLineElem.LSPPProductPrice = FDCConvert.ToString(productPrice);
  3875. if (FDCGlobal.ProtocolVersion >= FDCVersion.V0007)
  3876. PPLineElem.LSPPModeNo = Convert.ToString(modeNo);
  3877. ServiceLinePPDeviceClassConfiguration[] LinePPDeviceClassArray = PPSegmentsElem.SPPLine;
  3878. Array.Resize<ServiceLinePPDeviceClassConfiguration>(ref LinePPDeviceClassArray, (LinePPDeviceClassArray != null) ? LinePPDeviceClassArray.Length + 1 : 1);
  3879. LinePPDeviceClassArray[LinePPDeviceClassArray.Length - 1] = PPLineElem;
  3880. PPSegmentsElem.SPPLine = LinePPDeviceClassArray;
  3881. }
  3882. catch (Exception ex)
  3883. {
  3884. //FDCPOSManager.tracer.WriteLine("Exception! " + ex.Message);
  3885. }
  3886. //FDCPOSManager.tracer.WriteLine("end");
  3887. return true;
  3888. }
  3889. public bool GetConfigurationSend(string workstationID, string applicationSender, int requestId, string deviceType, string overallResult)
  3890. {
  3891. //FDCPOSManager.tracer.WriteLine(string.Format("GetConfigurationSend init: deviceType={0}", deviceType));
  3892. string key = "", requestType = "";
  3893. ErrorCode status = ErrorCode.ERRCD_OK;
  3894. if (deviceType == "")
  3895. {
  3896. ServiceResponseGetConfiguration SvRes = null;
  3897. key = FDCPOSClient.getClientID(workstationID, applicationSender) + "GetConfiguration";
  3898. if (serviceResponseClientList.ContainsKey(key))
  3899. {
  3900. SvRes = (ServiceResponseGetConfiguration)(serviceResponseClientList[key]);
  3901. //FDCPOSManager.tracer.WriteLine(string.Format("SvRes.RequestType={0}", SvRes.RequestType));
  3902. }
  3903. if (SvRes != null)
  3904. {
  3905. if (SvRes.RequestType != "GetConfiguration" || Convert.ToInt32(SvRes.RequestID) != requestId)
  3906. {
  3907. //FDCPOSManager.tracer.WriteLine(string.Format("end FALSE: Convert.ToInt32(SvRes.requestId)={0}, requestId={1}", Convert.ToInt32(SvRes.RequestID), requestId));
  3908. return false;
  3909. }
  3910. }
  3911. else
  3912. {
  3913. // send an empty response - no available transaction added
  3914. SvRes = new ServiceResponseGetConfiguration();
  3915. SvRes.WorkstationID = workstationID;
  3916. SvRes.ApplicationSender = applicationSender;
  3917. SvRes.RequestID = requestId.ToString();
  3918. serviceResponseClientList.Add(key, SvRes);
  3919. ServiceResponseFDCdataGetConfiguration FDCDataElem = new ServiceResponseFDCdataGetConfiguration();
  3920. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  3921. ServiceResponseFDCdataGetConfiguration[] FDCDataArray = { FDCDataElem };
  3922. SvRes.FDCdata = FDCDataArray;
  3923. }
  3924. SvRes.OverallResult = overallResult;
  3925. requestType = SvRes.RequestType;
  3926. ((FDCPOSInterfaceServerManager)fdcPosManager).FdcServerTcpHandler.SendResponse<ServiceResponseGetConfiguration>(fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)], SvRes);
  3927. serviceResponseClientList.Remove(key);
  3928. }
  3929. else if (deviceType == DeviceType.DT_FuelDispenser)
  3930. {
  3931. ServiceResponseGetDSPConfiguration SvRes = null;
  3932. key = FDCPOSClient.getClientID(workstationID, applicationSender) + "GetDSPConfiguration";
  3933. if (serviceResponseClientList.ContainsKey(key))
  3934. {
  3935. SvRes = (ServiceResponseGetDSPConfiguration)(serviceResponseClientList[key]);
  3936. //FDCPOSManager.tracer.WriteLine(string.Format("key found - SvRes.RequestType={0}", SvRes.RequestType));
  3937. }
  3938. if (SvRes != null)
  3939. {
  3940. if (SvRes.RequestType != "GetDSPConfiguration" || Convert.ToInt32(SvRes.RequestID) != requestId)
  3941. {
  3942. //FDCPOSManager.tracer.WriteLine(string.Format("end FALSE: Convert.ToInt32(SvRes.requestId)={0}, requestId={1}", Convert.ToInt32(SvRes.RequestID), requestId));
  3943. return false;
  3944. }
  3945. }
  3946. else
  3947. {
  3948. //FDCPOSManager.tracer.WriteLine(string.Format("key NOT found - create object"));
  3949. // send an empty response - no available transaction added
  3950. SvRes = new ServiceResponseGetDSPConfiguration();
  3951. SvRes.WorkstationID = workstationID;
  3952. SvRes.ApplicationSender = applicationSender;
  3953. SvRes.RequestID = requestId.ToString();
  3954. serviceResponseClientList.Add(key, SvRes);
  3955. ServiceResponseFDCdataGetConfiguration FDCDataElem = new ServiceResponseFDCdataGetConfiguration();
  3956. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  3957. ServiceResponseFDCdataGetConfiguration[] FDCDataArray = { FDCDataElem };
  3958. SvRes.FDCdata = FDCDataArray;
  3959. }
  3960. SvRes.OverallResult = overallResult;
  3961. if (FDCGlobal.ProtocolVersion >= FDCVersion.V0005)
  3962. SvRes.FDCdata[0].FDCStatus = ((ErrorCode)status).ToString();
  3963. requestType = SvRes.RequestType;
  3964. if (!fdcPosManager.fdcClientList.ContainsKey(FDCPOSClient.getClientID(workstationID, applicationSender)))
  3965. {
  3966. fdcSocketLogger.LogDebug("####can't find client(" + FDCPOSClient.getClientID(workstationID, applicationSender)
  3967. + ") in TcpClientList(" + (fdcPosManager.fdcClientList.Keys.Any() ?
  3968. fdcPosManager.fdcClientList.Keys.Select(k => k.ToString()).Aggregate((n, acc) => n + ", " + acc)
  3969. : "Empty yet") + "), impossible to send `ServiceResponseGetDSPConfiguration`");
  3970. }
  3971. else
  3972. {
  3973. ((FDCPOSInterfaceServerManager)fdcPosManager).FdcServerTcpHandler.SendResponse<ServiceResponseGetDSPConfiguration>(fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)], SvRes);
  3974. serviceResponseClientList.Remove(key);
  3975. }
  3976. }
  3977. else if (deviceType == DeviceType.DT_TankLevelGauge)
  3978. {
  3979. ServiceResponseGetTLGConfiguration SvRes = null;
  3980. key = FDCPOSClient.getClientID(workstationID, applicationSender) + "GetTLGConfiguration";
  3981. if (serviceResponseClientList.ContainsKey(key))
  3982. {
  3983. SvRes = (ServiceResponseGetTLGConfiguration)(serviceResponseClientList[key]);
  3984. //FDCPOSManager.tracer.WriteLine(string.Format("SvRes.RequestType={0}", SvRes.RequestType));
  3985. }
  3986. if (SvRes != null)
  3987. {
  3988. if (SvRes.RequestType != "GetTLGConfiguration" || Convert.ToInt32(SvRes.RequestID) != requestId)
  3989. {
  3990. //FDCPOSManager.tracer.WriteLine(string.Format("end FALSE: Convert.ToInt32(SvRes.requestId)={0}, requestId={1}", Convert.ToInt32(SvRes.RequestID), requestId));
  3991. return false;
  3992. }
  3993. }
  3994. else
  3995. {
  3996. // send an empty response - no available transaction added
  3997. SvRes = new ServiceResponseGetTLGConfiguration();
  3998. SvRes.WorkstationID = workstationID;
  3999. SvRes.ApplicationSender = applicationSender;
  4000. SvRes.RequestID = requestId.ToString();
  4001. serviceResponseClientList.Add(key, SvRes);
  4002. ServiceResponseFDCdataGetConfiguration FDCDataElem = new ServiceResponseFDCdataGetConfiguration();
  4003. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  4004. ServiceResponseFDCdataGetConfiguration[] FDCDataArray = { FDCDataElem };
  4005. SvRes.FDCdata = FDCDataArray;
  4006. }
  4007. SvRes.OverallResult = overallResult;
  4008. if (FDCGlobal.ProtocolVersion >= FDCVersion.V0005)
  4009. SvRes.FDCdata[0].FDCStatus = ((ErrorCode)status).ToString();
  4010. requestType = SvRes.RequestType;
  4011. ((FDCPOSInterfaceServerManager)fdcPosManager).FdcServerTcpHandler.SendResponse<ServiceResponseGetTLGConfiguration>(fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)], SvRes);
  4012. serviceResponseClientList.Remove(key);
  4013. }
  4014. else if (deviceType == DeviceType.DT_PricePole)
  4015. {
  4016. ServiceResponseGetPPConfiguration SvRes = null;
  4017. key = FDCPOSClient.getClientID(workstationID, applicationSender) + "GetPPConfiguration";
  4018. if (serviceResponseClientList.ContainsKey(key))
  4019. {
  4020. SvRes = (ServiceResponseGetPPConfiguration)(serviceResponseClientList[key]);
  4021. //FDCPOSManager.tracer.WriteLine(string.Format("SvRes.RequestType={0}", SvRes.RequestType));
  4022. }
  4023. if (SvRes != null)
  4024. {
  4025. if (SvRes.RequestType != "GetPPConfiguration" || Convert.ToInt32(SvRes.RequestID) != requestId)
  4026. {
  4027. //FDCPOSManager.tracer.WriteLine(string.Format("end FALSE: Convert.ToInt32(SvRes.requestId)={0}, requestId={1}", Convert.ToInt32(SvRes.RequestID), requestId));
  4028. return false;
  4029. }
  4030. }
  4031. else
  4032. {
  4033. // send an empty response - no available transaction added
  4034. SvRes = new ServiceResponseGetPPConfiguration();
  4035. SvRes.WorkstationID = workstationID;
  4036. SvRes.ApplicationSender = applicationSender;
  4037. SvRes.RequestID = requestId.ToString();
  4038. serviceResponseClientList.Add(key, SvRes);
  4039. ServiceResponseFDCdataGetConfiguration FDCDataElem = new ServiceResponseFDCdataGetConfiguration();
  4040. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  4041. ServiceResponseFDCdataGetConfiguration[] FDCDataArray = { FDCDataElem };
  4042. SvRes.FDCdata = FDCDataArray;
  4043. }
  4044. SvRes.OverallResult = overallResult;
  4045. if (FDCGlobal.ProtocolVersion >= FDCVersion.V0005)
  4046. SvRes.FDCdata[0].FDCStatus = ((ErrorCode)status).ToString();
  4047. requestType = SvRes.RequestType;
  4048. ((FDCPOSInterfaceServerManager)fdcPosManager).FdcServerTcpHandler.SendResponse<ServiceResponseGetPPConfiguration>(fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)], SvRes);
  4049. serviceResponseClientList.Remove(key);
  4050. }
  4051. //FDCPOSManager.tracer.WriteLine(string.Format("end OK: RequestType={0}", requestType));
  4052. return true;
  4053. }
  4054. public void SetConfiguration(string workstationID, string applicationSender, int requestId, string overallResult)
  4055. {
  4056. ServiceResponseSetConfiguration SvRes = new ServiceResponseSetConfiguration();
  4057. SvRes.WorkstationID = workstationID;
  4058. SvRes.ApplicationSender = applicationSender;
  4059. SvRes.RequestID = requestId.ToString();
  4060. SvRes.OverallResult = overallResult;
  4061. ServiceResponseFDCdataBasic FDCDataElem = new ServiceResponseFDCdataBasic();
  4062. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  4063. ServiceResponseFDCdataBasic[] FDCDataArray = { FDCDataElem };
  4064. SvRes.FDCdata = FDCDataArray;
  4065. ((FDCPOSInterfaceServerManager)fdcPosManager).FdcServerTcpHandler.SendResponse<ServiceResponseSetConfiguration>(fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)], SvRes);
  4066. }
  4067. public void LockNozzle(string workstationID, string applicationSender, int requestId, int deviceId, int pumpNo, int nozzleNo, int status, string overallResult)
  4068. {
  4069. //FDCPOSManager.tracer.WriteLine("init");
  4070. ServiceResponseLockNozzle SvRes = new ServiceResponseLockNozzle();
  4071. SvRes.WorkstationID = workstationID;
  4072. SvRes.ApplicationSender = applicationSender;
  4073. SvRes.RequestID = requestId.ToString(); ;
  4074. SvRes.OverallResult = overallResult;
  4075. ServiceResponseFDCdataLockNozzle FDCDataElem = new ServiceResponseFDCdataLockNozzle();
  4076. ServiceResponseDeviceClassLockNozzle fdcDeviceClassElem = new ServiceResponseDeviceClassLockNozzle();
  4077. fdcDeviceClassElem.DeviceID = Convert.ToString(deviceId);
  4078. fdcDeviceClassElem.PumpNo = Convert.ToString(pumpNo);
  4079. fdcDeviceClassElem.NozzleNo = Convert.ToString(nozzleNo);
  4080. fdcDeviceClassElem.Type = Wayne.FDCPOSLibrary.DeviceType.DT_FuellingPoint;
  4081. FDCDataElem.DeviceClass = fdcDeviceClassElem;
  4082. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  4083. FDCDataElem.FDCStatus = ((ErrorCode)status).ToString();
  4084. ServiceResponseFDCdataLockNozzle[] FDCDataArray = { FDCDataElem };
  4085. SvRes.FDCdata = FDCDataArray;
  4086. ((FDCPOSInterfaceServerManager)fdcPosManager).FdcServerTcpHandler.SendResponse<ServiceResponseLockNozzle>(fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)], SvRes);
  4087. //FDCPOSManager.tracer.WriteLine("end");
  4088. }
  4089. public void UnlockNozzle(string workstationID, string applicationSender, int requestId, int deviceId, int pumpNo, int nozzleNo, int status, string overallResult)
  4090. {
  4091. //FDCPOSManager.tracer.WriteLine("init");
  4092. ServiceResponseUnlockNozzle SvRes = new ServiceResponseUnlockNozzle();
  4093. SvRes.WorkstationID = workstationID;
  4094. SvRes.ApplicationSender = applicationSender;
  4095. SvRes.RequestID = requestId.ToString(); ;
  4096. SvRes.OverallResult = overallResult;
  4097. ServiceResponseFDCdataUnlockNozzle FDCDataElem = new ServiceResponseFDCdataUnlockNozzle();
  4098. ServiceResponseDeviceClassUnlockNozzle fdcDeviceClassElem = new ServiceResponseDeviceClassUnlockNozzle();
  4099. fdcDeviceClassElem.DeviceID = Convert.ToString(deviceId);
  4100. fdcDeviceClassElem.PumpNo = Convert.ToString(pumpNo);
  4101. fdcDeviceClassElem.NozzleNo = (nozzleNo == -1) ? "*" : Convert.ToString(nozzleNo);
  4102. fdcDeviceClassElem.Type = Wayne.FDCPOSLibrary.DeviceType.DT_FuellingPoint;
  4103. FDCDataElem.DeviceClass = fdcDeviceClassElem;
  4104. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  4105. FDCDataElem.FDCStatus = ((ErrorCode)status).ToString();
  4106. ServiceResponseFDCdataUnlockNozzle[] FDCDataArray = { FDCDataElem };
  4107. SvRes.FDCdata = FDCDataArray;
  4108. ((FDCPOSInterfaceServerManager)fdcPosManager).FdcServerTcpHandler.SendResponse<ServiceResponseUnlockNozzle>(fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)], SvRes);
  4109. //FDCPOSManager.tracer.WriteLine("init");
  4110. }
  4111. public void GetCountrySettings(string workstationID, string applicationSender, int requestId, string volumeUnit, string currencyCode, string levelUnit, string temperatureUnit, string thousandDelimiter, string decimalSign, string countryCode, string languageCode, int status, string overallResult)
  4112. {
  4113. FDCConvert.DecimalSeparator = decimalSign;
  4114. FDCConvert.ThousandSeparator = thousandDelimiter;
  4115. if (applicationSender == FDCPOSInterfaceServerManager.FDCPOSServerApplication)
  4116. return;
  4117. ServiceResponseGetCountrySettings SvRes = new ServiceResponseGetCountrySettings();
  4118. SvRes.WorkstationID = workstationID;
  4119. SvRes.ApplicationSender = applicationSender;
  4120. SvRes.RequestID = requestId.ToString();
  4121. SvRes.OverallResult = overallResult;
  4122. ServiceResponseFDCdataGetCountrySettings FDCDataElem = new ServiceResponseFDCdataGetCountrySettings();
  4123. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  4124. FDCDataElem.VolumeUnit = volumeUnit;
  4125. FDCDataElem.CurrencyCode = currencyCode;
  4126. FDCDataElem.LevelUnit = levelUnit;
  4127. FDCDataElem.TemperatureUnit = temperatureUnit;
  4128. FDCDataElem.CountryCode = countryCode;
  4129. if (FDCGlobal.ProtocolVersion < FDCVersion.V0007 || (FDCGlobal.ProtocolVersion >= FDCVersion.V0007 && this.fdcPosManager.useExtensions))
  4130. {
  4131. FDCDataElem.ThousandDelimiter = thousandDelimiter;
  4132. FDCDataElem.DecimalSign = decimalSign;
  4133. FDCDataElem.LanguageCode = languageCode;
  4134. }
  4135. if (FDCGlobal.ProtocolVersion >= FDCVersion.V0005)
  4136. FDCDataElem.FDCStatus = ((ErrorCode)status).ToString();
  4137. ServiceResponseFDCdataGetCountrySettings[] FDCDataArray = { FDCDataElem };
  4138. SvRes.FDCdata = FDCDataArray;
  4139. ((FDCPOSInterfaceServerManager)fdcPosManager).FdcServerTcpHandler.SendResponse<ServiceResponseGetCountrySettings>(fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)], SvRes);
  4140. }
  4141. public bool GetDSPLimitsAdd(string workstationID, string applicationSender, int requestId, int deviceId, int produtNo, int fuelModeNo, double maxTrxAmount, double maxTrxVolume)
  4142. {
  4143. try
  4144. {
  4145. ServiceResponseGetDSPLimits SvRes = null;
  4146. string key = FDCPOSClient.getClientID(workstationID, applicationSender) + "GetDSPLimits";
  4147. if (serviceResponseClientList.ContainsKey(key))
  4148. SvRes = (ServiceResponseGetDSPLimits)(serviceResponseClientList[key]);
  4149. if (SvRes == null)
  4150. {
  4151. SvRes = new ServiceResponseGetDSPLimits();
  4152. SvRes.WorkstationID = workstationID;
  4153. SvRes.ApplicationSender = applicationSender;
  4154. SvRes.RequestID = requestId.ToString();
  4155. serviceResponseClientList.Add(key, SvRes);
  4156. }
  4157. else
  4158. {
  4159. if (SvRes.RequestType != "GetDSPLimits" || Convert.ToInt32(SvRes.RequestID) != requestId)
  4160. {
  4161. //FDCPOSManager.tracer.WriteLine(string.Format("SvRes.RequestID={0}, requestId={1} - end false", SvRes.RequestID, requestId));
  4162. return false;
  4163. }
  4164. }
  4165. ServiceResponseFDCdataGetDSPLimits FDCDataElem = null;
  4166. if (SvRes.FDCdata != null)
  4167. FDCDataElem = SvRes.FDCdata[0];
  4168. else
  4169. {
  4170. ServiceResponseFDCdataGetDSPLimits[] FDCDataArray = null;
  4171. FDCDataElem = new ServiceResponseFDCdataGetDSPLimits();
  4172. Array.Resize<ServiceResponseFDCdataGetDSPLimits>(ref FDCDataArray, (FDCDataArray != null) ? FDCDataArray.Length + 1 : 1);
  4173. FDCDataArray[FDCDataArray.Length - 1] = FDCDataElem;
  4174. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  4175. SvRes.FDCdata = FDCDataArray;
  4176. }
  4177. ServiceResponseDeviceClassGetDSPLimits fdcDeviceClassElem = null;
  4178. if (FDCDataElem.DeviceClass != null)
  4179. {
  4180. foreach (ServiceResponseDeviceClassGetDSPLimits fdcDeviceClassElemTemp in FDCDataElem.DeviceClass)
  4181. if (fdcDeviceClassElemTemp.DeviceID == Convert.ToString(deviceId) && fdcDeviceClassElemTemp.Type == Wayne.FDCPOSLibrary.DeviceType.DT_FuelDispenser)
  4182. fdcDeviceClassElem = fdcDeviceClassElemTemp;
  4183. }
  4184. if (fdcDeviceClassElem == null && deviceId > 0)
  4185. {
  4186. fdcDeviceClassElem = new ServiceResponseDeviceClassGetDSPLimits();
  4187. fdcDeviceClassElem.DeviceID = Convert.ToString(deviceId);
  4188. fdcDeviceClassElem.Type = Wayne.FDCPOSLibrary.DeviceType.DT_FuelDispenser;
  4189. ServiceResponseDeviceClassGetDSPLimits[] fdcDeviceClassArray = FDCDataElem.DeviceClass;
  4190. Array.Resize<ServiceResponseDeviceClassGetDSPLimits>(ref fdcDeviceClassArray, (fdcDeviceClassArray != null) ? fdcDeviceClassArray.Length + 1 : 1);
  4191. fdcDeviceClassArray[fdcDeviceClassArray.Length - 1] = fdcDeviceClassElem;
  4192. FDCDataElem.DeviceClass = fdcDeviceClassArray;
  4193. }
  4194. ServiceResponseProductDeviceClassGetDSPLimits ProdutElem = null;
  4195. if (fdcDeviceClassElem.Product != null)
  4196. {
  4197. foreach (ServiceResponseProductDeviceClassGetDSPLimits ProdutElemTemp in fdcDeviceClassElem.Product)
  4198. {
  4199. if (ProdutElemTemp.ProductNo == Convert.ToString(produtNo))
  4200. {
  4201. ProdutElem = ProdutElemTemp;
  4202. break;
  4203. }
  4204. }
  4205. }
  4206. if (ProdutElem == null)
  4207. {
  4208. ProdutElem = new ServiceResponseProductDeviceClassGetDSPLimits();
  4209. ProdutElem.ProductNo = Convert.ToString(produtNo);
  4210. ServiceResponseProductDeviceClassGetDSPLimits[] ProductDeviceClassArray = fdcDeviceClassElem.Product;
  4211. Array.Resize<ServiceResponseProductDeviceClassGetDSPLimits>(ref ProductDeviceClassArray, (ProductDeviceClassArray != null) ? ProductDeviceClassArray.Length + 1 : 1);
  4212. ProductDeviceClassArray[ProductDeviceClassArray.Length - 1] = ProdutElem;
  4213. fdcDeviceClassElem.Product = ProductDeviceClassArray;
  4214. }
  4215. ServiceResponseFuelModeDeviceClassGetDSPLimits FuelModeElem = null;
  4216. FuelModeElem = new ServiceResponseFuelModeDeviceClassGetDSPLimits();
  4217. FuelModeElem.ModeNo = Convert.ToString(fuelModeNo);
  4218. NumberFormatInfo nfi = new NumberFormatInfo();
  4219. nfi.NumberDecimalSeparator = FDCConvert.DecimalSeparator;
  4220. nfi.NumberGroupSeparator = FDCConvert.ThousandSeparator;
  4221. nfi.NumberDecimalDigits = 2;
  4222. FuelModeElem.MaxTrxAmount = string.Format(nfi, "{0:F2}", maxTrxAmount);
  4223. //FuelModeElem.MaxTrxAmount = Convert.ToString(maxTrxAmount, nfi);
  4224. nfi.NumberDecimalDigits = 3;
  4225. FuelModeElem.MaxTrxVolume = string.Format(nfi, "{0:F3}", maxTrxVolume);
  4226. //FuelModeElem.MaxTrxVolume = Convert.ToString(maxTrxVolume, nfi);
  4227. ServiceResponseFuelModeDeviceClassGetDSPLimits[] FuelModeArray = ProdutElem.FuelMode;
  4228. Array.Resize<ServiceResponseFuelModeDeviceClassGetDSPLimits>(ref FuelModeArray, (FuelModeArray != null) ? FuelModeArray.Length + 1 : 1);
  4229. FuelModeArray[FuelModeArray.Length - 1] = FuelModeElem;
  4230. ProdutElem.FuelMode = FuelModeArray;
  4231. }
  4232. catch (Exception ex)
  4233. {
  4234. //FDCPOSManager.tracer.WriteLine("Exception! " + ex.Message);
  4235. }
  4236. return true;
  4237. }
  4238. public bool GetDSPLimitsSend(string workstationID, string applicationSender, int requestId, int status, string overallResult)
  4239. {
  4240. try
  4241. {
  4242. ServiceResponseGetDSPLimits SvRes = null;
  4243. string key = FDCPOSClient.getClientID(workstationID, applicationSender) + "GetDSPLimits";
  4244. if (serviceResponseClientList.ContainsKey(key))
  4245. SvRes = (ServiceResponseGetDSPLimits)(serviceResponseClientList[key]);
  4246. if (SvRes != null)
  4247. {
  4248. if (SvRes.RequestType != "GetDSPLimits" || Convert.ToInt32(SvRes.RequestID) != requestId)
  4249. {
  4250. //FDCPOSManager.tracer.WriteLine(string.Format("SvRes.RequestID={0}, requestId={1} - end false", SvRes.RequestID, requestId));
  4251. return false;
  4252. }
  4253. }
  4254. else
  4255. {
  4256. // send an empty response - no available transaction added
  4257. SvRes = new ServiceResponseGetDSPLimits();
  4258. SvRes.WorkstationID = workstationID;
  4259. SvRes.ApplicationSender = applicationSender;
  4260. SvRes.RequestID = requestId.ToString();
  4261. serviceResponseClientList.Add(key, SvRes);
  4262. ServiceResponseFDCdataGetDSPLimits FDCDataElem = new ServiceResponseFDCdataGetDSPLimits();
  4263. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  4264. if (FDCGlobal.ProtocolVersion >= FDCVersion.V0005)
  4265. FDCDataElem.FDCStatus = ((ErrorCode)status).ToString();
  4266. ServiceResponseFDCdataGetDSPLimits[] FDCDataArray = { FDCDataElem };
  4267. SvRes.FDCdata = FDCDataArray;
  4268. }
  4269. SvRes.OverallResult = overallResult;
  4270. ((FDCPOSInterfaceServerManager)fdcPosManager).FdcServerTcpHandler.SendResponse<ServiceResponseGetDSPLimits>(fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)], SvRes);
  4271. serviceResponseClientList.Remove(key);
  4272. }
  4273. catch (Exception ex)
  4274. {
  4275. //FDCPOSManager.tracer.WriteLine("Exception! " + ex.Message);
  4276. }
  4277. return true;
  4278. }
  4279. public void ChangeDSPLimits(string workstationID, string applicationSender, int requestId, int status, string overallResult)
  4280. {
  4281. ServiceResponseChangeDSPLimits SvRes = new ServiceResponseChangeDSPLimits();
  4282. SvRes.WorkstationID = workstationID;
  4283. SvRes.ApplicationSender = applicationSender;
  4284. SvRes.RequestID = requestId.ToString(); ;
  4285. SvRes.OverallResult = overallResult;
  4286. ServiceResponseFDCdataChangeDSPLimits FDCDataElem = new ServiceResponseFDCdataChangeDSPLimits();
  4287. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  4288. FDCDataElem.FDCStatus = ((ErrorCode)status).ToString();
  4289. ServiceResponseFDCdataChangeDSPLimits[] FDCDataArray = { FDCDataElem };
  4290. SvRes.FDCdata = FDCDataArray;
  4291. ((FDCPOSInterfaceServerManager)fdcPosManager).FdcServerTcpHandler.SendResponse<ServiceResponseChangeDSPLimits>(fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)], SvRes);
  4292. }
  4293. public bool SuspendFuellingAdd(string workstationID, string applicationSender, int requestId, int deviceId, int pumpNo, LogicalDeviceState deviceStatus)
  4294. {
  4295. try
  4296. {
  4297. //FDCPOSManager.tracer.WriteLine("init");
  4298. ServiceResponseSuspendFuelling SvRes = null;
  4299. string key = FDCPOSClient.getClientID(workstationID, applicationSender) + "SuspendFuelling";
  4300. if (serviceResponseClientList.ContainsKey(key))
  4301. SvRes = (ServiceResponseSuspendFuelling)(serviceResponseClientList[key]);
  4302. if (SvRes == null)
  4303. {
  4304. SvRes = new ServiceResponseSuspendFuelling();
  4305. SvRes.WorkstationID = workstationID;
  4306. SvRes.ApplicationSender = applicationSender;
  4307. SvRes.RequestID = requestId.ToString();
  4308. serviceResponseClientList.Add(key, SvRes);
  4309. }
  4310. else
  4311. {
  4312. if (SvRes.RequestType != "SuspendFuelling" || Convert.ToInt32(SvRes.RequestID) != requestId)
  4313. {
  4314. //FDCPOSManager.tracer.WriteLine(string.Format("SvRes.RequestID={0}, requestId={1} - end false", SvRes.RequestID, requestId));
  4315. return false;
  4316. }
  4317. }
  4318. ServiceResponseFDCdataSuspendFuelling FDCDataElem = null;
  4319. if (SvRes.FDCdata != null)
  4320. FDCDataElem = SvRes.FDCdata[0];
  4321. else
  4322. {
  4323. ServiceResponseFDCdataSuspendFuelling[] FDCDataArray = null;
  4324. FDCDataElem = new ServiceResponseFDCdataSuspendFuelling();
  4325. Array.Resize<ServiceResponseFDCdataSuspendFuelling>(ref FDCDataArray, (FDCDataArray != null) ? FDCDataArray.Length + 1 : 1);
  4326. FDCDataArray[FDCDataArray.Length - 1] = FDCDataElem;
  4327. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  4328. //FDCDataElem.FDCStatus = ((ErrorCode)status).ToString();
  4329. SvRes.FDCdata = FDCDataArray;
  4330. }
  4331. ServiceResponseDeviceClassSuspendFuelling fdcDeviceClassElem = null;
  4332. if (FDCDataElem.DeviceClass != null)
  4333. {
  4334. foreach (ServiceResponseDeviceClassSuspendFuelling fdcDeviceClassElemTemp in FDCDataElem.DeviceClass)
  4335. if (fdcDeviceClassElemTemp.DeviceID == Convert.ToString(deviceId))
  4336. fdcDeviceClassElem = fdcDeviceClassElemTemp;
  4337. }
  4338. if (fdcDeviceClassElem == null && deviceId > 0)
  4339. {
  4340. fdcDeviceClassElem = new ServiceResponseDeviceClassSuspendFuelling();
  4341. fdcDeviceClassElem.DeviceID = Convert.ToString(deviceId);
  4342. fdcDeviceClassElem.PumpNo = Convert.ToString(pumpNo);
  4343. fdcDeviceClassElem.Type = Wayne.FDCPOSLibrary.DeviceType.DT_FuellingPoint;
  4344. if (FDCGlobal.ProtocolVersion == FDCVersion.V0005)
  4345. fdcDeviceClassElem.DeviceState = deviceStatus.ToString();
  4346. ServiceResponseDeviceClassSuspendFuelling[] fdcDeviceClassArray = FDCDataElem.DeviceClass;
  4347. Array.Resize<ServiceResponseDeviceClassSuspendFuelling>(ref fdcDeviceClassArray, (fdcDeviceClassArray != null) ? fdcDeviceClassArray.Length + 1 : 1);
  4348. fdcDeviceClassArray[fdcDeviceClassArray.Length - 1] = fdcDeviceClassElem;
  4349. FDCDataElem.DeviceClass = fdcDeviceClassArray;
  4350. }
  4351. }
  4352. catch (Exception ex)
  4353. {
  4354. //FDCPOSManager.tracer.WriteLine("Exception! " + ex.Message);
  4355. }
  4356. //FDCPOSManager.tracer.WriteLine("end");
  4357. return true;
  4358. }
  4359. public bool SuspendFuellingSend(string workstationID, string applicationSender, int requestId, int status, string overallResult)
  4360. {
  4361. try
  4362. {
  4363. ServiceResponseSuspendFuelling SvRes = null;
  4364. string key = FDCPOSClient.getClientID(workstationID, applicationSender) + "SuspendFuelling";
  4365. if (serviceResponseClientList.ContainsKey(key))
  4366. SvRes = (ServiceResponseSuspendFuelling)(serviceResponseClientList[key]);
  4367. if (SvRes != null)
  4368. {
  4369. if (SvRes.RequestType != "SuspendFuelling" || Convert.ToInt32(SvRes.RequestID) != requestId)
  4370. {
  4371. //FDCPOSManager.tracer.WriteLine(string.Format("SvRes.RequestID={0}, requestId={1} - end false", SvRes.RequestID, requestId));
  4372. return false;
  4373. }
  4374. }
  4375. else
  4376. {
  4377. // send an empty response - no available transaction added
  4378. SvRes = new ServiceResponseSuspendFuelling();
  4379. SvRes.WorkstationID = workstationID;
  4380. SvRes.ApplicationSender = applicationSender;
  4381. SvRes.RequestID = requestId.ToString();
  4382. serviceResponseClientList.Add(key, SvRes);
  4383. ServiceResponseFDCdataSuspendFuelling FDCDataElem = new ServiceResponseFDCdataSuspendFuelling();
  4384. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  4385. ServiceResponseFDCdataSuspendFuelling[] FDCDataArray = { FDCDataElem };
  4386. SvRes.FDCdata = FDCDataArray;
  4387. }
  4388. if (FDCGlobal.ProtocolVersion >= FDCVersion.V0005)
  4389. SvRes.FDCdata[0].FDCStatus = ((ErrorCode)status).ToString();
  4390. SvRes.OverallResult = overallResult;
  4391. ((FDCPOSInterfaceServerManager)fdcPosManager).FdcServerTcpHandler.SendResponse<ServiceResponseSuspendFuelling>(fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)], SvRes);
  4392. serviceResponseClientList.Remove(key);
  4393. return true;
  4394. }
  4395. catch (Exception ex)
  4396. {
  4397. //FDCPOSManager.tracer.WriteLine("Exception! " + ex.Message);
  4398. }
  4399. return false;
  4400. }
  4401. public bool ResumeFuellingAdd(string workstationID, string applicationSender, int requestId, int deviceId, int pumpNo, LogicalDeviceState deviceStatus)
  4402. {
  4403. try
  4404. {
  4405. //FDCPOSManager.tracer.WriteLine("init");
  4406. ServiceResponseResumeFuelling SvRes = null;
  4407. string key = FDCPOSClient.getClientID(workstationID, applicationSender) + "ResumeFuelling";
  4408. if (serviceResponseClientList.ContainsKey(key))
  4409. SvRes = (ServiceResponseResumeFuelling)(serviceResponseClientList[key]);
  4410. if (SvRes == null)
  4411. {
  4412. SvRes = new ServiceResponseResumeFuelling();
  4413. SvRes.WorkstationID = workstationID;
  4414. SvRes.ApplicationSender = applicationSender;
  4415. SvRes.RequestID = requestId.ToString();
  4416. serviceResponseClientList.Add(key, SvRes);
  4417. }
  4418. else
  4419. {
  4420. if (SvRes.RequestType != "ResumeFuelling" || Convert.ToInt32(SvRes.RequestID) != requestId)
  4421. {
  4422. //FDCPOSManager.tracer.WriteLine(string.Format("SvRes.RequestID={0}, requestId={1} - end false", SvRes.RequestID, requestId));
  4423. return false;
  4424. }
  4425. }
  4426. ServiceResponseFDCdataResumeFuelling FDCDataElem = null;
  4427. if (SvRes.FDCdata != null)
  4428. FDCDataElem = SvRes.FDCdata[0];
  4429. else
  4430. {
  4431. ServiceResponseFDCdataResumeFuelling[] FDCDataArray = null;
  4432. FDCDataElem = new ServiceResponseFDCdataResumeFuelling();
  4433. Array.Resize<ServiceResponseFDCdataResumeFuelling>(ref FDCDataArray, (FDCDataArray != null) ? FDCDataArray.Length + 1 : 1);
  4434. FDCDataArray[FDCDataArray.Length - 1] = FDCDataElem;
  4435. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  4436. //FDCDataElem.FDCStatus = ((ErrorCode)status).ToString();
  4437. SvRes.FDCdata = FDCDataArray;
  4438. }
  4439. ServiceResponseDeviceClassResumeFuelling fdcDeviceClassElem = null;
  4440. if (FDCDataElem.DeviceClass != null)
  4441. {
  4442. foreach (ServiceResponseDeviceClassResumeFuelling fdcDeviceClassElemTemp in FDCDataElem.DeviceClass)
  4443. if (fdcDeviceClassElemTemp.DeviceID == Convert.ToString(deviceId))
  4444. fdcDeviceClassElem = fdcDeviceClassElemTemp;
  4445. }
  4446. if (fdcDeviceClassElem == null && deviceId > 0)
  4447. {
  4448. fdcDeviceClassElem = new ServiceResponseDeviceClassResumeFuelling();
  4449. fdcDeviceClassElem.DeviceID = Convert.ToString(deviceId);
  4450. fdcDeviceClassElem.PumpNo = Convert.ToString(pumpNo);
  4451. fdcDeviceClassElem.Type = Wayne.FDCPOSLibrary.DeviceType.DT_FuellingPoint;
  4452. if (FDCGlobal.ProtocolVersion == FDCVersion.V0005)
  4453. fdcDeviceClassElem.DeviceState = deviceStatus.ToString();
  4454. ServiceResponseDeviceClassResumeFuelling[] fdcDeviceClassArray = FDCDataElem.DeviceClass;
  4455. Array.Resize<ServiceResponseDeviceClassResumeFuelling>(ref fdcDeviceClassArray, (fdcDeviceClassArray != null) ? fdcDeviceClassArray.Length + 1 : 1);
  4456. fdcDeviceClassArray[fdcDeviceClassArray.Length - 1] = fdcDeviceClassElem;
  4457. FDCDataElem.DeviceClass = fdcDeviceClassArray;
  4458. }
  4459. }
  4460. catch (Exception ex)
  4461. {
  4462. //FDCPOSManager.tracer.WriteLine("Exception! " + ex.Message);
  4463. }
  4464. //FDCPOSManager.tracer.WriteLine("end");
  4465. return true;
  4466. }
  4467. public bool ResumeFuellingSend(string workstationID, string applicationSender, int requestId, int status, string overallResult)
  4468. {
  4469. try
  4470. {
  4471. ServiceResponseResumeFuelling SvRes = null;
  4472. string key = FDCPOSClient.getClientID(workstationID, applicationSender) + "ResumeFuelling";
  4473. if (serviceResponseClientList.ContainsKey(key))
  4474. SvRes = (ServiceResponseResumeFuelling)(serviceResponseClientList[key]);
  4475. if (SvRes != null)
  4476. {
  4477. if (SvRes.RequestType != "ResumeFuelling" || Convert.ToInt32(SvRes.RequestID) != requestId)
  4478. {
  4479. //FDCPOSManager.tracer.WriteLine(string.Format("SvRes.RequestID={0}, requestId={1} - end false", SvRes.RequestID, requestId));
  4480. return false;
  4481. }
  4482. }
  4483. else
  4484. {
  4485. // send an empty response - no available transaction added
  4486. SvRes = new ServiceResponseResumeFuelling();
  4487. SvRes.WorkstationID = workstationID;
  4488. SvRes.ApplicationSender = applicationSender;
  4489. SvRes.RequestID = requestId.ToString();
  4490. serviceResponseClientList.Add(key, SvRes);
  4491. ServiceResponseFDCdataResumeFuelling FDCDataElem = new ServiceResponseFDCdataResumeFuelling();
  4492. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  4493. ServiceResponseFDCdataResumeFuelling[] FDCDataArray = { FDCDataElem };
  4494. SvRes.FDCdata = FDCDataArray;
  4495. }
  4496. if (FDCGlobal.ProtocolVersion >= FDCVersion.V0005)
  4497. SvRes.FDCdata[0].FDCStatus = ((ErrorCode)status).ToString();
  4498. SvRes.OverallResult = overallResult;
  4499. ((FDCPOSInterfaceServerManager)fdcPosManager).FdcServerTcpHandler.SendResponse<ServiceResponseResumeFuelling>(fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)], SvRes);
  4500. serviceResponseClientList.Remove(key);
  4501. return true;
  4502. }
  4503. catch (Exception ex)
  4504. {
  4505. //FDCPOSManager.tracer.WriteLine("Exception! " + ex.Message);
  4506. }
  4507. return false;
  4508. }
  4509. public void LockTank(string workstationID, string applicationSender, int requestId, int deviceId, int tankNo, int status, string overallResult)
  4510. {
  4511. ServiceResponseLockTank SvRes = new ServiceResponseLockTank();
  4512. SvRes.WorkstationID = workstationID;
  4513. SvRes.ApplicationSender = applicationSender;
  4514. SvRes.RequestID = requestId.ToString();
  4515. SvRes.OverallResult = overallResult;
  4516. ServiceResponseFDCdataLockTank FDCDataElem = new ServiceResponseFDCdataLockTank();
  4517. ServiceResponseDeviceClassLockTank fdcDeviceClassElem = new ServiceResponseDeviceClassLockTank();
  4518. fdcDeviceClassElem.DeviceID = Convert.ToString(deviceId);
  4519. fdcDeviceClassElem.TankNo = Convert.ToString(tankNo);
  4520. fdcDeviceClassElem.Type = Wayne.FDCPOSLibrary.DeviceType.DT_TankProbe;
  4521. ServiceResponseDeviceClassLockTank[] fdcDeviceClassArray = { fdcDeviceClassElem };
  4522. FDCDataElem.DeviceClass = fdcDeviceClassArray;
  4523. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  4524. FDCDataElem.FDCStatus = ((ErrorCode)status).ToString();
  4525. ServiceResponseFDCdataLockTank[] FDCDataArray = { FDCDataElem };
  4526. SvRes.FDCdata = FDCDataArray;
  4527. ((FDCPOSInterfaceServerManager)fdcPosManager).FdcServerTcpHandler.SendResponse<ServiceResponseLockTank>(fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)], SvRes);
  4528. }
  4529. public void UnlockTank(string workstationID, string applicationSender, int requestId, int deviceId, int tankNo, int status, string overallResult)
  4530. {
  4531. ServiceResponseUnlockTank SvRes = new ServiceResponseUnlockTank();
  4532. SvRes.WorkstationID = workstationID;
  4533. SvRes.ApplicationSender = applicationSender;
  4534. SvRes.RequestID = requestId.ToString();
  4535. SvRes.OverallResult = overallResult;
  4536. ServiceResponseFDCdataUnlockTank FDCDataElem = new ServiceResponseFDCdataUnlockTank();
  4537. ServiceResponseDeviceClassUnlockTank fdcDeviceClassElem = new ServiceResponseDeviceClassUnlockTank();
  4538. fdcDeviceClassElem.DeviceID = Convert.ToString(deviceId);
  4539. fdcDeviceClassElem.TankNo = Convert.ToString(tankNo);
  4540. fdcDeviceClassElem.Type = Wayne.FDCPOSLibrary.DeviceType.DT_TankProbe;
  4541. ServiceResponseDeviceClassUnlockTank[] fdcDeviceClassArray = { fdcDeviceClassElem };
  4542. FDCDataElem.DeviceClass = fdcDeviceClassArray;
  4543. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  4544. FDCDataElem.FDCStatus = ((ErrorCode)status).ToString();
  4545. ServiceResponseFDCdataUnlockTank[] FDCDataArray = { FDCDataElem };
  4546. SvRes.FDCdata = FDCDataArray;
  4547. ((FDCPOSInterfaceServerManager)fdcPosManager).FdcServerTcpHandler.SendResponse<ServiceResponseUnlockTank>(fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)], SvRes);
  4548. }
  4549. //public void GetTankData(string workstationID, string applicationSender, int requestId, int deviceId, int tankNo, int manualMode, int TPStatus, double productLevel, double totalObservedVolume, double grossStandardVolume, double averageTemp, double waterLevel, double observedDensity, string overallResult)
  4550. //{
  4551. // ServiceResponseGetTankData SvRes = new ServiceResponseGetTankData();
  4552. // SvRes.WorkstationID = workstationID;
  4553. // SvRes.ApplicationSender = applicationSender;
  4554. // SvRes.RequestID = requestId.ToString();
  4555. // SvRes.OverallResult = overallResult;
  4556. // ServiceResponseFDCdataGetTankData FDCDataElem = new ServiceResponseFDCdataGetTankData();
  4557. // ServiceResponseDeviceClassGetTankData fdcDeviceClassElem = new ServiceResponseDeviceClassGetTankData();
  4558. // fdcDeviceClassElem.DeviceID = Convert.ToString(deviceId);
  4559. // fdcDeviceClassElem.Type = Wayne.FDCPOSLibrary.DeviceType.DT_TankProbe;
  4560. // fdcDeviceClassElem.TankNo = Convert.ToString(tankNo);
  4561. // if (manualMode != 0)
  4562. // fdcDeviceClassElem.ManualMode = "True";
  4563. // else
  4564. // fdcDeviceClassElem.ManualMode = "False";
  4565. // ServiceResponseMeasurementDataGetTankData fdcMesaurementDataElem = new ServiceResponseMeasurementDataGetTankData();
  4566. // fdcMesaurementDataElem.ProductLevel = (productLevel < 0) ? "" : Convert.ToString(productLevel);
  4567. // fdcMesaurementDataElem.TPStatus = Convert.ToString(TPStatus);
  4568. // fdcMesaurementDataElem.TotalObservedVolume = (totalObservedVolume < 0) ? "" : FDCConvert.ToString(totalObservedVolume);
  4569. // fdcMesaurementDataElem.GrossStandardVolume = (grossStandardVolume < 0) ? "" : FDCConvert.ToString(grossStandardVolume);
  4570. // fdcMesaurementDataElem.AverageTemp = (averageTemp < 0) ? "" : FDCConvert.ToString(averageTemp);
  4571. // fdcMesaurementDataElem.WaterLevel = (waterLevel < 0) ? "" : FDCConvert.ToString(waterLevel);
  4572. // fdcMesaurementDataElem.ObservedDensity = (observedDensity < 0) ? "" : FDCConvert.ToString(observedDensity);
  4573. // fdcDeviceClassElem.MeasurementData = fdcMesaurementDataElem;
  4574. // ServiceResponseDeviceClassGetTankData[] fdcDeviceClassArray = { fdcDeviceClassElem };
  4575. // FDCDataElem.DeviceClass = fdcDeviceClassArray;
  4576. // FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  4577. // ServiceResponseFDCdataGetTankData[] FDCDataArray = { FDCDataElem };
  4578. // SvRes.FDCdata = FDCDataArray;
  4579. // ((FDCPOSInterfaceServerManager)fdcposManager).respChannelAThreadObj.SendResponse<ServiceResponseGetTankData>(fdcposManager.tcpClientList[FDCPOSClient.getClientID(workstationID, applicationSender)], SvRes);
  4580. //}
  4581. public bool GetTankDataAdd(string workstationID, string applicationSender, int requestId, int deviceId, int tankNo, int manualMode, int TPStatus, double productLevel, double totalObservedVolume, double grossStandardVolume, double averageTemp, double waterLevel, double observedDensity, int logicalStatus, int deviceStatus)
  4582. {
  4583. try
  4584. {
  4585. //FDCPOSManager.tracer.WriteLine("init");
  4586. ServiceResponseGetTankData SvRes = null;
  4587. string key = FDCPOSClient.getClientID(workstationID, applicationSender) + "GetTankData";
  4588. if (serviceResponseClientList.ContainsKey(key))
  4589. SvRes = (ServiceResponseGetTankData)(serviceResponseClientList[key]);
  4590. if (SvRes == null)
  4591. {
  4592. SvRes = new ServiceResponseGetTankData();
  4593. SvRes.WorkstationID = workstationID;
  4594. SvRes.ApplicationSender = applicationSender;
  4595. SvRes.RequestID = requestId.ToString();
  4596. serviceResponseClientList.Add(key, SvRes);
  4597. }
  4598. else
  4599. {
  4600. if (SvRes.RequestType != "GetTankData" || Convert.ToInt32(SvRes.RequestID) != requestId)
  4601. {
  4602. //FDCPOSManager.tracer.WriteLine(string.Format("SvRes.RequestID={0}, requestId={1} - end false", SvRes.RequestID, requestId));
  4603. return false;
  4604. }
  4605. }
  4606. ServiceResponseFDCdataGetTankData FDCDataElem = null;
  4607. if (SvRes.FDCdata != null)
  4608. FDCDataElem = SvRes.FDCdata[0];
  4609. else
  4610. {
  4611. ServiceResponseFDCdataGetTankData[] FDCDataArray = null;
  4612. FDCDataElem = new ServiceResponseFDCdataGetTankData();
  4613. Array.Resize<ServiceResponseFDCdataGetTankData>(ref FDCDataArray, (FDCDataArray != null) ? FDCDataArray.Length + 1 : 1);
  4614. FDCDataArray[FDCDataArray.Length - 1] = FDCDataElem;
  4615. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now); //DateTime.Now.ToString(Define.DateFormat);
  4616. SvRes.FDCdata = FDCDataArray;
  4617. }
  4618. ServiceResponseDeviceClassGetTankData fdcDeviceClassElem = null;
  4619. if (FDCDataElem.DeviceClass != null)
  4620. {
  4621. foreach (ServiceResponseDeviceClassGetTankData fdcDeviceClassElemTemp in FDCDataElem.DeviceClass)
  4622. if (fdcDeviceClassElemTemp.DeviceID == Convert.ToString(deviceId) && fdcDeviceClassElemTemp.TankNo == Convert.ToString(tankNo))
  4623. fdcDeviceClassElem = fdcDeviceClassElemTemp;
  4624. }
  4625. if (fdcDeviceClassElem == null && deviceId > 0)
  4626. {
  4627. fdcDeviceClassElem = new ServiceResponseDeviceClassGetTankData();
  4628. fdcDeviceClassElem.DeviceID = Convert.ToString(deviceId);
  4629. fdcDeviceClassElem.TankNo = Convert.ToString(tankNo);
  4630. fdcDeviceClassElem.ManualMode = (manualMode != 0) ? "True" : "False";
  4631. fdcDeviceClassElem.Type = Wayne.FDCPOSLibrary.DeviceType.DT_TankProbe;
  4632. fdcDeviceClassElem.MeasurementData = new ServiceResponseMeasurementDataGetTankData();
  4633. fdcDeviceClassElem.MeasurementData.AverageTemp = FDCConvert.ToString(averageTemp);
  4634. fdcDeviceClassElem.MeasurementData.GrossStandardVolume = FDCConvert.ToString(grossStandardVolume);
  4635. fdcDeviceClassElem.MeasurementData.ObservedDensity = FDCConvert.ToString(observedDensity);
  4636. fdcDeviceClassElem.MeasurementData.ProductLevel = FDCConvert.ToString(productLevel);
  4637. fdcDeviceClassElem.MeasurementData.TotalObservedVolume = FDCConvert.ToString(totalObservedVolume);
  4638. if (FDCGlobal.ProtocolVersion == FDCVersion.V0003)
  4639. fdcDeviceClassElem.MeasurementData.TPStatus = ((ErrorCode)TPStatus).ToString();
  4640. else if (FDCGlobal.ProtocolVersion == FDCVersion.V0005)
  4641. fdcDeviceClassElem.MeasurementData.LogicalState = ((LogicalState)logicalStatus).ToString();
  4642. else
  4643. fdcDeviceClassElem.MeasurementData.TankLogicalState = ((LogicalState)logicalStatus).ToString();
  4644. fdcDeviceClassElem.MeasurementData.WaterLevel = FDCConvert.ToString(waterLevel);
  4645. ServiceResponseDeviceClassGetTankData[] fdcDeviceClassArray = FDCDataElem.DeviceClass;
  4646. Array.Resize<ServiceResponseDeviceClassGetTankData>(ref fdcDeviceClassArray, (fdcDeviceClassArray != null) ? fdcDeviceClassArray.Length + 1 : 1);
  4647. fdcDeviceClassArray[fdcDeviceClassArray.Length - 1] = fdcDeviceClassElem;
  4648. FDCDataElem.DeviceClass = fdcDeviceClassArray;
  4649. }
  4650. }
  4651. catch (Exception ex)
  4652. {
  4653. //FDCPOSManager.tracer.WriteLine("Exception! " + ex.Message);
  4654. }
  4655. //FDCPOSManager.tracer.WriteLine("end");
  4656. return true;
  4657. }
  4658. public bool GetTankDataSend(string workstationID, string applicationSender, int requestId, int status, string overallResult)
  4659. {
  4660. try
  4661. {
  4662. ServiceResponseGetTankData SvRes = null;
  4663. string key = FDCPOSClient.getClientID(workstationID, applicationSender) + "GetTankData";
  4664. if (serviceResponseClientList.ContainsKey(key))
  4665. SvRes = (ServiceResponseGetTankData)(serviceResponseClientList[key]);
  4666. if (SvRes != null)
  4667. {
  4668. if (SvRes.RequestType != "GetTankData" || Convert.ToInt32(SvRes.RequestID) != requestId)
  4669. {
  4670. //FDCPOSManager.tracer.WriteLine(string.Format("SvRes.RequestID={0}, requestId={1} - end false", SvRes.RequestID, requestId));
  4671. return false;
  4672. }
  4673. }
  4674. else
  4675. {
  4676. // send an empty response - no available transaction added
  4677. SvRes = new ServiceResponseGetTankData();
  4678. SvRes.WorkstationID = workstationID;
  4679. SvRes.ApplicationSender = applicationSender;
  4680. SvRes.RequestID = requestId.ToString();
  4681. serviceResponseClientList.Add(key, SvRes);
  4682. ServiceResponseFDCdataGetTankData FDCDataElem = new ServiceResponseFDCdataGetTankData();
  4683. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now); //DateTime.Now.ToString(Define.DateFormat);
  4684. ////FDCPOSManager.tracer.WriteLine(string.Format("GetTankDataSend: Define.DateFormat={0}, FDCDataElem.FDCTimeStamp={1}", Define.DateFormat, FDCDataElem.FDCTimeStamp));
  4685. ServiceResponseFDCdataGetTankData[] FDCDataArray = { FDCDataElem };
  4686. SvRes.FDCdata = FDCDataArray;
  4687. }
  4688. if (FDCGlobal.ProtocolVersion >= FDCVersion.V0005)
  4689. SvRes.FDCdata[0].FDCStatus = ((ErrorCode)status).ToString();
  4690. SvRes.OverallResult = overallResult;
  4691. ((FDCPOSInterfaceServerManager)fdcPosManager).FdcServerTcpHandler.SendResponse<ServiceResponseGetTankData>(fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)], SvRes);
  4692. serviceResponseClientList.Remove(key);
  4693. return true;
  4694. }
  4695. catch (Exception ex)
  4696. {
  4697. //FDCPOSManager.tracer.WriteLine("Exception! " + ex.Message);
  4698. }
  4699. return false;
  4700. }
  4701. public void ReserveFuelPoint(string workstationID, string applicationSender, int requestId, int deviceId, int pumpNo, int status, string overallResult)
  4702. {
  4703. //FDCPOSManager.tracer.WriteLine("init");
  4704. ServiceResponseReserveFuelPoint SvRes = new ServiceResponseReserveFuelPoint();
  4705. SvRes.WorkstationID = workstationID;
  4706. SvRes.ApplicationSender = applicationSender;
  4707. SvRes.RequestID = requestId.ToString();
  4708. SvRes.OverallResult = overallResult;
  4709. ServiceResponseFDCdataReserveFuelPoint FDCDataElem = new ServiceResponseFDCdataReserveFuelPoint();
  4710. ServiceResponseDeviceClassReserveFuelPoint fdcDeviceClassElem = new ServiceResponseDeviceClassReserveFuelPoint();
  4711. fdcDeviceClassElem.DeviceID = Convert.ToString(deviceId);
  4712. fdcDeviceClassElem.PumpNo = Convert.ToString(pumpNo);
  4713. fdcDeviceClassElem.Type = Wayne.FDCPOSLibrary.DeviceType.DT_FuellingPoint;
  4714. //ServiceResponseDeviceClassReserveFuelPoint[] fdcDeviceClassArray = { fdcDeviceClassElem };
  4715. FDCDataElem.DeviceClass = fdcDeviceClassElem;
  4716. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  4717. FDCDataElem.FDCStatus = ((ErrorCode)status).ToString();
  4718. ServiceResponseFDCdataReserveFuelPoint[] FDCDataArray = { FDCDataElem };
  4719. SvRes.FDCdata = FDCDataArray;
  4720. ((FDCPOSInterfaceServerManager)fdcPosManager).FdcServerTcpHandler.SendResponse<ServiceResponseReserveFuelPoint>(fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)], SvRes);
  4721. //FDCPOSManager.tracer.WriteLine("end");
  4722. }
  4723. public void FreeFuelPoint(string workstationID, string applicationSender, int requestId, int deviceId, int pumpNo, int status, string overallResult)
  4724. {
  4725. //FDCPOSManager.tracer.WriteLine("init");
  4726. ServiceResponseFreeFuelPoint SvRes = new ServiceResponseFreeFuelPoint();
  4727. SvRes.WorkstationID = workstationID;
  4728. SvRes.ApplicationSender = applicationSender;
  4729. SvRes.RequestID = requestId.ToString();
  4730. SvRes.OverallResult = overallResult;
  4731. ServiceResponseFDCdataFreeFuelPoint FDCDataElem = new ServiceResponseFDCdataFreeFuelPoint();
  4732. ServiceResponseDeviceClassFreeFuelPoint fdcDeviceClassElem = new ServiceResponseDeviceClassFreeFuelPoint();
  4733. fdcDeviceClassElem.DeviceID = Convert.ToString(deviceId);
  4734. fdcDeviceClassElem.PumpNo = Convert.ToString(pumpNo);
  4735. fdcDeviceClassElem.Type = Wayne.FDCPOSLibrary.DeviceType.DT_FuellingPoint;
  4736. //ServiceResponseDeviceClassFreeFuelPoint[] fdcDeviceClassArray = { fdcDeviceClassElem };
  4737. FDCDataElem.DeviceClass = fdcDeviceClassElem;
  4738. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  4739. FDCDataElem.FDCStatus = ((ErrorCode)status).ToString();
  4740. ServiceResponseFDCdataFreeFuelPoint[] FDCDataArray = { FDCDataElem };
  4741. SvRes.FDCdata = FDCDataArray;
  4742. ((FDCPOSInterfaceServerManager)fdcPosManager).FdcServerTcpHandler.SendResponse<ServiceResponseFreeFuelPoint>(fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)], SvRes);
  4743. //FDCPOSManager.tracer.WriteLine("end");
  4744. }
  4745. public void StartFuelPointTest(string workstationID, string applicationSender, int requestId, int deviceId, int pumpNo, int status, string overallResult)
  4746. {
  4747. //FDCPOSManager.tracer.WriteLine("init");
  4748. ServiceResponseStartFuelPointTest SvRes = new ServiceResponseStartFuelPointTest();
  4749. SvRes.WorkstationID = workstationID;
  4750. SvRes.ApplicationSender = applicationSender;
  4751. SvRes.RequestID = requestId.ToString();
  4752. SvRes.OverallResult = overallResult;
  4753. ServiceResponseFDCdataStartFuelPointTest FDCDataElem = new ServiceResponseFDCdataStartFuelPointTest();
  4754. ServiceResponseDeviceClassStartFuelPointTest fdcDeviceClassElem = new ServiceResponseDeviceClassStartFuelPointTest();
  4755. fdcDeviceClassElem.DeviceID = Convert.ToString(deviceId);
  4756. fdcDeviceClassElem.PumpNo = Convert.ToString(pumpNo);
  4757. fdcDeviceClassElem.Type = Wayne.FDCPOSLibrary.DeviceType.DT_FuellingPoint;
  4758. //ServiceResponseDeviceClassReserveFuelPoint[] fdcDeviceClassArray = { fdcDeviceClassElem };
  4759. FDCDataElem.DeviceClass = fdcDeviceClassElem;
  4760. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  4761. FDCDataElem.FDCStatus = ((ErrorCode)status).ToString();
  4762. ServiceResponseFDCdataStartFuelPointTest[] FDCDataArray = { FDCDataElem };
  4763. SvRes.FDCdata = FDCDataArray;
  4764. ((FDCPOSInterfaceServerManager)fdcPosManager).FdcServerTcpHandler.SendResponse<ServiceResponseStartFuelPointTest>(fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)], SvRes);
  4765. //FDCPOSManager.tracer.WriteLine("end");
  4766. }
  4767. public void EndFuelPointTest(string workstationID, string applicationSender, int requestId, int deviceId, int pumpNo, int status, string overallResult)
  4768. {
  4769. //FDCPOSManager.tracer.WriteLine("init");
  4770. ServiceResponseEndFuelPointTest SvRes = new ServiceResponseEndFuelPointTest();
  4771. SvRes.WorkstationID = workstationID;
  4772. SvRes.ApplicationSender = applicationSender;
  4773. SvRes.RequestID = requestId.ToString();
  4774. SvRes.OverallResult = overallResult;
  4775. ServiceResponseFDCdataEndFuelPointTest FDCDataElem = new ServiceResponseFDCdataEndFuelPointTest();
  4776. ServiceResponseDeviceClassEndFuelPointTest fdcDeviceClassElem = new ServiceResponseDeviceClassEndFuelPointTest();
  4777. fdcDeviceClassElem.DeviceID = Convert.ToString(deviceId);
  4778. fdcDeviceClassElem.PumpNo = Convert.ToString(pumpNo);
  4779. fdcDeviceClassElem.Type = Wayne.FDCPOSLibrary.DeviceType.DT_FuellingPoint;
  4780. //ServiceResponseDeviceClassReserveFuelPoint[] fdcDeviceClassArray = { fdcDeviceClassElem };
  4781. FDCDataElem.DeviceClass = fdcDeviceClassElem;
  4782. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  4783. FDCDataElem.FDCStatus = ((ErrorCode)status).ToString();
  4784. ServiceResponseFDCdataEndFuelPointTest[] FDCDataArray = { FDCDataElem };
  4785. SvRes.FDCdata = FDCDataArray;
  4786. ((FDCPOSInterfaceServerManager)fdcPosManager).FdcServerTcpHandler.SendResponse<ServiceResponseEndFuelPointTest>(fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)], SvRes);
  4787. //FDCPOSManager.tracer.WriteLine("end");
  4788. }
  4789. public void SetDeviceAlarm(string workstationID, string applicationSender, int requestId, string deviceType, int deviceId, int status, string overallResult)
  4790. {
  4791. //FDCPOSManager.tracer.WriteLine("init");
  4792. ServiceResponseSetDeviceAlarm SvRes = new ServiceResponseSetDeviceAlarm();
  4793. SvRes.WorkstationID = workstationID;
  4794. SvRes.ApplicationSender = applicationSender;
  4795. SvRes.RequestID = requestId.ToString();
  4796. SvRes.OverallResult = overallResult;
  4797. ServiceResponseFDCdataSetDeviceAlarm FDCDataElem = new ServiceResponseFDCdataSetDeviceAlarm();
  4798. ServiceResponseDeviceClassSetDeviceAlarm fdcDeviceClassElem = new ServiceResponseDeviceClassSetDeviceAlarm();
  4799. fdcDeviceClassElem.DeviceID = Convert.ToString(deviceId);
  4800. fdcDeviceClassElem.Type = deviceType;
  4801. //ServiceResponseDeviceClassReserveFuelPoint[] fdcDeviceClassArray = { fdcDeviceClassElem };
  4802. FDCDataElem.DeviceClass = fdcDeviceClassElem;
  4803. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  4804. FDCDataElem.FDCStatus = ((ErrorCode)status).ToString();
  4805. ServiceResponseFDCdataSetDeviceAlarm[] FDCDataArray = { FDCDataElem };
  4806. SvRes.FDCdata = FDCDataArray;
  4807. ((FDCPOSInterfaceServerManager)fdcPosManager).FdcServerTcpHandler.SendResponse<ServiceResponseSetDeviceAlarm>(fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)], SvRes);
  4808. //FDCPOSManager.tracer.WriteLine("end");
  4809. }
  4810. public bool OpenFuelPointAdd(string workstationID, string applicationSender, int requestId, int deviceId, int pumpNo, LogicalDeviceState deviceStatus)
  4811. {
  4812. try
  4813. {
  4814. //FDCPOSManager.tracer.WriteLine("init");
  4815. ServiceResponseOpenFuelPoint SvResFuelPoint = null;
  4816. ServiceResponseOpenDevice SvResDevice = null;
  4817. string commandName = (FDCGlobal.ProtocolVersion == FDCVersion.V0003) ? "OpenFuelPoint" : "OpenDevice";
  4818. string key = FDCPOSClient.getClientID(workstationID, applicationSender) + commandName;
  4819. if (FDCGlobal.ProtocolVersion == FDCVersion.V0003)
  4820. {
  4821. if (serviceResponseClientList.ContainsKey(key))
  4822. SvResFuelPoint = (ServiceResponseOpenFuelPoint)(serviceResponseClientList[key]);
  4823. if (SvResFuelPoint == null)
  4824. {
  4825. SvResFuelPoint = new ServiceResponseOpenFuelPoint();
  4826. SvResFuelPoint.WorkstationID = workstationID;
  4827. SvResFuelPoint.ApplicationSender = applicationSender;
  4828. SvResFuelPoint.RequestID = requestId.ToString();
  4829. serviceResponseClientList.Add(key, SvResFuelPoint);
  4830. }
  4831. else
  4832. {
  4833. if (SvResFuelPoint.RequestType != commandName || Convert.ToInt32(SvResFuelPoint.RequestID) != requestId)
  4834. {
  4835. //FDCPOSManager.tracer.WriteLine(string.Format("SvResFuelPoint.RequestID={0}, requestId={1} - end false", SvResFuelPoint.RequestID, requestId));
  4836. return false;
  4837. }
  4838. }
  4839. }
  4840. else
  4841. {
  4842. if (serviceResponseClientList.ContainsKey(key))
  4843. SvResDevice = (ServiceResponseOpenDevice)(serviceResponseClientList[key]);
  4844. if (SvResDevice == null)
  4845. {
  4846. SvResDevice = new ServiceResponseOpenDevice();
  4847. SvResDevice.WorkstationID = workstationID;
  4848. SvResDevice.ApplicationSender = applicationSender;
  4849. SvResDevice.RequestID = requestId.ToString();
  4850. serviceResponseClientList.Add(key, SvResDevice);
  4851. }
  4852. else
  4853. {
  4854. if (SvResDevice.RequestType != commandName || Convert.ToInt32(SvResDevice.RequestID) != requestId)
  4855. {
  4856. //FDCPOSManager.tracer.WriteLine(string.Format("SvResDevice.RequestID={0}, requestId={1} - end false", SvResDevice.RequestID, requestId));
  4857. return false;
  4858. }
  4859. }
  4860. }
  4861. ServiceResponseFDCdataOpenFuelPoint FDCDataElem = null;
  4862. if (SvResFuelPoint != null && SvResFuelPoint.FDCdata != null)
  4863. FDCDataElem = SvResFuelPoint.FDCdata[0];
  4864. else if (SvResDevice != null && SvResDevice.FDCdata != null)
  4865. FDCDataElem = SvResDevice.FDCdata[0];
  4866. else
  4867. {
  4868. ServiceResponseFDCdataOpenFuelPoint[] FDCDataArray = null;
  4869. FDCDataElem = new ServiceResponseFDCdataOpenFuelPoint();
  4870. Array.Resize<ServiceResponseFDCdataOpenFuelPoint>(ref FDCDataArray, (FDCDataArray != null) ? FDCDataArray.Length + 1 : 1);
  4871. FDCDataArray[FDCDataArray.Length - 1] = FDCDataElem;
  4872. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  4873. //FDCDataElem.FDCStatus = ((ErrorCode)status).ToString();
  4874. if (FDCGlobal.ProtocolVersion == FDCVersion.V0003)
  4875. SvResFuelPoint.FDCdata = FDCDataArray;
  4876. else
  4877. SvResDevice.FDCdata = FDCDataArray;
  4878. }
  4879. ServiceResponseDeviceClassOpenFuelPoint fdcDeviceClassElem = null;
  4880. if (FDCDataElem.DeviceClass != null)
  4881. {
  4882. foreach (ServiceResponseDeviceClassOpenFuelPoint fdcDeviceClassElemTemp in FDCDataElem.DeviceClass)
  4883. if (fdcDeviceClassElemTemp.DeviceID == Convert.ToString(deviceId))
  4884. fdcDeviceClassElem = fdcDeviceClassElemTemp;
  4885. }
  4886. if (fdcDeviceClassElem == null && deviceId > 0)
  4887. {
  4888. fdcDeviceClassElem = new ServiceResponseDeviceClassOpenFuelPoint();
  4889. fdcDeviceClassElem.DeviceID = Convert.ToString(deviceId);
  4890. fdcDeviceClassElem.PumpNo = Convert.ToString(pumpNo);
  4891. fdcDeviceClassElem.Type = Wayne.FDCPOSLibrary.DeviceType.DT_FuellingPoint;
  4892. if (FDCGlobal.ProtocolVersion >= FDCVersion.V0005)
  4893. fdcDeviceClassElem.DeviceState = deviceStatus.ToString();
  4894. ServiceResponseDeviceClassOpenFuelPoint[] fdcDeviceClassArray = FDCDataElem.DeviceClass;
  4895. Array.Resize<ServiceResponseDeviceClassOpenFuelPoint>(ref fdcDeviceClassArray, (fdcDeviceClassArray != null) ? fdcDeviceClassArray.Length + 1 : 1);
  4896. fdcDeviceClassArray[fdcDeviceClassArray.Length - 1] = fdcDeviceClassElem;
  4897. FDCDataElem.DeviceClass = fdcDeviceClassArray;
  4898. }
  4899. }
  4900. catch (Exception ex)
  4901. {
  4902. //FDCPOSManager.tracer.WriteLine("Exception! " + ex.Message);
  4903. }
  4904. //FDCPOSManager.tracer.WriteLine("end");
  4905. return true;
  4906. }
  4907. public bool OpenFuelPointSend(string workstationID, string applicationSender, int requestId, int status, string overallResult)
  4908. {
  4909. try
  4910. {
  4911. ServiceResponseOpenFuelPoint SvResFuelPoint = null;
  4912. ServiceResponseOpenDevice SvResDevice = null;
  4913. string commandName = (FDCGlobal.ProtocolVersion == FDCVersion.V0003) ? "OpenFuelPoint" : "OpenDevice";
  4914. string key = FDCPOSClient.getClientID(workstationID, applicationSender) + commandName;
  4915. if (FDCGlobal.ProtocolVersion == FDCVersion.V0003)
  4916. {
  4917. if (serviceResponseClientList.ContainsKey(key))
  4918. SvResFuelPoint = (ServiceResponseOpenFuelPoint)(serviceResponseClientList[key]);
  4919. if (SvResFuelPoint != null)
  4920. {
  4921. if (SvResFuelPoint.RequestType != commandName || Convert.ToInt32(SvResFuelPoint.RequestID) != requestId)
  4922. {
  4923. //FDCPOSManager.tracer.WriteLine(string.Format("SvResFuelPoint.RequestID={0}, requestId={1} - end false", SvResFuelPoint.RequestID, requestId));
  4924. return false;
  4925. }
  4926. }
  4927. else
  4928. {
  4929. // send an empty response - no available transaction added
  4930. SvResFuelPoint = new ServiceResponseOpenFuelPoint();
  4931. SvResFuelPoint.WorkstationID = workstationID;
  4932. SvResFuelPoint.ApplicationSender = applicationSender;
  4933. SvResFuelPoint.RequestID = requestId.ToString();
  4934. serviceResponseClientList.Add(key, SvResFuelPoint);
  4935. ServiceResponseFDCdataOpenFuelPoint FDCDataElem = new ServiceResponseFDCdataOpenFuelPoint();
  4936. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  4937. //FDCDataElem.FDCStatus = ((ErrorCode)status).ToString();
  4938. ServiceResponseFDCdataOpenFuelPoint[] FDCDataArray = { FDCDataElem };
  4939. SvResFuelPoint.FDCdata = FDCDataArray;
  4940. }
  4941. SvResFuelPoint.FDCdata[0].FDCStatus = ((ErrorCode)status).ToString();
  4942. SvResFuelPoint.OverallResult = overallResult;
  4943. ((FDCPOSInterfaceServerManager)fdcPosManager).FdcServerTcpHandler.SendResponse<ServiceResponseOpenFuelPoint>(fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)], SvResFuelPoint);
  4944. }
  4945. else
  4946. {
  4947. if (serviceResponseClientList.ContainsKey(key))
  4948. SvResDevice = (ServiceResponseOpenDevice)(serviceResponseClientList[key]);
  4949. if (SvResDevice != null)
  4950. {
  4951. if (SvResDevice.RequestType != commandName || Convert.ToInt32(SvResDevice.RequestID) != requestId)
  4952. {
  4953. //FDCPOSManager.tracer.WriteLine(string.Format("SvResDevice.RequestID={0}, requestId={1} - end false", SvResDevice.RequestID, requestId));
  4954. return false;
  4955. }
  4956. }
  4957. else
  4958. {
  4959. // send an empty response - no available transaction added
  4960. SvResDevice = new ServiceResponseOpenDevice();
  4961. SvResDevice.WorkstationID = workstationID;
  4962. SvResDevice.ApplicationSender = applicationSender;
  4963. SvResDevice.RequestID = requestId.ToString();
  4964. serviceResponseClientList.Add(key, SvResDevice);
  4965. ServiceResponseFDCdataOpenFuelPoint FDCDataElem = new ServiceResponseFDCdataOpenFuelPoint();
  4966. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  4967. //FDCDataElem.FDCStatus = ((ErrorCode)status).ToString();
  4968. ServiceResponseFDCdataOpenFuelPoint[] FDCDataArray = { FDCDataElem };
  4969. SvResDevice.FDCdata = FDCDataArray;
  4970. }
  4971. SvResDevice.FDCdata[0].FDCStatus = ((ErrorCode)status).ToString();
  4972. SvResDevice.OverallResult = overallResult;
  4973. ((FDCPOSInterfaceServerManager)fdcPosManager).FdcServerTcpHandler.SendResponse<ServiceResponseOpenDevice>(fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)], SvResDevice);
  4974. }
  4975. serviceResponseClientList.Remove(key);
  4976. return true;
  4977. }
  4978. catch (Exception ex)
  4979. {
  4980. //FDCPOSManager.tracer.WriteLine("Exception! " + ex.Message);
  4981. }
  4982. return false;
  4983. }
  4984. public bool CloseFuelPointAdd(string workstationID, string applicationSender, int requestId, int deviceId, int pumpNo, LogicalDeviceState deviceStatus)
  4985. {
  4986. try
  4987. {
  4988. //FDCPOSManager.tracer.WriteLine("init");
  4989. ServiceResponseCloseFuelPoint SvResFuelPoint = null;
  4990. ServiceResponseCloseDevice SvResDevice = null;
  4991. string commandName = (FDCGlobal.ProtocolVersion == FDCVersion.V0003) ? "CloseFuelPoint" : "CloseDevice";
  4992. string key = FDCPOSClient.getClientID(workstationID, applicationSender) + commandName;
  4993. if (FDCGlobal.ProtocolVersion == FDCVersion.V0003)
  4994. {
  4995. if (serviceResponseClientList.ContainsKey(key))
  4996. SvResFuelPoint = (ServiceResponseCloseFuelPoint)(serviceResponseClientList[key]);
  4997. if (SvResFuelPoint == null)
  4998. {
  4999. SvResFuelPoint = new ServiceResponseCloseFuelPoint();
  5000. SvResFuelPoint.WorkstationID = workstationID;
  5001. SvResFuelPoint.ApplicationSender = applicationSender;
  5002. SvResFuelPoint.RequestID = requestId.ToString();
  5003. serviceResponseClientList.Add(key, SvResFuelPoint);
  5004. }
  5005. else
  5006. {
  5007. if (SvResFuelPoint.RequestType != commandName || Convert.ToInt32(SvResFuelPoint.RequestID) != requestId)
  5008. {
  5009. //FDCPOSManager.tracer.WriteLine(string.Format("SvRes.RequestID={0}, requestId={1} - end false", SvResFuelPoint.RequestID, requestId));
  5010. return false;
  5011. }
  5012. }
  5013. }
  5014. else
  5015. {
  5016. if (serviceResponseClientList.ContainsKey(key))
  5017. SvResDevice = (ServiceResponseCloseDevice)(serviceResponseClientList[key]);
  5018. if (SvResDevice == null)
  5019. {
  5020. SvResDevice = new ServiceResponseCloseDevice();
  5021. SvResDevice.WorkstationID = workstationID;
  5022. SvResDevice.ApplicationSender = applicationSender;
  5023. SvResDevice.RequestID = requestId.ToString();
  5024. serviceResponseClientList.Add(key, SvResDevice);
  5025. }
  5026. else
  5027. {
  5028. if (SvResDevice.RequestType != commandName || Convert.ToInt32(SvResDevice.RequestID) != requestId)
  5029. {
  5030. //FDCPOSManager.tracer.WriteLine(string.Format("SvRes.RequestID={0}, requestId={1} - end false", SvResDevice.RequestID, requestId));
  5031. return false;
  5032. }
  5033. }
  5034. }
  5035. ServiceResponseFDCdataCloseFuelPoint FDCDataElem = null;
  5036. if (SvResFuelPoint != null && SvResFuelPoint.FDCdata != null)
  5037. FDCDataElem = SvResFuelPoint.FDCdata[0];
  5038. else if (SvResDevice != null && SvResDevice.FDCdata != null)
  5039. FDCDataElem = SvResDevice.FDCdata[0];
  5040. else
  5041. {
  5042. ServiceResponseFDCdataCloseFuelPoint[] FDCDataArray = null;
  5043. FDCDataElem = new ServiceResponseFDCdataCloseFuelPoint();
  5044. Array.Resize<ServiceResponseFDCdataCloseFuelPoint>(ref FDCDataArray, (FDCDataArray != null) ? FDCDataArray.Length + 1 : 1);
  5045. FDCDataArray[FDCDataArray.Length - 1] = FDCDataElem;
  5046. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  5047. //FDCDataElem.FDCStatus = ((ErrorCode)status).ToString();
  5048. if (FDCGlobal.ProtocolVersion == FDCVersion.V0003)
  5049. SvResFuelPoint.FDCdata = FDCDataArray;
  5050. else
  5051. SvResDevice.FDCdata = FDCDataArray;
  5052. }
  5053. ServiceResponseDeviceClassCloseFuelPoint fdcDeviceClassElem = null;
  5054. if (FDCDataElem.DeviceClass != null)
  5055. {
  5056. foreach (ServiceResponseDeviceClassCloseFuelPoint fdcDeviceClassElemTemp in FDCDataElem.DeviceClass)
  5057. if (fdcDeviceClassElemTemp.DeviceID == Convert.ToString(deviceId))
  5058. fdcDeviceClassElem = fdcDeviceClassElemTemp;
  5059. }
  5060. if (fdcDeviceClassElem == null && deviceId > 0)
  5061. {
  5062. fdcDeviceClassElem = new ServiceResponseDeviceClassCloseFuelPoint();
  5063. fdcDeviceClassElem.DeviceID = Convert.ToString(deviceId);
  5064. fdcDeviceClassElem.PumpNo = Convert.ToString(pumpNo);
  5065. fdcDeviceClassElem.Type = Wayne.FDCPOSLibrary.DeviceType.DT_FuellingPoint;
  5066. if (FDCGlobal.ProtocolVersion >= FDCVersion.V0005)
  5067. fdcDeviceClassElem.DeviceState = deviceStatus.ToString();
  5068. ServiceResponseDeviceClassCloseFuelPoint[] fdcDeviceClassArray = FDCDataElem.DeviceClass;
  5069. Array.Resize<ServiceResponseDeviceClassCloseFuelPoint>(ref fdcDeviceClassArray, (fdcDeviceClassArray != null) ? fdcDeviceClassArray.Length + 1 : 1);
  5070. fdcDeviceClassArray[fdcDeviceClassArray.Length - 1] = fdcDeviceClassElem;
  5071. FDCDataElem.DeviceClass = fdcDeviceClassArray;
  5072. }
  5073. }
  5074. catch (Exception ex)
  5075. {
  5076. //FDCPOSManager.tracer.WriteLine("Exception! " + ex.Message);
  5077. }
  5078. //FDCPOSManager.tracer.WriteLine("end");
  5079. return true;
  5080. }
  5081. public bool CloseFuelPointSend(string workstationID, string applicationSender, int requestId, int status, string overallResult)
  5082. {
  5083. try
  5084. {
  5085. ServiceResponseCloseFuelPoint SvResFuelPoint = null;
  5086. ServiceResponseCloseDevice SvResDevice = null;
  5087. string commandName = (FDCGlobal.ProtocolVersion == FDCVersion.V0003) ? "CloseFuelPoint" : "CloseDevice";
  5088. string key = FDCPOSClient.getClientID(workstationID, applicationSender) + commandName;
  5089. if (FDCGlobal.ProtocolVersion == FDCVersion.V0003)
  5090. {
  5091. if (serviceResponseClientList.ContainsKey(key))
  5092. SvResFuelPoint = (ServiceResponseCloseFuelPoint)(serviceResponseClientList[key]);
  5093. if (SvResFuelPoint != null)
  5094. {
  5095. if (SvResFuelPoint.RequestType != commandName || Convert.ToInt32(SvResFuelPoint.RequestID) != requestId)
  5096. {
  5097. //FDCPOSManager.tracer.WriteLine(string.Format("SvResFuelPoint.RequestID={0}, requestId={1} - end false", SvResFuelPoint.RequestID, requestId));
  5098. return false;
  5099. }
  5100. }
  5101. else
  5102. {
  5103. // send an empty response - no available transaction added
  5104. SvResFuelPoint = new ServiceResponseCloseFuelPoint();
  5105. SvResFuelPoint.WorkstationID = workstationID;
  5106. SvResFuelPoint.ApplicationSender = applicationSender;
  5107. SvResFuelPoint.RequestID = requestId.ToString();
  5108. serviceResponseClientList.Add(key, SvResFuelPoint);
  5109. ServiceResponseFDCdataCloseFuelPoint FDCDataElem = new ServiceResponseFDCdataCloseFuelPoint();
  5110. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  5111. //FDCDataElem.FDCStatus = ((ErrorCode)status).ToString();
  5112. ServiceResponseFDCdataCloseFuelPoint[] FDCDataArray = { FDCDataElem };
  5113. SvResFuelPoint.FDCdata = FDCDataArray;
  5114. }
  5115. SvResFuelPoint.FDCdata[0].FDCStatus = ((ErrorCode)status).ToString();
  5116. SvResFuelPoint.OverallResult = overallResult;
  5117. ((FDCPOSInterfaceServerManager)fdcPosManager).FdcServerTcpHandler.SendResponse<ServiceResponseCloseFuelPoint>(fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)], SvResFuelPoint);
  5118. }
  5119. else
  5120. {
  5121. if (serviceResponseClientList.ContainsKey(key))
  5122. SvResDevice = (ServiceResponseCloseDevice)(serviceResponseClientList[key]);
  5123. if (SvResDevice != null)
  5124. {
  5125. if (SvResDevice.RequestType != commandName || Convert.ToInt32(SvResDevice.RequestID) != requestId)
  5126. {
  5127. //FDCPOSManager.tracer.WriteLine(string.Format("SvResDevice.RequestID={0}, requestId={1} - end false", SvResDevice.RequestID, requestId));
  5128. return false;
  5129. }
  5130. }
  5131. else
  5132. {
  5133. // send an empty response - no available transaction added
  5134. SvResDevice = new ServiceResponseCloseDevice();
  5135. SvResDevice.WorkstationID = workstationID;
  5136. SvResDevice.ApplicationSender = applicationSender;
  5137. SvResDevice.RequestID = requestId.ToString();
  5138. serviceResponseClientList.Add(key, SvResDevice);
  5139. ServiceResponseFDCdataCloseFuelPoint FDCDataElem = new ServiceResponseFDCdataCloseFuelPoint();
  5140. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  5141. //FDCDataElem.FDCStatus = ((ErrorCode)status).ToString();
  5142. ServiceResponseFDCdataCloseFuelPoint[] FDCDataArray = { FDCDataElem };
  5143. SvResDevice.FDCdata = FDCDataArray;
  5144. }
  5145. SvResDevice.FDCdata[0].FDCStatus = ((ErrorCode)status).ToString();
  5146. SvResDevice.OverallResult = overallResult;
  5147. ((FDCPOSInterfaceServerManager)fdcPosManager).FdcServerTcpHandler.SendResponse<ServiceResponseCloseDevice>(fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)], SvResDevice);
  5148. }
  5149. serviceResponseClientList.Remove(key);
  5150. return true;
  5151. }
  5152. catch (Exception ex)
  5153. {
  5154. //FDCPOSManager.tracer.WriteLine("Exception! " + ex.Message);
  5155. }
  5156. return false;
  5157. }
  5158. public bool GenericTypelessMessageSend(string workstationID, string applicationSender, int requestId, string responseMessage, string overallResult)
  5159. {
  5160. try
  5161. {
  5162. ServiceResponseGenericTypelessMessage response = new ServiceResponseGenericTypelessMessage();
  5163. //FDCPOSManager.tracer.WriteLine("init");
  5164. response.OverallResult = overallResult;
  5165. response.WorkstationID = workstationID;
  5166. response.ApplicationSender = applicationSender;
  5167. response.RequestID = requestId.ToString();
  5168. response.OverallResult = overallResult;
  5169. FDCMessageFDCdataGenericTypelessMessage FDCDataElem = new FDCMessageFDCdataGenericTypelessMessage();
  5170. FDCDataElem.Message = responseMessage;
  5171. //ServiceResponseDeviceClassReserveFuelPoint[] fdcDeviceClassArray = { fdcDeviceClassElem };
  5172. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  5173. FDCMessageFDCdataGenericTypelessMessage[] FDCDataArray = { FDCDataElem };
  5174. response.FDCdata = FDCDataArray;
  5175. ((FDCPOSInterfaceServerManager)fdcPosManager).FdcServerTcpHandler.SendResponse<ServiceResponseGenericTypelessMessage>(fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)], response);
  5176. //FDCPOSManager.tracer.WriteLine("end");
  5177. }
  5178. catch (Exception ex)
  5179. {
  5180. //FDCPOSManager.tracer.WriteLine("Exception! " + ex.Message);
  5181. }
  5182. return false;
  5183. }
  5184. #endregion
  5185. #region OPT Messages
  5186. public void OptRead(string deviceType, int deviceId, byte[] message)
  5187. {
  5188. string workstationID = "", applicationSender = "";
  5189. //FDCPOSManager.tracer.WriteLine(string.Format("init: Id={0}", deviceId));
  5190. Monitor.Enter(fdcPosManager.fdcClientList);
  5191. try
  5192. {
  5193. foreach (string sID in fdcPosManager.fdcClientList.Keys)
  5194. {
  5195. if (!fdcPosManager.fdcClientList[sID].connected || !fdcPosManager.fdcClientList[sID].logon)
  5196. continue;
  5197. workstationID = fdcPosManager.fdcClientList[sID].workstationID;
  5198. applicationSender = fdcPosManager.fdcClientList[sID].applicationSender;
  5199. FDCMessageOPTRead dsc = new FDCMessageOPTRead();
  5200. dsc.WorkstationID = workstationID;
  5201. dsc.ApplicationSender = applicationSender;
  5202. dsc.MessageID = FDCPOSManager.messageIdCounter.ToString();
  5203. FDCMessageFDCdataOPTRead FDCDataElem = new FDCMessageFDCdataOPTRead();
  5204. FDCMessageDeviceClassOPTRead fdcDeviceClassElem = new FDCMessageDeviceClassOPTRead();
  5205. fdcDeviceClassElem.DeviceID = Convert.ToString(deviceId);
  5206. fdcDeviceClassElem.Type = deviceType;
  5207. fdcDeviceClassElem.Message = message;
  5208. FDCMessageDeviceClassOPTRead[] fdcDeviceClassArray = { fdcDeviceClassElem };
  5209. FDCDataElem.DeviceClass = fdcDeviceClassArray;
  5210. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  5211. FDCMessageFDCdataOPTRead[] FDCDataArray = { FDCDataElem };
  5212. dsc.FDCdata = FDCDataArray;
  5213. SendFDCMessage<FDCMessageOPTRead>(fdcPosManager.fdcClientList[sID], dsc);
  5214. }
  5215. }
  5216. catch (Exception ex)
  5217. {
  5218. //FDCPOSManager.tracer.WriteLine("Exception! " + ex.Message + " - " + ex.StackTrace);
  5219. }
  5220. finally
  5221. {
  5222. Monitor.Exit(fdcPosManager.fdcClientList);
  5223. }
  5224. //FDCPOSManager.tracer.WriteLine("end");
  5225. }
  5226. #endregion
  5227. #region OPT ServiceResponces
  5228. public void OptAdd(string workstationID, string applicationSender, int requestId, string deviceType, int deviceId, string overallResult)
  5229. {
  5230. //FDCPOSManager.tracer.WriteLine(string.Format("init: Id={0}", deviceId));
  5231. ServiceResponseOPTAdd SvRes = new ServiceResponseOPTAdd();
  5232. SvRes.WorkstationID = workstationID;
  5233. SvRes.ApplicationSender = applicationSender;
  5234. SvRes.RequestID = requestId.ToString();
  5235. SvRes.OverallResult = overallResult;
  5236. ServiceResponseFDCdataOPTAdd FDCDataElem = new ServiceResponseFDCdataOPTAdd();
  5237. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  5238. ServiceResponseDeviceClassOPTAdd deviceClass = new ServiceResponseDeviceClassOPTAdd();
  5239. deviceClass.DeviceID = Convert.ToString(deviceId);
  5240. deviceClass.Type = deviceType;
  5241. FDCDataElem.DeviceClass = deviceClass;
  5242. ServiceResponseFDCdataOPTAdd[] FDCDataArray = { FDCDataElem };
  5243. SvRes.FDCdata = FDCDataArray;
  5244. ((FDCPOSInterfaceServerManager)fdcPosManager).FdcServerTcpHandler.SendResponse<ServiceResponseOPTAdd>(fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)], SvRes);
  5245. //FDCPOSManager.tracer.WriteLine("end");
  5246. }
  5247. public void OptRemove(string workstationID, string applicationSender, int requestId, string deviceType, int deviceId, string overallResult)
  5248. {
  5249. //FDCPOSManager.tracer.WriteLine(string.Format("init: Id={0}", deviceId));
  5250. ServiceResponseOPTRemove SvRes = new ServiceResponseOPTRemove();
  5251. SvRes.WorkstationID = workstationID;
  5252. SvRes.ApplicationSender = applicationSender;
  5253. SvRes.RequestID = requestId.ToString();
  5254. SvRes.OverallResult = overallResult;
  5255. ServiceResponseFDCdataOPTRemove FDCDataElem = new ServiceResponseFDCdataOPTRemove();
  5256. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  5257. ServiceResponseDeviceClassOPTRemove deviceClass = new ServiceResponseDeviceClassOPTRemove();
  5258. deviceClass.DeviceID = Convert.ToString(deviceId);
  5259. deviceClass.Type = deviceType;
  5260. FDCDataElem.DeviceClass = deviceClass;
  5261. ServiceResponseFDCdataOPTRemove[] FDCDataArray = { FDCDataElem };
  5262. SvRes.FDCdata = FDCDataArray;
  5263. ((FDCPOSInterfaceServerManager)fdcPosManager).FdcServerTcpHandler.SendResponse<ServiceResponseOPTRemove>(fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)], SvRes);
  5264. //FDCPOSManager.tracer.WriteLine("end");
  5265. }
  5266. public void OptWrite(string workstationID, string applicationSender, int requestId, string deviceType, int deviceId, string overallResult)
  5267. {
  5268. //FDCPOSManager.tracer.WriteLine(string.Format("init: Id={0}", deviceId));
  5269. ServiceResponseOPTWrite SvRes = new ServiceResponseOPTWrite();
  5270. SvRes.WorkstationID = workstationID;
  5271. SvRes.ApplicationSender = applicationSender;
  5272. SvRes.RequestID = requestId.ToString();
  5273. SvRes.OverallResult = overallResult;
  5274. ServiceResponseFDCdataOPTWrite FDCDataElem = new ServiceResponseFDCdataOPTWrite();
  5275. FDCDataElem.FDCTimeStamp = FDCConvert.ToString(DateTime.Now);
  5276. ServiceResponseDeviceClassOPTWrite deviceClass = new ServiceResponseDeviceClassOPTWrite();
  5277. deviceClass.DeviceID = Convert.ToString(deviceId);
  5278. deviceClass.Type = deviceType;
  5279. FDCDataElem.DeviceClass = deviceClass;
  5280. ServiceResponseFDCdataOPTWrite[] FDCDataArray = { FDCDataElem };
  5281. SvRes.FDCdata = FDCDataArray;
  5282. ((FDCPOSInterfaceServerManager)fdcPosManager).FdcServerTcpHandler.SendResponse<ServiceResponseOPTWrite>(fdcPosManager.fdcClientList[FDCPOSClient.getClientID(workstationID, applicationSender)], SvRes);
  5283. //FDCPOSManager.tracer.WriteLine("end");
  5284. }
  5285. #endregion
  5286. }
  5287. }