View difference between Paste ID: r8wWdqwd and XGkqs2yG
SHOW: | | - or go back to the newest paste.
1
using System;
2
using System.Collections.Generic;
3
using System.Linq;
4
using System.Text;
5
using System.Threading;
6
using System.Windows.Threading;
7
using NguyenThanhTung;
8
9
namespace ThuPhiGiaoThongLocalClient
10
{
11
    public class AppController : CoreBase
12
    {
13
        private AppController()
14
        {
15
            init();
16
        }
17
        private static AppController _share = null;
18
        /// <summary>
19
        /// Singleton : chỉ cho phép tạo một đối tượng
20
        /// </summary>
21
        /// <returns></returns>
22
        public static AppController share()
23
        {
24
            if (_share == null)
25
            {
26
                _share = new AppController();
27
            }
28
            return _share;
29
        }
30-
        public TagReader tagReader {
30+
31-
            get {
31+
32
33
        protected TagReader _tagReader = null;
34
        public TagReader tagReader
35
        {
36
            get
37-
        public LanClient lanClient {
37+
38-
            get {
38+
39
            }
40
        }
41
42
        protected LanClient _lanClient = new LanClient();
43-
        protected Customer defaultCustomer = new Customer() { 
43+
        public LanClient lanClient
44
        {
45
            get
46-
        protected Vehicle defaultVehicle = new Vehicle() { 
46+
47
                return _lanClient;
48
            }
49
        }
50
51-
        protected CustomerLog defaultCustomerRecent = new CustomerLog() {
51+
        protected Customer defaultCustomer = new Customer()
52
        {
53
            name = "N/A"
54-
        protected Tag defaultTag = new Tag() { 
54+
55
        protected Vehicle defaultVehicle = new Vehicle()
56
        {
57
            name = "N/A",
58
            vehicleTypeName = "N/A",
59
            id_number = "N/A"
60
        };
61
        protected CustomerLog defaultCustomerRecent = new CustomerLog()
62
        {
63
            userName = "N/A"
64
        };
65-
        public Customer currentCustomer { 
65+
        protected Tag defaultTag = new Tag()
66-
            get {
66+
67
            code = "N/A"
68
        };
69
        protected long defaultPriceToPay = 0;
70-
            } 
70+
71-
            set {
71+
72
        protected Vehicle _currentVehicle = null;
73
        protected CustomerLog _currentCustomerRecent = null;
74-
            } 
74+
75
        protected long _currentPriceToPay = 0;
76-
        public Vehicle currentVehicle { 
76+
77-
            get {
77+
        public Customer currentCustomer
78
        {
79
            get
80
            {
81-
            } 
81+
82-
            set {
82+
83
                return _currentCustomer;
84
            }
85-
            } 
85+
            set
86
            {
87-
        public CustomerLog currentCustomerRecent { 
87+
88-
            get {
88+
89
            }
90
        }
91
        public Vehicle currentVehicle
92-
            } 
92+
93-
            set {
93+
            get
94
            {
95
                if (_currentVehicle == null)
96-
            } 
96+
97
                return _currentVehicle;
98-
        public Tag currentTag {
98+
99-
            get {
99+
            set
100
            {
101
                _currentVehicle = value;
102
                notifyPropertyChanged("currentVehicle");
103
            }
104-
            set {
104+
105
        public CustomerLog currentCustomerRecent
106
        {
107
            get
108
            {
109-
        public long currentPriceToPay {
109+
110-
            get {
110+
111
                return _currentCustomerRecent;
112
            }
113-
            set {
113+
            set
114
            {
115
                _currentCustomerRecent = value;
116
                notifyPropertyChanged("currentCustomerRecent");
117
            }
118
        }
119
        public Tag currentTag
120
        {
121
            get
122
            {
123-
        public int deviceType {
123+
124-
            get {
124+
125
                return _currentTag;
126
            }
127-
            set {
127+
            set
128
            {
129
                _currentTag = value;
130
                notifyPropertyChanged("currentTag");
131
            }
132
        }
133-
        public string deviceTypeText { get {
133+
        public long currentPriceToPay
134-
            switch (deviceType)
134+
135
            get
136-
                case 1:
136+
137-
                    return "Pass Gate";
137+
138-
                case 2:
138+
139-
                    return "Enter Gate";
139+
            set
140-
                case 3:
140+
141-
                    return "Exit Gate";
141+
142-
                default:
142+
143-
                    return "N/A";
143+
144
        }
145-
        }}
145+
146
        public Device device { get; set; }
147
        public List<Device> devices { get; set; }
148-
        public int totalVehicleCount {
148+
149-
            get {
149+
150
        public int deviceType
151
        {
152-
            set {
152+
            get
153
            {
154
                return _deviceType;
155
            }
156
            set
157
            {
158
                _deviceType = value;
159-
        public long totalFee {
159+
160-
            get {
160+
161
            }
162
        }
163-
            set {
163+
        public string deviceTypeText
164
        {
165
            get
166
            {
167
                switch (deviceType)
168
                {
169
                    case 1:
170-
        public List<VehicleType> vehicleTypes {
170+
                        return "Pass Gate";
171-
            get {
171+
                    case 2:
172
                        return "Enter Gate";
173
                    case 3:
174-
                    Api.getVehicleTypeList(delegate(List<VehicleType> __vehicleTypes) {
174+
                        return "Exit Gate";
175
                    default:
176
                        return "N/A";
177
                }
178
            }
179
        }
180-
            set {
180+
181
        protected int _totalVehicleCount = 0;
182
        public int totalVehicleCount
183
        {
184
            get
185
            {
186
                return _totalVehicleCount;
187-
        public bool autoMakeTransaction {
187+
188-
            get {
188+
            set
189
            {
190
                _totalVehicleCount = value;
191-
            set {
191+
192
            }
193
        }
194
195
        protected long _totalFee = 0;
196
        public long totalFee
197
        {
198
            get
199
            {
200
                return _totalFee;
201
            }
202
            set
203
            {
204
                _totalFee = value;
205
                notifyPropertyChanged("totalFee");
206
            }
207
        }
208
209
        protected List<VehicleType> _vehicleTypes = null;
210
        public List<VehicleType> vehicleTypes
211
        {
212
            get
213-
            Callback callback = delegate {
213+
214
                if (_vehicleTypes == null)
215
                {
216
                    Api.getVehicleTypeList(delegate(List<VehicleType> __vehicleTypes)
217
                    {
218
                        vehicleTypes = __vehicleTypes;
219
                    }, Api.defaultErrorCallback);
220-
            }, delegate(string errorMessage) {
220+
221
                return _vehicleTypes;
222
            }
223
            set
224
            {
225
                _vehicleTypes = value;
226
                notifyPropertyChanged("vehicleTypes");
227
            }
228
        }
229
230
        protected bool _autoMakeTransaction = true;
231
        public bool autoMakeTransaction
232
        {
233
            get
234
            {
235
                return _autoMakeTransaction;
236
            }
237
            set
238
            {
239
                _autoMakeTransaction = value;
240
                notifyPropertyChanged("autoMakeTransaction");
241
            }
242
        }
243
244
        protected void init()
245
        {
246
            _lanClient = new LanClient();
247
            totalVehicleCount = 0;
248
            totalFee = 0;
249
        }
250
251
        public bool connectToLocalServer(string host, int port)
252
        {
253
            Api.setClient(lanClient);
254-
                window.Dispatcher.BeginInvoke(new Action(delegate {
254+
255
            return true;
256
        }
257
258
        public void disconnectToLocalServer()
259
        {
260-
            if (deviceType == (int)DeviceType.Enter)
260+
            Callback callback = delegate
261
            {
262
                _lanClient.disconnect();
263
                _lanClient = new LanClient();
264
            };
265-
                    totalVehicleCount++;
265+
266-
                    GateController.open();
266+
267
                callback();
268
            }, delegate(string errorMessage)
269
            {
270
                callback();
271
            });
272
        }
273
274
        public bool startTagReader()
275
        {
276
            _tagReader = new TagReader();
277
            _tagReader.init();
278
            return true;
279
        }
280-
                        totalVehicleCount++;
280+
281-
                        totalFee += currentPriceToPay;
281+
282-
                        GateController.open();
282+
283
        public event Callback<string> onLogged;
284
285
        public void log(string message)
286
        {
287
            if (onLogged != null)
288
                onLogged(message);
289
        }
290
291
        public void handleCustomerInfo(System.Windows.Window window)
292
        {
293
            //kiểm tra xem có khách chưa
294
            if (currentCustomer == null)
295
            {
296
                log("Cannot identify customer");
297
                return;
298
            }
299
            log("customer identified");
300
            // nếu có khách rồi thì gửi yêu cầu tạo giao dịch
301
            bool result = Util.confirm("Make transactions?", "Confirm");
302
            //nếu result = false ==> tạo giao dịch thất bại ==> thoát
303
            if (!result)
304
            {
305
                window.Dispatcher.BeginInvoke(new Action(delegate
306
                {
307
                    new ManualTransactionWindow().ShowDialog();
308
                }));
309
                return; //thoát
310
            }
311
            /*Nếu xe ở trạng thái enter, thì tiến hành gửi thông báo thông tin của device : device_id và customer_id
312
             Hàm này truyền vào id và 2 method callback success và error:
313
             * Nếu request thành công thì thực hiện hàm callback success, và ngược lại
314
             * Ở trạng thái này thì không mất tiền giao dịch
315
             */
316
            
317
            if (deviceType == (int)DeviceType.Enter) //Pass = 1, Enter = 2, Exit = 3, chưa hiểu enter và pass để định nghĩa cái gì
318
            {
319
                Api.sendNoticeVehicleEnter(currentCustomer.id, delegate()
320
                {
321
                    //call back success
322
                    log("Customer's action saved");
323
                    totalVehicleCount++;   // đêm số xe lưu thông
324
                    GateController.open();  // mở cổng
325
                }, delegate(string errorMessage)
326
                {
327
                    //callback error
328
                    Util.alert(errorMessage);
329
                });
330
            }
331
            else
332
            {
333
                /*Nếu không ở trạng thái enter thì tiến hành thực hiện giao dịch
334
                 Nếu số tiền hiện có của xe lớn hơn số tiền phải trả thì thực hiện thanh toán, không thì hiển thị thông báo không đủ tiền
335
                 * Hàm tạo giao dịch truyền vào id và 2 method callback success và error:
336
                 * Nếu request thành công thì thực hiện hàm callback success, và ngược lại
337
                 * ở trạng thái này thì phải mất phí giao dịch
338
                 */
339
                // make transaction
340
                if (currentVehicle.money >= currentPriceToPay)
341
                {
342
                    Api.makeTransaction(currentCustomer.id, delegate(long transactionId)
343
                    {
344
                        //callback success
345
                        log("Transaction success");
346
                        totalVehicleCount++; // đếm số lượng xe đã lưu thông
347
                        totalFee += currentPriceToPay;  //tính số tiền thu được của xe này
348
                        GateController.open();         // tiến hành mở cổng cho xe lưu thông
349
                    }, delegate(string errorMessage)
350
                    {
351
                        //callback error
352
                        Util.alert(errorMessage);
353
                        log("Transaction error");
354
                    });
355
                }
356
                else
357
                {
358
                    log("Customer's account is not enough for payment. Make transaction manually");
359
                }
360
            }
361
        }
362
    }
363
}