/[H9]/trunk/docs/Server Software dokumentation.doc
ViewVC logotype

Contents of /trunk/docs/Server Software dokumentation.doc

Parent Directory Parent Directory | Revision Log Revision Log


Revision 220 - (show annotations) (download) (as text)
Tue Dec 11 07:16:35 2007 UTC (16 years, 5 months ago) by kevin
File MIME type: application/octet-stream
File size: 40960 byte(s)
added accepttest-specification, komunikation med vores sms moded and updated server software dokumentation
1 ࡱ> KMJyf6bjbjEE4H''f.UUUUUiiii$$i$h|$~$~$~$~$~$~$A&(>~$U~$UU$h#h#h# UU|$h#|$h#h#h#P;i!~h#h$$0$h#!)h#!)h#!)Uh#h#~$~$h#$!) :Server Software dokumentation. Userguide Nr Serren AB starter deres serversoftware har de 3 valgmuligheder, fordelt p 2 knapper: Start: Denne knap starter med at tjecke om det er ndvendigt at sende en pinkode til modemet, hvis det er det bliver den sendt og vi venter p modemet er klar, hvorefter vi fortstter start fasen. Hvis ikke det er ndvendigt med en pinkode hopper vi direkte til start fasen. I startfasen starter vi med at lse i databasen hvad serverens eget telefon nummer er, skriver det p skrmen og starter main trden som ser efter data p den serielle port, lser i databasen om der skal sendes config smser osv. Close: Bruges til at lukke programmet pnt ned. Ved at lukke serial og database connection og stopper main lkken. Server-Settings.ini Server-Settings.ini er en fil der skal ligge i rodmappen til server softwaren, hvor man kan ndre host, database, user, password for databasen, og vlge hvilken COM-port programmet skal bruge. Beskrivelse Serveren i dette projekt skulle ikke vre et vrktj som vi plejer, men nrmere et bindeled mellem databasen og flisfyret, som s for en god ordens skyld kan skrive noget data i et logvindue s man kan se hvad der sker. Serveren er rimelig simpel opbygget, der er en seriel wrapper til at tage sig af det alt til det serielle (genbrugt fra tidligere projekt), en Server-Settings fil til at holde det data brugeren skal kunne ndre. En container fil til at holde de klasser og variabler jeg skulle bruge rundt omkring i projektet, og en trd der str og kalder alle de ndvendige funktionen, hvis der er brug for dem, trden ligger i CFlisfyrDlg som er min hovedeklasse. Funktioner OnInitDialog: I denne standart oprettede funktion vlger jeg at kalde StartSerial() og DBConnect, samt stte min sms counter til 0. AppendText : Da jeg ofte havde brug for at tage den tekst der var i log vinduet og tilfje en ny line og noget nyt tekst valgte jeg at lave en funktion jeg kunne kalde med den streng der skulle tilfjes i den nye linie under teksten. Da jeg alligevel har fat i alt tekst der skrives her bliver der ogs sat et tidsstempel p s det er til at se hvornr der sidst kom noget ind. Her hndtere jeg ogs autoscroll, da det normalt reagere p enter, som vi ikke bruger i dette projekt. CheckAcknowledges : Denne funktion bruges til at tjecke op p om der er get over 5 minuter siden vi sendte configurations smsen ud og og der ikke er kommet svar. Frst ser vi om der er get 300 sekunder eller derover, hvis der er det tjeckes der for om der er sendt 1 retry sms ud. I tilfldet at der er sendt 1 retry sms ud vil commerror p installationen blive sat til true, hvilket resultere i installationen vil st under critical p web siden. Hvis der ikke er blevet sendt en retry sms, vil der blive sendt en og counteren tlles op, samt der vil i log vinduet blive skrevet Retry send config to TLFNR. DBConnect: I denne funktion indlser jeg data fra Server-Settings filen og opretter forbindelse til databasen. DBReadCommands: Denne funktion gr ind i databasen og ser i command, hvis den stder p en linie hvor der ikke er sat nogen executed tid p retunere den id, commandid og installationid til en data container til senere brug. DBReadPhone : Denne funktion bliver kaldt med et installationsid for at kunne hente det rigtige telefon nummer, imei nr, update rate og id p installationen, og returnere det til en data container klasse. Hvis der bliver sendt et 0 med som installations id vlger den at hente hele listen frem, da de s er tegn p vi skal sende en config sms til alle installationer. DeleteSms : Denne funktion kaldes nr vi lukker serveren, og nr vi har modtaget et fastlag antal smser, den sender en at+cmgd=1,3 kommando ud til modemet for at slette alle lste, sendte og usendte smser. HandleAcknowledge: Hvis vi modtager en conf ok besked kalder vi denne funktion med afsenderens telefonnummer, derefter leder vi vores liste igennem efter frste forekomst af dette nummer, som vi s sletter fra listen. keepaliveandread : Vi havde skrevet i kravspecifikationen at serveren skulle hente sit eget telefon nummer i databasen, og at den ville lse i databasen hver 15. Minut for at holde sig i live. Det blev denne funktion oprettet til. Frst prver jeg at kre sql strengen select name, value from config;, hvis det lykkedes smider jeg den hentede data i en container til senere brug. Hvis der af en eller anden rsag ikke kan fs forbindelse med databasen, lukker jeg forbindelsen og bner den igen. OnBnClickedClose : Frst sttes continueThread til 0, for at stoppe main trden i at kre videre, s bliver DeleteSms() kaldt ryde op der, efter en pause ser vi om der er bent for en seriel forbindelse, som vi s lukke hvis der er. Og det samme sker med database forbindelsen. Og til slut lukker serveren ned. OnBnClickedStart : Frst Skrives der i logvinduet at vi tjecker og indstter pinkode hvis ndvendigt, hvorefter vi kalder SetPin(), s flusher jeg data p den serielle port inden jeg fortstter. continueThread sttes til 1, keepaliveandread() kaldes, der skrives til logvinduet (Server phonenr read from db: + phonenr) og main trden bliver kaldt. readFrame : Er en lille worker funktion til at lse dataen p den serielle forbindelse, og putte det i en vector som derefter returneres. runthread : Her ser vi efter om continueThread er forskellig fra 0, hvis den er det kre vi MyMainThread(). MyMainThread : Dette er selve hoveddelen af programmet. Vi starter med at se om der er data i k p den serielle forbindele. Hvis der er data i k, lser vi det ind og ser om det er et + i teksten, da det vil indikere at vi har fet en modem komando ind. I tilfldet der er et plus splittes teksten op, i command og tekst, samt stter en bool til true for at markere vi har en plus komando til senere. Efter vi har splittet dataen, ser vi om teksten er ok eller error, da det er beskeder der kun skal sendes til logvinduet. Hvis plus boolen er true, ser vi om command indeholder cmti eller wind. Ved cmti: starter vi med at lede efter et , som kommer lige fr tallet der indikere hvilken sms det er der er kommet, nr vi har fundet et , stter vi smscount til alt til hjre for det og fjerener : fra enden. S generere vi at kommandoen og sender den af sted, og efter en lille pause kalder vi ReadSms(). Ved wind: denne del er sdan set mest lavet som en lille fail safe, hvis vi skulle vre s uheldige at f en ekstra besked ind fra modem startup. S hvis vi fr sdan en skriver vi til logvinduet Wind modtaget og teksten som vi modtog. Ellers skriver vi den tekst vi har modtaget til logvinduet. Vi tjecker ogs op p om ResetSms er net til 20, i hvilket tilflde vi kalder DeleteSms() og skriver til logvinduet Smser slettet da vi nede grnsen. Der tjeckes igen om p om continueThread er positiv, hvis dette er tilfldet kalder vi DBReadCommands og splitter dataen op, samt omregner commandid til en int som vi kan tjecke op p, i tilfldet at inten er over 1 er det et tegn p vi skal bruge det installationsid der er i containeren, ellers skal der nemlig sendes en config sms ud til alle. Derefter kalder vi sendconfig(). Efter config er blevet sendt holder vi en pause, og kalder CheckAcknowledges(), efterfulgt af endnu en pause. Til sidst i main trden ser vi om der er get 900 eller over sekunder, hvis dette er tilfldet kaldes keepaliveandread(). ReadSettings: Frst bnes filen Server-Settings, og derefter splittes den op i de forskellige variabler. Host, username, password, database til databasen. comport til den serielle og pincode til modemet. Og filen lukkes igen. ReadSms: Nr vi nr ind i readsms funktionen er at komandoen til at gre det allerede blevet sendt, s vi starter ned at holde en rimelig lang pause, for at sikre os hele smsens indhold er i den serielle k. Derefter lser vi den og skriver den p skrmen samt sender den videre til SmsSplit(). SendConfig : Frst ses der efter om commandid er 1 eller noget andet, hvis den er 1 kaldes inst = DBReadPhone(0); ellers kaldes inst = DBReadPhone(InstallationsID); som beskriver om det er en eller alle der skal have tilsendt en config sms. S fyldes telefonnummer, imeinummer og updaterate i strenge. S udregner vi tvrsummen af imei nummeret, som vi bruger s modtagerne kan se det er en config sms til den. S kaldes SendSmsHead() med telefonnummeret. S opbygges smsdataen, med det udregnede imei, servertelefonnummer og updaterate, som bruges nr vi kalder SendSmsData. Til sidst tjeckes op p om IDnr er forskellig fra 0, da vi s skal tilfje installationsid og telefonnummer til listen over hvem der har fet tilsendt en config sms. SendSmsData: Efter SendSmsHead har taget sig af delen med at taste at komandoen og indstte nummeret bliver der herfra sendt den data af sted der er blevet vedlagt i en vector, nr alt dataen er sendt ud til modemet med de sm pauser sendes komandoen 0x1A svarende til CTRL+Z, hvilket inikere for modemet at vi er frdige med at skrive smsen og den skal sendes af sted. Modemets svar skrives derefter til logvinduet. SendSmsHead: Her starter jeg p at sende smserne, frst bliver der skrevet en del af atkomandoen til modemet (at+cmgs=), derefter sender jeg det telefonnummer som blev sendt med da funktionen blev kaldt, og det hele afsluttes s med at stte et og et carriage return p, og holde en lille pause. SetPin : Her starter vi med at sende at+cpin? komandoen ud, og afventer svar. I tilfldet at modemet nsten lige er blevet startet op vlger vi at sge efter +cpin: i dataen fra den serielle port, da der sendes noget data vi ikke skal bruge lige som modemet starter. Hvis modemet returnere +cpin: sim pin lses der i Server-Settings filen og at komandoen genereres (at+cpin=2595). Dataen sendes af sted og vi starter en lykke der venter p at f wind: 11 tilbage, hvilket indikere at modemet er oppe og kre. Hvis modemet returnere +cpin: ready skriver vi No pincode needed og hopper hurtigt videre. Der er selvflgelig ogs muligheden at vi fr noget uventet data tilbage, hvilket vil resultere i der i logvinduet vil st Error in set pin part of the code. SmsSplit: Her modtages smsen som den sendes fra modemet, s jeg starter med at hente afsenderens nummer ud, og fjerner derefter alt fr den egentlige besked. Frst tjeckes beskeden for om den er conf ok, hvis dette er tilfldet gr vi videre til HandleAcknowledge med afsenderens nummer. Ellers sikre vi os at dataen er inden for de rammer vi har specificeret i vores interne sms protokol. Nr smsen er sluppet igennem dette tjeck bliver den delt op ved flere gange at blive sendt igennem Splitter(). S bliver installationsid p afsender telefonnummeret fundet, og det modtagede data puttes i logtabellen. Og der skrives i logvinduet Sms added to Log. Splitter : Splitteren har en referance til den data den skal arbejde med, og laver ikke det helt store, den sger efter : i teksten og returnere teksten til venstre for det, og stter den data referancen peger p til alt til hjre for :. StartSerial: Jeg starter med at lse i Server-Settings filen hvilken COM-port der skal bruges, og bner derefter den serielle forbindelse med en fastlagt baud rate p 1200. De 1200 blev valgt for at holde det ens p server og pic. tversum : Denne funktion bruges nr vi skal sende en config sms til installationerne, da vi har valg at de ikke skal reagere p smser hvis ikke den starter med tvrsummen af deres imei nr. s vi sender imei nummeret vi har fra databasen ned og ligger dem sammen tegne for tegn. Og returnere resultatet. writeFrame: Writeframe er lavet til at tage en vector med noget data, og skrive det til den serielle forbindelse, men nogle sm pauser s modemet ikke bliver forpustet, hvorefter det hele sluttes af med at sende en carriage return og endnu en lille pause. *yzI J ~
2
3
4
5 pqr}ykHIJTzogogo\oh KbhXOJQJh)^OJQJh Kbhv OJQJhOOJQJh KbhX.OJQJh KbhHKOJQJh KbhiNOJQJh Kbh[DOJQJ h h[Dh[Dh[DOJQJh#OJQJh Kbhv OJQJh KbhOJQJh KbhIOJQJh Kbh#OJQJh KbhEWOJQJ$ *J ~
6
7
8  qr}gdiNgd8gdiNgd[Dgd[Dgd#gdEWgdEW$a$gdEWJU FGT?NKgd<2gdiNgd8Ts EFGR?KNKꫠ꘍wllalah Kbhh /OJQJh Kbh(OJQJh KbhFOJQJh KbhHKOJQJh KbhOOJQJhOOJQJh Kbh6OJQJh Kbh OJQJ h<2h<2h<2hiNOJQJh KbhsOJQJh Kbh{;OJQJh Kbh5"OJQJh KbhiNOJQJh Kbh8]OJQJ$q r "T#$%%%%
9 '')))*++,,//\2g2y223)3N3Z3ti^V^V^hQ0OJQJh Kbh OJQJh Kbho>OJQJh KbhOJQJh Kbh)OJQJh Kbh2OJQJh Kbh OJQJh Kbh 7lOJQJh KbhiNOJQJ hOhOhOhvOJQJh KbhvOJQJh Kbh:>OJQJh Kbh8OJQJh Kbhh /OJQJh Kbhk6sOJQJ !""$%%%%
10 '')*++,,-.)///i00\2g2gd!Sgd8gdOgdOgdiNg2N3[364@4e5q5e6f6gd2gd8gdiNZ344@4e5q5<6d6e6f6h OJQJhHKOJQJh KbhOJQJh Kbh2OJQJh KbhiNOJQJh KbhHKOJQJ21h:pC. A!n"n#$% j 666666666vvvvvvvvv666666>6666666666666666666666666666666666666666666666666hH6666666666666666666666666666666666666666666666666666666666666666662 0@P`p2( 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p8XV~ OJPJQJ_HmHnHsHtHJ`J X.Normal dCJ_HaJmHsHtH n@n EW Overskrift 1$$@&'5B*CJOJPJQJ\^JaJph6_n@n 8 Overskrift 2$$@&'5B*CJOJPJQJ\^JaJphONA N Standardskrifttype i afsnitViV 0Tabel - Normal4
11 l4a 6k 6 0Ingen oversigt h>@h EWTiteld,POm$)@B*CJ4KHOJPJQJ^JaJ4ph6]VV EW
12 Titel Tegn)@B*CJ4KHOJPJQJ^JaJ4ph6]bb EWOverskrift 1 Tegn'5B*CJOJPJQJ\^JaJph6_b!b 8Overskrift 2 Tegn'5B*CJOJPJQJ\^JaJphOPK![Content_Types].xmlj0Eжr(΢Iw},-j4 wP-t#bΙ{UTU^hd}㨫)*1P' ^W0)T9<l#$yi};~@(Hu* Dנz/0ǰ $ X3aZ,D0j~3߶b~i>3\`?/[G\!-Rk.sԻ..a濭?PK!֧6 _rels/.relsj0 }Q%v/C/}(h"O
13 = C?hv=Ʌ%[xp{۵_Pѣ<1H0ORBdJE4b$q_6LR7`0̞O,En7Lib/SeеPK!kytheme/theme/themeManager.xml M
14 @}w7c(EbˮCAǠҟ7՛K Y, e.|,H,lxɴIsQ}#Ր ֵ+!,^$j=GW)E+&
15 8PK!%FՀNtheme/theme/theme1.xmlYMoE#F{oc'vGuرHS-q;ޝfvg53NjHH8PTj%.H 3މ$i#ZA}H1^3tH<i{5M¶wkؿ!p`Dz6*^W D)/-IS11V(¥@#Zmu)4Pc`ŅJo#gc?QR/L 4c 68k.R~4$
16 ^xKWzF]|2 8X62E8*֕05z^gRKgV<K uw֬5\|ʜέNleXd6k沃7 onwůWZ o@Zϸ1gە52 Pd1T\k1EȰ RӔ9HPuKo/疴,$}AS>L1Ìg?|z|d9T8 T/G?|xY㧿E5g?MGeD 3^q5'#q>aib3 %NR"}sYGq=x[@^uDbh(v^ѲJnNZqVĉooB1G=C;~@Huw(uK}%+t.ґM3mC\U6CFΪ".
17 凄9n'
18 U,8fe*Rr0~ד
19 "Q/ RV|$Rw0tʰi"U<o`-~ЍpVa4(F{\Uw[!–Mӻ-:*DKhNiOQ6.C|ͣz[&IU}.l].-<Ik.6Yo;9^8!)c5e4C}"â3gCRf}$h캧2cJr ;\[aHWX$V<+z9?lng.hE38+S0UյRgV7VH+LΛ7aA0WtE3h۽7EHF8 Y1 bn w*byx$پ,@\׉R(=Q,)'KQk5qpq
20 Qz,k!_ Y4[an}`B-,#U,ђMpE`3XYdxcZВҊ}Z)("QpFl"1_*P W#G6]:fivK4d 7u\`Jmo) 23S~7+#]mq#](08w
21 A[s)k8}"Aa?R dڒɾSճ˲d#Q%uejC†C&Y0>g4
22 S7{{ F} 4 +vUKol~1yUVU8Vk;֜\9ŰX D) ?*|FL u"A3d]dm2iVֵ褽o<rO8[kvxpsj"y][jq~11?hu⣻-ߟ0%M2oJ90uo%ҍPK! ѐ'theme/theme/_rels/themeManager.xml.relsM
23 0wooӺ&݈Э5 6?$Q ,.aic21h:qm@RN;d`o7gK(M&$R(.1r'JЊT8V"AȻHu}|$b{P8g/]QAsم(#L[PK-![Content_Types].xmlPK-!֧6 +_rels/.relsPK-!kytheme/theme/themeManager.xmlPK-!%FՀNtheme/theme/theme1.xmlPK-! ѐ' theme/theme/_rels/themeManager.xml.relsPK]
24 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
25 <a:clrMap xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" bg1="lt1" tx1="dk1" bg2="lt2" tx2="dk2" accent1="accent1" accent2="accent2" accent3="accent3" accent4="accent4" accent5="accent5" accent6="accent6" hlink="hlink" folHlink="folHlink"/>f. HTZ3f6 #g2f6!"|H # AA@0( 
26 B
27 S  ?kq4=w{CL>MLWco} 7B  8 ? P ^ l n 
28 #
29 /
30 8
31
32
33
34
35
36
37 - 2 8 > J S |   7 ? G O X a e s      ah %.2&agnu  ',0GP`f|/;?K18pw ?IU[ov4<Zb_f
38 !OXjt &/7:FLci
39 $Sd  /ow
40 .7eilw $ . X \ !!%!@!K!W!^!h!l!!!!!!!"":"C"""""""""###$#g#o##########$$ $$$$$$$$$$$!%(%d%h%n%t%%%%%%%%%&&"&+&H&N&&&&&&&&&&&&&&'' ''''''''''''(o(v((((() )W)\)v){)))*****=*G*M*R*g*q*y**+)+N+Y+u++++0,3,6,=,k,q,,,,,--e-o-q-{-----<.D.E.K.h.  kp
41  GR?M(*_c
42 $$%%&&2(9(\*f*6,?,O-X-h.: vQ0
43 e:4 X.h /o>XBFHK!S)^ Kb#ic 7lk6sp6#hV?Dv s?MA[D{;C:>RdXIiN@ v <28] %3:5O2)gEW 85"(:f.h.@f.H@UnknownG* Times New Roman5Symbol3. * Arial7.{ @Calibri7K@CambriaA BCambria Math"q%R&R&'U'U!n20O.O.2HP $PEW2!xxkevinkevinOh+'0h 
44 $ 0 <HPX`kevinNormalkevin6Microsoft Office Word@V@6r:@;'՜.+,0 hp  privatUO.  Titel
45  !"#$&'()*+,-./0123456789;<=>?@ACDEFGHILRoot Entry Fc;N1Table%!)WordDocument4HSummaryInformation(:DocumentSummaryInformation8BCompObj{
46  F)Microsoft Office Word 97-2003-dokumenter
47 MSWordDocWord.Document.89q

Properties

Name Value
svn:mime-type application/octet-stream

  ViewVC Help
Powered by ViewVC 1.1.20