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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 110 - (hide 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 torben 110 #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