5 using System
.Net
.Sockets
;
6 using System
.Threading
;
7 using System
.Security
.Cryptography
;
8 using System
.Collections
.Generic
;
16 public class PdaInstans
18 public enum StateType { UNCONNECTED, UNAUTHENTICATED, AUTHENTICATED }
;
20 private TcpClient tcpClient
;
21 private NetworkStream ns
;
23 private Thread PdaInsP
;
25 private StateType state
= StateType
.UNAUTHENTICATED
;
27 private static volatile List
<Hus
> HusData
;
28 public volatile Hus hus
;
30 public PdaInstans (TcpClient tc
, ref List
<Hus
> hd
)
37 log ("Starter tråd..");
38 PdaInsP
= new Thread (new ThreadStart (PdaInstansP
));
43 private void PdaInstansP ()
45 /* TODO: Takle kommunikasjon frå Pda
49 * 3. Oppretthold kontakt
50 * 4. Lukk og slett frå HusData liste om kontakt er broten (Event)
57 TCPKomm
.TCPMelding tm
;
60 tm
= TCPKomm
.MottaMelding (ns
);
62 } catch (Exception e
) {
63 log ("Tilkobling brutt: " + e
.Message
);
67 /* Skriv DEBUG til skjerm uansett tilstand */
68 if (tm
.type
== TCPKomm
.Type
.DEBUG
) {
69 TCPKomm
.Debug d
= (TCPKomm
.Debug
)Serialiser
.Deserialize(tm
.data
, typeof(TCPKomm
.Debug
));
70 log ("[DEBUG] " + d
.msg
);
76 case StateType
.UNAUTHENTICATED
:
77 if (tm
.type
== TCPKomm
.Type
.AuthQuery
) {
78 TCPKomm
.AuthQuery aq
= (TCPKomm
.AuthQuery
) Serialiser
.Deserialize (tm
.data
, typeof (TCPKomm
.AuthQuery
));
79 foreach (Hus h
in HusData
) {
80 if (h
.Kundenr
== aq
.kundenr
) {
81 if (h
.CheckPassword (aq
.passord
)) {
83 state
= StateType
.AUTHENTICATED
;
89 TCPKomm
.TCPMelding tr
;
90 tr
.type
= TCPKomm
.Type
.AuthResponse
;
91 TCPKomm
.AuthResponse ar
;
92 if (state
== StateType
.AUTHENTICATED
) ar
.Accepted
= true;
93 else ar
.Accepted
= false;
94 tr
.data
= Serialiser
.Serialize (ar
);
97 TCPKomm
.SendMelding (ns
, tr
);
99 log ("Autentikasjonsforsøk, godkjent: " + ar
.Accepted
.ToString ());
100 run
= ar
.Accepted
; // Lukk dersom ikkje godkjent.
103 TCPKomm
.TCPMelding res
= new TCPKomm
.TCPMelding ();
104 res
.type
= TCPKomm
.Type
.Error
;
105 TCPKomm
.Error err
= new TCPKomm
.Error();
106 err
.et
= TCPKomm
.ErrorType
.UnexpectedData
;
107 res
.data
= Serialiser
.Serialize(err
);
108 TCPKomm
.SendMelding (ns
, res
);
113 case StateType
.AUTHENTICATED
:
117 case TCPKomm
.Type
.PdaQuery
:
118 TCPKomm
.TCPMelding tres
;
119 tres
.type
= TCPKomm
.Type
.PdaData
;
122 pd
.adresse
= hus
.Adresse
;
123 pd
.alarm
= hus
.TempAlarm
;
124 pd
.effekt
= hus
.Effekt
;
126 pd
.reduser
= Hus
.Reduser
;
128 tres
.data
= Serialiser
.Serialize (pd
);
130 TCPKomm
.SendMelding (ns
, tres
);
134 case TCPKomm
.Type
.Close
:
135 TCPKomm
.Close cm
= (TCPKomm
.Close
) Serialiser
.Deserialize (tm
.data
, typeof (TCPKomm
.Close
));
136 log ("Lukker: " + cm
.msg
);
141 /* Alle andre er feile */
142 TCPKomm
.TCPMelding tcl
;
143 tcl
.type
= TCPKomm
.Type
.Close
;
145 c
.msg
= "Feil data.";
146 tcl
.data
= Serialiser
.Serialize (c
);
149 TCPKomm
.SendMelding (ns
, tcl
);
165 public void Shutdown ()
168 TCPKomm
.TCPMelding tr
;
169 tr
.type
= TCPKomm
.Type
.Close
;
171 c
.msg
= ("Shutting down.");
172 tr
.data
= Serialiser
.Serialize (c
);
174 TCPKomm
.SendMelding (ns
, tr
);
181 public StateType State
{
182 get { return state; }
185 private void log (String s
) {
186 Console
.WriteLine ("[PdaInstans] [" + state
.ToString () + "] " + s
);