/[H8]/trunk/test-server/TerminalSocket.cpp
ViewVC logotype

Contents of /trunk/test-server/TerminalSocket.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 110 - (show annotations) (download)
Mon May 28 14:41:33 2007 UTC (17 years ago) by torben
File size: 3513 byte(s)
Implement a test-server (maybe)
1 #include "StdAfx.h"
2 #include ".\terminalsocket.h"
3
4 TerminalSocket::TerminalSocket(void)
5 {
6 m_total = 0.0;
7 }
8
9 TerminalSocket::~TerminalSocket(void)
10 {
11 }
12
13 void TerminalSocket::OnReceive(int nErrorCode)
14 {
15 int len = this->Receive(m_buffer,1024);
16
17 switch (m_buffer[0])
18 {
19 case 0:
20 HelloPackage();
21 break;
22 case 1:
23 SalesDescriptionPackage();
24 break;
25 case 2:
26 RequestTotalPackage();
27 break;
28 case 3:
29 RequestChangePackage();
30 break;
31 case 4:
32 AbortLastPackage();
33 break;
34 case 5:
35 AbortSessionPackage();
36 break;
37 case 6:
38 GoodByePackage();
39 break;
40 default:
41 m_message.Format("Unknown request ID: %d", m_buffer[0]);
42 }
43
44 dataRecieved.emit();
45 }
46
47 //Id 0
48 void TerminalSocket::HelloPackage()
49 {
50 m_termid = m_buffer[1];
51 char ack = 0x01;
52 Send(&ack,1);
53
54 m_message.Format("Hello (0x00) recieved with terminalID=%d", m_termid);
55 }
56
57 //Id 1
58 void TerminalSocket::SalesDescriptionPackage()
59 {
60 CString barcode;
61 char ack;
62 char strlen = m_buffer[2];
63
64 unsigned tmpprice;
65 for (int i=0; i<strlen; i++)
66 barcode += m_buffer[i+3];
67
68 SalesItemLine litem;
69 litem.item = FetchItemInfo(barcode);
70
71 if (litem.item.isOk)
72 {
73 litem.count = m_buffer[1]; // Gem antallet
74 m_items.push_back(litem);
75 tmpprice = (unsigned) litem.item.price * 100;
76
77 //generate reply
78 m_buffer[0] = 0x01; //Ack;
79 m_buffer[1] = tmpprice<<24;
80 m_buffer[2] = tmpprice<<16;
81 m_buffer[3] = tmpprice<<8;
82 m_buffer[4] = tmpprice;
83 m_buffer[5] = litem.item.description.GetLength();
84
85 for (i=0; i<m_buffer[5]; i++)
86 m_buffer[i+6] = litem.item.description.GetAt(i);
87
88 Send(m_buffer, litem.item.description.GetLength()+6);
89
90 m_message.Format("Requested barcode %s x %d (%s)", barcode, litem.count, litem.item.description);
91 }
92 else
93 {
94 ack = 0;
95 Send(&ack,1);
96 m_message = "Unknown barcode : ";
97 m_message += barcode;
98 }
99
100 }
101
102 //Id 2
103 void TerminalSocket::RequestTotalPackage()
104 {
105 for (unsigned int i=0; i<m_items.size(); i++)
106 {
107 m_total += m_items[i].item.price * m_items[i].count;
108 }
109
110 unsigned tmpprice = (unsigned) m_total*100;
111 m_buffer[0] = 0x01; //ack
112 m_buffer[1] = tmpprice<<24;
113 m_buffer[2] = tmpprice<<16;
114 m_buffer[3] = tmpprice<<8;
115 m_buffer[4] = tmpprice;
116
117 Send(m_buffer, 5);
118 }
119
120 //Id 3
121 void TerminalSocket::RequestChangePackage()
122 {
123 unsigned amount = m_buffer[1]>>24 + m_buffer[2]>>16 + m_buffer[3]>>8 + m_buffer[4];
124 unsigned tmpprice = (unsigned) m_total;
125 unsigned change = amount - tmpprice;
126
127 m_buffer[0] = 0x01; //ack
128 m_buffer[1] = change<<24;
129 m_buffer[2] = change<<16;
130 m_buffer[3] = change<<8;
131 m_buffer[4] = change;
132
133 Send(m_buffer, 5);
134
135
136 }
137
138 //Id 4
139 void TerminalSocket::AbortLastPackage()
140 {
141 char ack = 0x01;
142 m_items.pop_back();
143 Send(&ack,1);
144 }
145
146 //Id 5
147 void TerminalSocket::AbortSessionPackage()
148 {
149 char ack = 0x01;
150 m_items.clear();
151 Send(&ack,1);
152 }
153
154 //Id 6
155 void TerminalSocket::GoodByePackage()
156 {
157 char ack = 0x01;
158 Send(&ack,1);
159 Sleep(1);
160 Close();
161 m_message = "Goodbye (0x06) recieved";
162 m_items.clear();
163 m_total = 0.0;
164 }
165
166
167 SalesItem TerminalSocket::FetchItemInfo(const CString& barcode)
168 {
169 SalesItem item;
170 item.isOk = false;
171
172 if (barcode == "12345670")
173 {
174 item.isOk = true;
175 item.barcode = barcode;
176 item.description = "ĝl";
177 item.price = 7.65;
178 }
179 else if (barcode == "1234567000992")
180 {
181 item.isOk = true;
182 item.barcode = barcode;
183 item.description = "Whisky";
184 item.price = 119.00;
185 }
186 return item;
187 }

  ViewVC Help
Powered by ViewVC 1.1.20