From b3ffefbd35f2cb7d03d4f84e1d648d290ce30d92 Mon Sep 17 00:00:00 2001 From: Apress Date: Tue, 11 Oct 2016 00:52:48 +0100 Subject: [PATCH] First commit --- 3321.pdf | Bin 0 -> 423721 bytes 9781590597903.jpg | Bin 0 -> 10887 bytes Chapter01(Socket)/Part 0/Client/Client.sln | 20 + Chapter01(Socket)/Part 0/Client/Client.suo | Bin 0 -> 15360 bytes .../Part 0/Client/Client/Client.vbproj | 92 + .../Part 0/Client/Client/Module1.vb | 18 + .../Client/My Project/Application.Designer.vb | 13 + .../Client/My Project/Application.myapp | 10 + .../Client/Client/My Project/AssemblyInfo.vb | 35 + .../Client/My Project/Resources.Designer.vb | 62 + .../Client/Client/My Project/Resources.resx | 117 + .../Client/My Project/Settings.Designer.vb | 73 + .../Client/My Project/Settings.settings | 7 + .../Part 0/Client/Client/bin/Debug/Client.exe | Bin 0 -> 24576 bytes .../Part 0/Client/Client/bin/Debug/Client.pdb | Bin 0 -> 40448 bytes .../Client/Client/bin/Debug/Client.vshost.exe | Bin 0 -> 5632 bytes .../Part 0/Client/Client/bin/Debug/Client.xml | 11 + .../Client/obj/Client.vbproj.FileList.txt | 9 + .../obj/Debug/Client.Resources.resources | Bin 0 -> 180 bytes .../Part 0/Client/Client/obj/Debug/Client.exe | Bin 0 -> 24576 bytes .../Part 0/Client/Client/obj/Debug/Client.pdb | Bin 0 -> 40448 bytes .../Client.vbproj.GenerateResource.Cache | Bin 0 -> 784 bytes .../Part 0/Client/Client/obj/Debug/Client.xml | 11 + .../Part 0/Client_CS/Client_CS.sln | 20 + .../Part 0/Client_CS/Client_CS.suo | Bin 0 -> 12800 bytes .../Client_CS/Client_CS/Client_CS.csproj | 47 + .../Part 0/Client_CS/Client_CS/Program.cs | 20 + .../Client_CS/Properties/AssemblyInfo.cs | 33 + .../Client_CS/bin/Debug/Client_CS.exe | Bin 0 -> 16384 bytes .../Client_CS/bin/Debug/Client_CS.pdb | Bin 0 -> 11776 bytes .../Client_CS/bin/Debug/Client_CS.vshost.exe | Bin 0 -> 5632 bytes .../obj/Client_CS.csproj.FileList.txt | 5 + .../Client_CS/obj/Debug/Client_CS.exe | Bin 0 -> 16384 bytes .../Client_CS/obj/Debug/Client_CS.pdb | Bin 0 -> 11776 bytes Chapter01(Socket)/Part 0/Server/Server.sln | 20 + Chapter01(Socket)/Part 0/Server/Server.suo | Bin 0 -> 17408 bytes .../Part 0/Server/Server/Module1.vb | 35 + .../Server/My Project/Application.Designer.vb | 13 + .../Server/My Project/Application.myapp | 10 + .../Server/Server/My Project/AssemblyInfo.vb | 35 + .../Server/My Project/Resources.Designer.vb | 62 + .../Server/Server/My Project/Resources.resx | 117 + .../Server/My Project/Settings.Designer.vb | 73 + .../Server/My Project/Settings.settings | 7 + .../Part 0/Server/Server/Server.vbproj | 92 + .../Part 0/Server/Server/bin/Debug/Server.exe | Bin 0 -> 24576 bytes .../Part 0/Server/Server/bin/Debug/Server.pdb | Bin 0 -> 40448 bytes .../Server/Server/bin/Debug/Server.vshost.exe | Bin 0 -> 5632 bytes .../Part 0/Server/Server/bin/Debug/Server.xml | 11 + .../obj/Debug/Server.Resources.resources | Bin 0 -> 180 bytes .../Part 0/Server/Server/obj/Debug/Server.exe | Bin 0 -> 24576 bytes .../Part 0/Server/Server/obj/Debug/Server.pdb | Bin 0 -> 40448 bytes .../Server.vbproj.GenerateResource.Cache | Bin 0 -> 784 bytes .../Part 0/Server/Server/obj/Debug/Server.xml | 11 + .../Server/obj/Server.vbproj.FileList.txt | 9 + .../Part 0/Server_CS/Server_CS.sln | 20 + .../Part 0/Server_CS/Server_CS.suo | Bin 0 -> 11776 bytes .../Part 0/Server_CS/Server_CS/Program.cs | 24 + .../Server_CS/Properties/AssemblyInfo.cs | 33 + .../Server_CS/Server_CS/Server_CS.csproj | 47 + .../Server_CS/bin/Debug/Server_CS.exe | Bin 0 -> 16384 bytes .../Server_CS/bin/Debug/Server_CS.pdb | Bin 0 -> 11776 bytes .../Server_CS/bin/Debug/Server_CS.vshost.exe | Bin 0 -> 5632 bytes .../Server_CS/obj/Debug/Server_CS.exe | Bin 0 -> 16384 bytes .../Server_CS/obj/Debug/Server_CS.pdb | Bin 0 -> 11776 bytes .../obj/Server_CS.csproj.FileList.txt | 5 + .../Part 1/WinClient/WinClient.sln | 20 + .../Part 1/WinClient/WinClient.suo | Bin 0 -> 18432 bytes .../WinClient/WinClient/Form1.Designer.vb | 113 + .../Part 1/WinClient/WinClient/Form1.resx | 120 + .../Part 1/WinClient/WinClient/Form1.vb | 101 + .../WinClient/My Project/AssemblyInfo.vb | 35 + .../WinClient/My Project/MyApplication.myapp | 10 + .../WinClient/My Project/MyApplication.vb | 23 + .../WinClient/My Project/MyEvents.vb | 15 + .../WinClient/My Project/MyResources.resx | 117 + .../WinClient/My Project/MyResources.vb | 62 + .../WinClient/My Project/MySettings.settings | 7 + .../WinClient/My Project/MySettings.vb | 38 + .../WinClient/WinClient/WinClient.vbproj | 94 + .../WinClient/WinClient/WinClient.vbproj.user | 7 + .../Part 1/WinClient/WinClient/app.config | 25 + .../WinClient/WinClient/bin/WinClient.exe | Bin 0 -> 32768 bytes .../WinClient/bin/WinClient.exe.config | 25 + .../WinClient/WinClient/bin/WinClient.pdb | Bin 0 -> 58880 bytes .../WinClient/bin/WinClient.vshost.exe | Bin 0 -> 5632 bytes .../WinClient/bin/WinClient.vshost.exe.config | 25 + .../WinClient/WinClient/bin/WinClient.xml | 11 + .../TempPE/My Project.MyResources.vb.dll | Bin 0 -> 7168 bytes .../obj/Release/WinClient.Form1.resources | Bin 0 -> 180 bytes .../Release/WinClient.MyResources.resources | Bin 0 -> 180 bytes .../WinClient/obj/Release/WinClient.exe | Bin 0 -> 32768 bytes .../WinClient/obj/Release/WinClient.pdb | Bin 0 -> 58880 bytes .../WinClient.vbproj.GenerateResource.Cache | Bin 0 -> 844 bytes .../WinClient/obj/Release/WinClient.xml | 11 + .../obj/WinClient.vbproj.FileList.txt | 11 + .../Part 1/WinClient_CS/WinClient_CS.sln | 20 + .../Part 1/WinClient_CS/WinClient_CS.suo | Bin 0 -> 18944 bytes .../WinClient_CS/Form1.Designer.cs | 121 + .../Part 1/WinClient_CS/WinClient_CS/Form1.cs | 122 + .../WinClient_CS/WinClient_CS/Form1.resx | 120 + .../WinClient_CS/WinClient_CS/Program.cs | 20 + .../WinClient_CS/Properties/AssemblyInfo.cs | 33 + .../Properties/Resources.Designer.cs | 71 + .../WinClient_CS/Properties/Resources.resx | 117 + .../Properties/Settings.Designer.cs | 30 + .../WinClient_CS/Properties/Settings.settings | 7 + .../WinClient_CS/WinClient_CS.csproj | 78 + .../WinClient_CS/bin/Debug/WinClient_CS.exe | Bin 0 -> 24576 bytes .../WinClient_CS/bin/Debug/WinClient_CS.pdb | Bin 0 -> 24064 bytes .../bin/Debug/WinClient_CS.vshost.exe | Bin 0 -> 5632 bytes .../obj/Debug/WinClient_CS.Form1.resources | Bin 0 -> 180 bytes ...inClient_CS.Properties.Resources.resources | Bin 0 -> 180 bytes ...WinClient_CS.csproj.GenerateResource.Cache | Bin 0 -> 842 bytes .../WinClient_CS/obj/Debug/WinClient_CS.exe | Bin 0 -> 24576 bytes .../WinClient_CS/obj/Debug/WinClient_CS.pdb | Bin 0 -> 24064 bytes .../obj/WinClient_CS.csproj.FileList.txt | 8 + Chapter01(Socket)/Part 1/server/server.sln | 20 + Chapter01(Socket)/Part 1/server/server.suo | Bin 0 -> 22016 bytes .../Part 1/server/server/ChatClient.vb | 101 + .../Part 1/server/server/Module1.vb | 15 + .../server/server/My Project/AssemblyInfo.vb | 35 + .../server/My Project/MyApplication.myapp | 9 + .../server/server/My Project/MyApplication.vb | 12 + .../server/server/My Project/MyResources.resx | 117 + .../server/server/My Project/MyResources.vb | 62 + .../server/My Project/MySettings.settings | 7 + .../server/server/My Project/MySettings.vb | 38 + .../Part 1/server/server/app.config | 25 + .../Part 1/server/server/bin/server.exe | Bin 0 -> 28672 bytes .../server/server/bin/server.exe.config | 25 + .../Part 1/server/server/bin/server.pdb | Bin 0 -> 44544 bytes .../server/server/bin/server.vshost.exe | Bin 0 -> 5632 bytes .../server/bin/server.vshost.exe.config | 25 + .../Part 1/server/server/bin/server.xml | 11 + .../obj/Debug/server.MyResources.resources | Bin 0 -> 180 bytes .../Part 1/server/server/obj/Debug/server.exe | Bin 0 -> 28672 bytes .../Part 1/server/server/obj/Debug/server.pdb | Bin 0 -> 44544 bytes .../server.vbproj.GenerateResource.Cache | Bin 0 -> 786 bytes .../Part 1/server/server/obj/Debug/server.xml | 11 + .../server/obj/server.vbproj.FileList.txt | 10 + .../Part 1/server/server/server.vbproj | 83 + .../Part 1/server/server/server.vbproj.user | 7 + .../Part 1/server_CS/server_CS.sln | 20 + .../Part 1/server_CS/server_CS.suo | Bin 0 -> 15360 bytes .../Part 1/server_CS/server_CS/ChatClient.cs | 98 + .../Part 1/server_CS/server_CS/Program.cs | 23 + .../server_CS/Properties/AssemblyInfo.cs | 33 + .../server_CS/bin/Debug/server_CS.exe | Bin 0 -> 20480 bytes .../server_CS/bin/Debug/server_CS.pdb | Bin 0 -> 17920 bytes .../server_CS/bin/Debug/server_CS.vshost.exe | Bin 0 -> 5632 bytes .../server_CS/obj/Debug/server_CS.exe | Bin 0 -> 20480 bytes .../server_CS/obj/Debug/server_CS.pdb | Bin 0 -> 17920 bytes .../obj/server_CS.csproj.FileList.txt | 5 + .../server_CS/server_CS/server_CS.csproj | 48 + .../Part 2/WinClient/WinClient.sln | 20 + .../Part 2/WinClient/WinClient.suo | Bin 0 -> 22016 bytes .../WinClient/WinClient/Form1.Designer.vb | 179 + .../Part 2/WinClient/WinClient/Form1.resx | 123 + .../Part 2/WinClient/WinClient/Form1.vb | 429 +++ .../WinClient/My Project/AssemblyInfo.vb | 35 + .../WinClient/My Project/MyApplication.myapp | 10 + .../WinClient/My Project/MyApplication.vb | 23 + .../WinClient/My Project/MyEvents.vb | 15 + .../WinClient/My Project/MyResources.resx | 117 + .../WinClient/My Project/MyResources.vb | 62 + .../WinClient/My Project/MySettings.settings | 7 + .../WinClient/My Project/MySettings.vb | 38 + .../WinClient/WinClient/WinClient.vbproj | 95 + .../WinClient/WinClient/WinClient.vbproj.user | 7 + .../Part 2/WinClient/WinClient/app.config | 25 + .../WinClient/WinClient/bin/WinClient.exe | Bin 0 -> 40960 bytes .../WinClient/bin/WinClient.exe.config | 25 + .../WinClient/WinClient/bin/WinClient.pdb | Bin 0 -> 67072 bytes .../WinClient/bin/WinClient.vshost.exe | Bin 0 -> 5632 bytes .../WinClient/bin/WinClient.vshost.exe.config | 25 + .../WinClient/WinClient/bin/WinClient.xml | 11 + .../obj/Debug/WinClient.Form1.resources | Bin 0 -> 180 bytes .../obj/Debug/WinClient.MyResources.resources | Bin 0 -> 180 bytes .../WinClient/obj/Debug/WinClient.exe | Bin 0 -> 40960 bytes .../WinClient/obj/Debug/WinClient.pdb | Bin 0 -> 67072 bytes .../WinClient.vbproj.GenerateResource.Cache | Bin 0 -> 844 bytes .../WinClient/obj/Debug/WinClient.xml | 11 + .../obj/WinClient.vbproj.FileList.txt | 11 + .../Part 2/WinClient_CS/WinClient_CS.sln | 20 + .../Part 2/WinClient_CS/WinClient_CS.suo | Bin 0 -> 19968 bytes .../WinClient_CS/Form1.Designer.cs | 190 ++ .../Part 2/WinClient_CS/WinClient_CS/Form1.cs | 319 ++ .../WinClient_CS/WinClient_CS/Form1.resx | 123 + .../WinClient_CS/WinClient_CS/Program.cs | 20 + .../WinClient_CS/Properties/AssemblyInfo.cs | 33 + .../Properties/Resources.Designer.cs | 71 + .../WinClient_CS/Properties/Resources.resx | 117 + .../Properties/Settings.Designer.cs | 30 + .../WinClient_CS/Properties/Settings.settings | 7 + .../WinClient_CS/WinClient_CS.csproj | 78 + .../WinClient_CS/bin/Debug/WinClient_CS.exe | Bin 0 -> 28672 bytes .../WinClient_CS/bin/Debug/WinClient_CS.pdb | Bin 0 -> 34304 bytes .../bin/Debug/WinClient_CS.vshost.exe | Bin 0 -> 5632 bytes .../obj/Debug/WinClient_CS.Form1.resources | Bin 0 -> 180 bytes ...inClient_CS.Properties.Resources.resources | Bin 0 -> 180 bytes ...WinClient_CS.csproj.GenerateResource.Cache | Bin 0 -> 842 bytes .../WinClient_CS/obj/Debug/WinClient_CS.exe | Bin 0 -> 28672 bytes .../WinClient_CS/obj/Debug/WinClient_CS.pdb | Bin 0 -> 34304 bytes .../obj/WinClient_CS.csproj.FileList.txt | 8 + Chapter01(Socket)/Part 2/server/server.sln | 20 + Chapter01(Socket)/Part 2/server/server.suo | Bin 0 -> 29696 bytes .../Part 2/server/server/ChatClient.vb | 223 ++ .../Part 2/server/server/Module1.vb | 15 + .../server/server/My Project/AssemblyInfo.vb | 35 + .../server/My Project/MyApplication.myapp | 9 + .../server/server/My Project/MyApplication.vb | 12 + .../server/server/My Project/MyResources.resx | 117 + .../server/server/My Project/MyResources.vb | 62 + .../server/My Project/MySettings.settings | 7 + .../server/server/My Project/MySettings.vb | 38 + .../Part 2/server/server/app.config | 25 + .../Part 2/server/server/bin/server.exe | Bin 0 -> 28672 bytes .../server/server/bin/server.exe.config | 25 + .../Part 2/server/server/bin/server.pdb | Bin 0 -> 46592 bytes .../server/server/bin/server.vshost.exe | Bin 0 -> 5632 bytes .../server/bin/server.vshost.exe.config | 25 + .../Part 2/server/server/bin/server.xml | 11 + .../obj/Debug/server.MyResources.resources | Bin 0 -> 180 bytes .../Part 2/server/server/obj/Debug/server.exe | Bin 0 -> 28672 bytes .../Part 2/server/server/obj/Debug/server.pdb | Bin 0 -> 46592 bytes .../server.vbproj.GenerateResource.Cache | Bin 0 -> 786 bytes .../Part 2/server/server/obj/Debug/server.xml | 11 + .../server/obj/server.vbproj.FileList.txt | 10 + .../Part 2/server/server/server.vbproj | 84 + .../Part 2/server/server/server.vbproj.user | 7 + .../Part 2/server_CS/server_CS.sln | 20 + .../Part 2/server_CS/server_CS.suo | Bin 0 -> 15360 bytes .../Part 2/server_CS/server_CS/ChatClient.cs | 176 + .../Part 2/server_CS/server_CS/Program.cs | 24 + .../server_CS/Properties/AssemblyInfo.cs | 33 + .../server_CS/bin/Debug/server_CS.exe | Bin 0 -> 20480 bytes .../server_CS/bin/Debug/server_CS.pdb | Bin 0 -> 19968 bytes .../server_CS/bin/Debug/server_CS.vshost.exe | Bin 0 -> 5632 bytes .../server_CS/obj/Debug/server_CS.exe | Bin 0 -> 20480 bytes .../server_CS/obj/Debug/server_CS.pdb | Bin 0 -> 19968 bytes .../obj/server_CS.csproj.FileList.txt | 5 + .../server_CS/server_CS/server_CS.csproj | 48 + .../SerialCommChat/SerialCommChat.sln | 20 + .../SerialCommChat/SerialCommChat.suo | Bin 0 -> 20992 bytes .../SerialCommChat/Form1.Designer.vb | 192 ++ .../SerialCommChat/SerialCommChat/Form1.resx | 120 + .../SerialCommChat/SerialCommChat/Form1.vb | 118 + .../My Project/Application.Designer.vb | 38 + .../My Project/Application.myapp | 10 + .../SerialCommChat/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../SerialCommChat/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../SerialCommChat/SerialCommChat.vbproj | 106 + .../SerialCommChat/SerialCommChat.vbproj.user | 18 + .../bin/Debug/SerialCommChat.exe | Bin 0 -> 36864 bytes .../bin/Debug/SerialCommChat.pdb | Bin 0 -> 71168 bytes .../bin/Debug/SerialCommChat.vshost.exe | Bin 0 -> 5632 bytes .../bin/Debug/SerialCommChat.xml | 24 + .../obj/Debug/SerialCommChat.Form1.resources | Bin 0 -> 180 bytes .../Debug/SerialCommChat.Resources.resources | Bin 0 -> 180 bytes .../obj/Debug/SerialCommChat.exe | Bin 0 -> 36864 bytes .../obj/Debug/SerialCommChat.pdb | Bin 0 -> 71168 bytes ...rialCommChat.vbproj.GenerateResource.Cache | Bin 0 -> 842 bytes .../obj/Debug/SerialCommChat.xml | 24 + .../obj/SerialCommChat.vbproj.FileList.txt | 10 + .../SerialCommChatPocketPC.sln | 22 + .../SerialCommChatPocketPC.suo | Bin 0 -> 18432 bytes .../SerialCommChatPocketPC/Form1.Designer.vb | 131 + .../SerialCommChatPocketPC/Form1.resx | 129 + .../SerialCommChatPocketPC/Form1.vb | 57 + .../My Project/AssemblyInfo.vb | 36 + .../My Project/Resources.Designer.vb | 59 + .../My Project/Resources.resx | 117 + .../SerialCommChatPocketPC.vbproj | 108 + .../SerialCommChatPocketPC.vbproj.user | 5 + .../bin/Debug/SerialCommChatPocketPC.exe | Bin 0 -> 16384 bytes .../bin/Debug/SerialCommChatPocketPC.pdb | Bin 0 -> 46592 bytes .../bin/Debug/SerialCommChatPocketPC.xml | 24 + .../SerialCommChatPocketPC.Form1.resources | Bin 0 -> 180 bytes ...SerialCommChatPocketPC.Resources.resources | Bin 0 -> 180 bytes .../obj/Debug/SerialCommChatPocketPC.exe | Bin 0 -> 16384 bytes .../obj/Debug/SerialCommChatPocketPC.pdb | Bin 0 -> 46592 bytes ...ChatPocketPC.vbproj.GenerateResource.Cache | Bin 0 -> 842 bytes .../obj/Debug/SerialCommChatPocketPC.xml | 24 + .../My Project.Resources.Designer.vb.dll | Bin 0 -> 6144 bytes ...SerialCommChatPocketPC.vbproj.FileList.txt | 10 + .../SerialCommChatPocketPC_CS.sln | 22 + .../SerialCommChatPocketPC_CS.suo | Bin 0 -> 18432 bytes .../Form1.Designer.cs | 147 + .../SerialCommChatPocketPC_CS/Form1.cs | 76 + .../SerialCommChatPocketPC_CS/Form1.resx | 129 + .../SerialCommChatPocketPC_CS/Program.cs | 18 + .../Properties/AssemblyInfo.cs | 33 + .../Properties/Resources.Designer.cs | 68 + .../Properties/Resources.resx | 117 + .../SerialCommChatPocketPC_CS.csproj | 93 + .../SerialCommChatPocketPC_CS.csproj.user | 5 + .../bin/Debug/SerialCommChatPocketPC_CS.exe | Bin 0 -> 9216 bytes .../bin/Debug/SerialCommChatPocketPC_CS.pdb | Bin 0 -> 22016 bytes .../SerialCommChatPocketPC_CS.Form1.resources | Bin 0 -> 180 bytes ...PocketPC_CS.Properties.Resources.resources | Bin 0 -> 180 bytes ...tPocketPC_CS.csproj.GenerateResource.Cache | Bin 0 -> 842 bytes .../obj/Debug/SerialCommChatPocketPC_CS.exe | Bin 0 -> 9216 bytes .../obj/Debug/SerialCommChatPocketPC_CS.pdb | Bin 0 -> 22016 bytes ...ialCommChatPocketPC_CS.csproj.FileList.txt | 8 + .../SerialCommChat_CS/SerialCommChat_CS.sln | 20 + .../SerialCommChat_CS/SerialCommChat_CS.suo | Bin 0 -> 19968 bytes .../SerialCommChat_CS/Form1.Designer.cs | 211 ++ .../SerialCommChat_CS/Form1.cs | 123 + .../SerialCommChat_CS/Form1.resx | 120 + .../SerialCommChat_CS/Program.cs | 20 + .../Properties/AssemblyInfo.cs | 33 + .../Properties/Resources.Designer.cs | 71 + .../Properties/Resources.resx | 117 + .../Properties/Settings.Designer.cs | 30 + .../Properties/Settings.settings | 7 + .../SerialCommChat_CS.csproj | 78 + .../bin/Debug/SerialCommChat_CS.exe | Bin 0 -> 24576 bytes .../bin/Debug/SerialCommChat_CS.pdb | Bin 0 -> 28160 bytes .../bin/Debug/SerialCommChat_CS.vshost.exe | Bin 0 -> 5632 bytes .../Debug/SerialCommChat_CS.Form1.resources | Bin 0 -> 180 bytes ...CommChat_CS.Properties.Resources.resources | Bin 0 -> 180 bytes ...lCommChat_CS.csproj.GenerateResource.Cache | Bin 0 -> 842 bytes .../obj/Debug/SerialCommChat_CS.exe | Bin 0 -> 24576 bytes .../obj/Debug/SerialCommChat_CS.pdb | Bin 0 -> 28160 bytes .../obj/SerialCommChat_CS.csproj.FileList.txt | 8 + .../GPSReceiver/Form1.Designer.vb | 112 + .../VirtualEarth/GPSReceiver/Form1.resx | 129 + .../VirtualEarth/GPSReceiver/Form1.vb | 58 + .../VirtualEarth/GPSReceiver/GPSReceiver.suo | Bin 0 -> 2560 bytes .../GPSReceiver/GPSReceiver.vbproj | 108 + .../GPSReceiver/GPSReceiver.vbproj.user | 5 + .../GPSReceiver/My Project/AssemblyInfo.vb | 36 + .../My Project/Resources.Designer.vb | 59 + .../GPSReceiver/My Project/Resources.resx | 117 + .../GPSReceiver/bin/Debug/GPSReceiver.exe | Bin 0 -> 15872 bytes .../GPSReceiver/bin/Debug/GPSReceiver.pdb | Bin 0 -> 56832 bytes .../GPSReceiver/bin/Debug/GPSReceiver.xml | 24 + .../obj/Debug/GPSReceiver.Form1.resources | Bin 0 -> 180 bytes .../obj/Debug/GPSReceiver.Resources.resources | Bin 0 -> 180 bytes .../GPSReceiver/obj/Debug/GPSReceiver.exe | Bin 0 -> 15872 bytes .../GPSReceiver/obj/Debug/GPSReceiver.pdb | Bin 0 -> 56832 bytes .../GPSReceiver.vbproj.GenerateResource.Cache | Bin 0 -> 842 bytes .../GPSReceiver/obj/Debug/GPSReceiver.xml | 24 + .../My Project.Resources.Designer.vb.dll | Bin 0 -> 6144 bytes .../obj/GPSReceiver.vbproj.FileList.txt | 10 + .../VirtualEarth/Copy of Map.html | 63 + .../VirtualEarth/Form1.Designer.vb | 238 ++ .../VirtualEarth/VirtualEarth/Form1.resx | 123 + .../VirtualEarth/VirtualEarth/Form1.vb | 256 ++ .../VirtualEarth/VirtualEarth/Map.html | 67 + .../My Project/Application.Designer.vb | 38 + .../VirtualEarth/My Project/Application.myapp | 11 + .../VirtualEarth/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../VirtualEarth/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../VirtualEarth/My Project/Settings.settings | 7 + .../VirtualEarth/VirtualEarth.sln | 20 + .../VirtualEarth/VirtualEarth.suo | Bin 0 -> 22016 bytes .../VirtualEarth/VirtualEarth.vbproj | 114 + .../VirtualEarth/bin/Debug/Copy of Map.html | 63 + .../VirtualEarth/bin/Debug/Map.html | 67 + .../VirtualEarth/bin/Debug/VirtualEarth.exe | Bin 0 -> 40960 bytes .../VirtualEarth/bin/Debug/VirtualEarth.pdb | Bin 0 -> 75264 bytes .../bin/Debug/VirtualEarth.vshost.exe | Bin 0 -> 5632 bytes .../VirtualEarth/bin/Debug/VirtualEarth.xml | 24 + .../My Project.Resources.Designer.vb.dll | Bin 0 -> 7680 bytes .../obj/Debug/VirtualEarth.Form1.resources | Bin 0 -> 180 bytes .../Debug/VirtualEarth.Resources.resources | Bin 0 -> 180 bytes .../VirtualEarth/obj/Debug/VirtualEarth.exe | Bin 0 -> 40960 bytes .../VirtualEarth/obj/Debug/VirtualEarth.pdb | Bin 0 -> 75264 bytes ...VirtualEarth.vbproj.GenerateResource.Cache | Bin 0 -> 842 bytes .../VirtualEarth/obj/Debug/VirtualEarth.xml | 24 + .../obj/VirtualEarth.vbproj.FileList.txt | 12 + .../VirtualEarth_CS/Form1.Designer.cs | 257 ++ Chapter02(Serial)/VirtualEarth_CS/Form1.cs | 236 ++ Chapter02(Serial)/VirtualEarth_CS/Form1.resx | 123 + Chapter02(Serial)/VirtualEarth_CS/Map.html | 67 + Chapter02(Serial)/VirtualEarth_CS/Program.cs | 20 + .../Properties/AssemblyInfo.cs | 33 + .../Properties/Resources.Designer.cs | 71 + .../VirtualEarth_CS/Properties/Resources.resx | 117 + .../Properties/Settings.Designer.cs | 30 + .../Properties/Settings.settings | 7 + .../VirtualEarth_CS/VirtualEarth_CS.csproj | 83 + .../VirtualEarth_CS/VirtualEarth_CS.sln | 20 + .../VirtualEarth_CS/VirtualEarth_CS.suo | Bin 0 -> 22016 bytes .../VirtualEarth_CS/bin/Debug/Map.html | 67 + .../bin/Debug/VirtualEarth_CS.exe | Bin 0 -> 28672 bytes .../bin/Debug/VirtualEarth_CS.pdb | Bin 0 -> 32256 bytes .../bin/Debug/VirtualEarth_CS.vshost.exe | Bin 0 -> 5632 bytes .../obj/Debug/VirtualEarth_CS.Form1.resources | Bin 0 -> 180 bytes ...ualEarth_CS.Properties.Resources.resources | Bin 0 -> 180 bytes ...tualEarth_CS.csproj.GenerateResource.Cache | Bin 0 -> 842 bytes .../obj/Debug/VirtualEarth_CS.exe | Bin 0 -> 28672 bytes .../obj/Debug/VirtualEarth_CS.pdb | Bin 0 -> 32256 bytes .../obj/VirtualEarth_CS.csproj.FileList.txt | 9 + .../FingerPrintReader/FingerPrintReader.sln | 20 + .../FingerPrintReader/FingerPrintReader.suo | Bin 0 -> 25088 bytes .../FingerPrintReader/DBClass.vb | 179 + .../FingerPrintReader.vbproj | 134 + .../FingerPrintReader.vbproj.user | 5 + .../FingerPrintReader/Form1.Designer.vb | 234 ++ .../FingerPrintReader/Form1.resx | 134 + .../FingerPrintReader/Form1.vb | 278 ++ .../FingerPrintReader/GrFingerSample.mdb | Bin 0 -> 147456 bytes .../My Project/Application.Designer.vb | 38 + .../My Project/Application.myapp | 11 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 70 + .../My Project/Resources.resx | 124 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../Resources/fingerprintreader.jpg | Bin 0 -> 6174 bytes .../FingerPrintReader/Util.vb | 321 ++ .../bin/Debug/AxInterop.GrFingerXLib.dll | Bin 0 -> 11776 bytes .../bin/Debug/FingerPrintReader.exe | Bin 0 -> 61440 bytes .../bin/Debug/FingerPrintReader.pdb | Bin 0 -> 114176 bytes .../bin/Debug/FingerPrintReader.vshost.exe | Bin 0 -> 5632 bytes .../bin/Debug/FingerPrintReader.xml | 24 + .../bin/Debug/GrFingerSample.mdb | Bin 0 -> 147456 bytes .../bin/Debug/Interop.GrFingerXLib.dll | Bin 0 -> 15360 bytes .../obj/Debug/AxInterop.GrFingerXLib.dll | Bin 0 -> 11776 bytes .../Debug/FingerPrintReader.Form1.resources | Bin 0 -> 577 bytes .../FingerPrintReader.Resources.resources | Bin 0 -> 7168 bytes .../obj/Debug/FingerPrintReader.exe | Bin 0 -> 61440 bytes .../obj/Debug/FingerPrintReader.pdb | Bin 0 -> 114176 bytes ...rPrintReader.vbproj.GenerateResource.Cache | Bin 0 -> 893 bytes ...intReader.vbproj.ResolveComReference.cache | Bin 0 -> 567 bytes .../obj/Debug/FingerPrintReader.xml | 24 + .../obj/Debug/Interop.GrFingerXLib.dll | Bin 0 -> 15360 bytes .../My Project.Resources.Designer.vb.dll | Bin 0 -> 7680 bytes .../obj/FingerPrintReader.vbproj.FileList.txt | 16 + .../FingerPrintReader_CS.sln | 20 + .../FingerPrintReader_CS.suo | Bin 0 -> 24576 bytes .../FingerPrintReader_CS/DBClass.cs | 210 ++ .../FingerPrintReader_CS.csproj | 105 + .../FingerPrintReader_CS.csproj.user | 5 + .../FingerPrintReader_CS/Form1.Designer.cs | 250 ++ .../FingerPrintReader_CS/Form1.cs | 319 ++ .../FingerPrintReader_CS/Form1.resx | 131 + .../FingerPrintReader_CS/GrFingerSample.mdb | Bin 0 -> 147456 bytes .../FingerPrintReader_CS/Program.cs | 20 + .../Properties/AssemblyInfo.cs | 33 + .../Properties/Resources.Designer.cs | 70 + .../Properties/Resources.resx | 124 + .../Properties/Settings.Designer.cs | 30 + .../Properties/Settings.settings | 7 + .../Resources/fingerprintreader.jpg | Bin 0 -> 6174 bytes .../FingerPrintReader_CS/Util.cs | 432 +++ .../bin/Debug/AxInterop.GrFingerXLib.dll | Bin 0 -> 11776 bytes .../bin/Debug/FingerPrintReader_CS.exe | Bin 0 -> 45056 bytes .../bin/Debug/FingerPrintReader_CS.pdb | Bin 0 -> 50688 bytes .../bin/Debug/FingerPrintReader_CS.vshost.exe | Bin 0 -> 5632 bytes .../bin/Debug/GrFingerSample.mdb | Bin 0 -> 147456 bytes .../bin/Debug/Interop.GrFingerXLib.dll | Bin 0 -> 15360 bytes .../obj/Debug/AxInterop.GrFingerXLib.dll | Bin 0 -> 11776 bytes .../FingerPrintReader_CS.Form1.resources | Bin 0 -> 577 bytes ...ntReader_CS.Properties.Resources.resources | Bin 0 -> 7168 bytes ...intReader_CS.csproj.GenerateResource.Cache | Bin 0 -> 893 bytes ...Reader_CS.csproj.ResolveComReference.cache | Bin 0 -> 567 bytes .../obj/Debug/FingerPrintReader_CS.exe | Bin 0 -> 45056 bytes .../obj/Debug/FingerPrintReader_CS.pdb | Bin 0 -> 50688 bytes .../obj/Debug/Interop.GrFingerXLib.dll | Bin 0 -> 15360 bytes .../Properties.Resources.Designer.cs.dll | Bin 0 -> 4608 bytes .../FingerPrintReader_CS.csproj.FileList.txt | 14 + Chapter04(Infrared)/IRChat/IRChat.sln | 22 + Chapter04(Infrared)/IRChat/IRChat.suo | Bin 0 -> 17408 bytes .../IRChat/IRChat/Form1.Designer.vb | 87 + Chapter04(Infrared)/IRChat/IRChat/Form1.resx | 129 + Chapter04(Infrared)/IRChat/IRChat/Form1.vb | 129 + .../IRChat/IRChat/IRChat.vbproj | 109 + .../IRChat/IRChat/IRChat.vbproj.user | 6 + .../IRChat/IRChat/My Project/AssemblyInfo.vb | 36 + .../IRChat/My Project/Resources.Designer.vb | 59 + .../IRChat/IRChat/My Project/Resources.resx | 117 + .../IRChat/IRChat/bin/Debug/IRChat.exe | Bin 0 -> 15360 bytes .../IRChat/IRChat/bin/Debug/IRChat.pdb | Bin 0 -> 48640 bytes .../IRChat/IRChat/bin/Debug/IRChat.xml | 24 + .../IRChat/obj/Debug/IRChat.Form1.resources | Bin 0 -> 180 bytes .../obj/Debug/IRChat.Resources.resources | Bin 0 -> 180 bytes .../IRChat/IRChat/obj/Debug/IRChat.exe | Bin 0 -> 15360 bytes .../IRChat/IRChat/obj/Debug/IRChat.pdb | Bin 0 -> 48640 bytes .../IRChat.vbproj.GenerateResource.Cache | Bin 0 -> 842 bytes .../IRChat/IRChat/obj/Debug/IRChat.xml | 24 + .../obj/Debug/ResolveAssemblyReference.cache | Bin 0 -> 4128 bytes .../My Project.Resources.Designer.vb.dll | Bin 0 -> 6144 bytes .../IRChat/obj/IRChat.vbproj.FileList.txt | 10 + Chapter04(Infrared)/IRChat_CS/IRChat_CS.sln | 22 + Chapter04(Infrared)/IRChat_CS/IRChat_CS.suo | Bin 0 -> 17408 bytes .../IRChat_CS/IRChat_CS/Form1.Designer.cs | 102 + .../IRChat_CS/IRChat_CS/Form1.cs | 159 + .../IRChat_CS/IRChat_CS/Form1.resx | 129 + .../IRChat_CS/IRChat_CS/IRChat_CS.csproj | 94 + .../IRChat_CS/IRChat_CS/IRChat_CS.csproj.user | 5 + .../IRChat_CS/IRChat_CS/Program.cs | 18 + .../IRChat_CS/Properties/AssemblyInfo.cs | 33 + .../Properties/Resources.Designer.cs | 68 + .../IRChat_CS/Properties/Resources.resx | 117 + .../IRChat_CS/bin/Debug/IRChat_CS.exe | Bin 0 -> 9216 bytes .../IRChat_CS/bin/Debug/IRChat_CS.pdb | Bin 0 -> 26112 bytes .../obj/Debug/IRChat_CS.Form1.resources | Bin 0 -> 180 bytes .../IRChat_CS.Properties.Resources.resources | Bin 0 -> 180 bytes .../IRChat_CS.csproj.GenerateResource.Cache | Bin 0 -> 842 bytes .../IRChat_CS/obj/Debug/IRChat_CS.exe | Bin 0 -> 9216 bytes .../IRChat_CS/obj/Debug/IRChat_CS.pdb | Bin 0 -> 26112 bytes .../obj/Debug/ResolveAssemblyReference.cache | Bin 0 -> 6125 bytes .../obj/IRChat_CS.csproj.FileList.txt | 8 + .../IRChat_Desktop/IRChat_Desktop.sln | 20 + .../IRChat_Desktop/IRChat_Desktop.suo | Bin 0 -> 19456 bytes .../IRChat_Desktop/Form1.Designer.vb | 100 + .../IRChat_Desktop/IRChat_Desktop/Form1.resx | 123 + .../IRChat_Desktop/IRChat_Desktop/Form1.vb | 127 + .../IRChat_Desktop/IRChat_Desktop.vbproj | 110 + .../IRChat_Desktop/IRChat_Desktop.vbproj.user | 5 + .../My Project/Application.Designer.vb | 38 + .../My Project/Application.myapp | 11 + .../IRChat_Desktop/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../IRChat_Desktop/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../bin/Debug/IRChat_Desktop.exe | Bin 0 -> 32768 bytes .../bin/Debug/IRChat_Desktop.pdb | Bin 0 -> 69120 bytes .../bin/Debug/IRChat_Desktop.vshost.exe | Bin 0 -> 5632 bytes .../bin/Debug/IRChat_Desktop.xml | 11 + .../bin/Debug/InTheHand.Net.Personal.dll | Bin 0 -> 77824 bytes .../bin/Debug/InTheHand.Net.Personal.xml | 3026 +++++++++++++++++ .../obj/Debug/IRChat_Desktop.Form1.resources | Bin 0 -> 180 bytes .../Debug/IRChat_Desktop.Resources.resources | Bin 0 -> 180 bytes .../obj/Debug/IRChat_Desktop.exe | Bin 0 -> 32768 bytes .../obj/Debug/IRChat_Desktop.pdb | Bin 0 -> 69120 bytes ...Chat_Desktop.vbproj.GenerateResource.Cache | Bin 0 -> 842 bytes .../obj/Debug/IRChat_Desktop.xml | 11 + .../obj/Debug/ResolveAssemblyReference.cache | Bin 0 -> 4067 bytes .../obj/IRChat_Desktop.vbproj.FileList.txt | 12 + .../IRChat_Desktop_CS/IRChat_Desktop_CS.sln | 20 + .../IRChat_Desktop_CS/IRChat_Desktop_CS.suo | Bin 0 -> 16896 bytes .../IRChat_Desktop_CS/Form1.Designer.cs | 117 + .../IRChat_Desktop_CS/Form1.cs | 184 + .../IRChat_Desktop_CS/Form1.resx | 123 + .../IRChat_Desktop_CS.csproj | 79 + .../IRChat_Desktop_CS/Program.cs | 20 + .../Properties/AssemblyInfo.cs | 33 + .../Properties/Resources.Designer.cs | 71 + .../Properties/Resources.resx | 117 + .../Properties/Settings.Designer.cs | 30 + .../Properties/Settings.settings | 7 + .../bin/Debug/IRChat_Desktop_CS.exe | Bin 0 -> 24576 bytes .../bin/Debug/IRChat_Desktop_CS.pdb | Bin 0 -> 28160 bytes .../bin/Debug/IRChat_Desktop_CS.vshost.exe | Bin 0 -> 5632 bytes .../bin/Debug/InTheHand.Net.Personal.dll | Bin 0 -> 77824 bytes .../bin/Debug/InTheHand.Net.Personal.xml | 3026 +++++++++++++++++ .../Debug/IRChat_Desktop_CS.Form1.resources | Bin 0 -> 180 bytes ..._Desktop_CS.Properties.Resources.resources | Bin 0 -> 180 bytes ...t_Desktop_CS.csproj.GenerateResource.Cache | Bin 0 -> 842 bytes .../obj/Debug/IRChat_Desktop_CS.exe | Bin 0 -> 24576 bytes .../obj/Debug/IRChat_Desktop_CS.pdb | Bin 0 -> 28160 bytes .../obj/Debug/ResolveAssemblyReference.cache | Bin 0 -> 4075 bytes .../obj/IRChat_Desktop_CS.csproj.FileList.txt | 10 + .../Attendance_Parallax/Attendance.sln | 20 + .../Attendance_Parallax/Attendance.suo | Bin 0 -> 23040 bytes .../Attendance_Parallax/Attendance.vbproj | 123 + .../Attendance.vbproj.user | 5 + .../Attendance_Parallax/Form1.Designer.vb | 472 +++ .../Attendance_Parallax/Form1.resx | 245 ++ Chapter05(RFID)/Attendance_Parallax/Form1.vb | 197 ++ .../My Project/Application.Designer.vb | 38 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 83 + .../My Project/Settings.settings | 14 + .../NorthwindDataSet.Designer.vb | 1006 ++++++ .../Attendance_Parallax/NorthwindDataSet.xsc | 35 + .../Attendance_Parallax/NorthwindDataSet.xsd | 159 + .../Attendance_Parallax/NorthwindDataSet.xss | 1 + .../Attendance_Parallax/app.config | 32 + .../bin/Debug/Attendance.exe | Bin 0 -> 81920 bytes .../bin/Debug/Attendance.exe.config | 32 + .../bin/Debug/Attendance.pdb | Bin 0 -> 173568 bytes .../bin/Debug/Attendance.vshost.exe | Bin 0 -> 5632 bytes .../bin/Debug/Attendance.vshost.exe.config | 32 + .../bin/Debug/Attendance.xml | 11 + .../obj/Attendance.vbproj.FileList.txt | 11 + .../obj/Debug/Attendance.Form1.resources | Bin 0 -> 5130 bytes .../obj/Debug/Attendance.Resources.resources | Bin 0 -> 180 bytes .../obj/Debug/Attendance.exe | Bin 0 -> 81920 bytes .../obj/Debug/Attendance.pdb | Bin 0 -> 173568 bytes .../Attendance.vbproj.GenerateResource.Cache | Bin 0 -> 900 bytes .../obj/Debug/Attendance.xml | 11 + .../My Project.Resources.Designer.vb.dll | Bin 0 -> 8192 bytes .../TempPE/NorthwindDataSet.Designer.vb.dll | Bin 0 -> 45056 bytes .../TempPE/NorthwindDataSet1.Designer.vb.dll | Bin 0 -> 45056 bytes .../Attendance_Parallax_CS/Attendance_CS.sln | 20 + .../Attendance_Parallax_CS/Attendance_CS.suo | Bin 0 -> 17408 bytes .../Attendance_CS/Attendance_CS.csproj | 95 + .../Attendance_CS/Form1.Designer.cs | 505 +++ .../Attendance_CS/Form1.cs | 166 + .../Attendance_CS/Form1.resx | 245 ++ .../NorthwindDataSet.Designer.cs | 1023 ++++++ .../Attendance_CS/NorthwindDataSet.xsc | 35 + .../Attendance_CS/NorthwindDataSet.xsd | 159 + .../Attendance_CS/NorthwindDataSet.xss | 1 + .../Attendance_CS/Program.cs | 20 + .../Attendance_CS/Properties/AssemblyInfo.cs | 33 + .../Properties/Resources.Designer.cs | 71 + .../Attendance_CS/Properties/Resources.resx | 117 + .../Properties/Settings.Designer.cs | 36 + .../Properties/Settings.settings | 14 + .../Attendance_CS/app.config | 10 + .../Attendance_CS/bin/Debug/Attendance_CS.exe | Bin 0 -> 61440 bytes .../bin/Debug/Attendance_CS.exe.config | 10 + .../Attendance_CS/bin/Debug/Attendance_CS.pdb | Bin 0 -> 75264 bytes .../bin/Debug/Attendance_CS.vshost.exe | Bin 0 -> 5632 bytes .../bin/Debug/Attendance_CS.vshost.exe.config | 10 + .../obj/Attendance_CS.csproj.FileList.txt | 9 + .../obj/Debug/Attendance_CS.Form1.resources | Bin 0 -> 5130 bytes ...tendance_CS.Properties.Resources.resources | Bin 0 -> 180 bytes ...ttendance_CS.csproj.GenerateResource.Cache | Bin 0 -> 842 bytes .../Attendance_CS/obj/Debug/Attendance_CS.exe | Bin 0 -> 61440 bytes .../Attendance_CS/obj/Debug/Attendance_CS.pdb | Bin 0 -> 75264 bytes .../TempPE/NorthwindDataSet.Designer.cs.dll | Bin 0 -> 40960 bytes .../Attendance_Phidget/Attendance.sln | 20 + .../Attendance_Phidget/Attendance.suo | Bin 0 -> 25600 bytes .../Attendance_Phidget/Attendance.vbproj | 137 + .../Attendance_Phidget/Attendance.vbproj.user | 5 + .../Attendance_Phidget/Form1.Designer.vb | 481 +++ Chapter05(RFID)/Attendance_Phidget/Form1.resx | 245 ++ Chapter05(RFID)/Attendance_Phidget/Form1.vb | 208 ++ .../Attendance_Phidget/Form2.Designer.vb | 106 + Chapter05(RFID)/Attendance_Phidget/Form2.resx | 123 + Chapter05(RFID)/Attendance_Phidget/Form2.vb | 73 + .../My Project/Application.Designer.vb | 38 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 83 + .../My Project/Settings.settings | 14 + .../NorthwindDataSet.Designer.vb | 1006 ++++++ .../Attendance_Phidget/NorthwindDataSet.xsc | 35 + .../Attendance_Phidget/NorthwindDataSet.xsd | 159 + .../Attendance_Phidget/NorthwindDataSet.xss | 1 + Chapter05(RFID)/Attendance_Phidget/app.config | 32 + .../bin/Debug/Attendance.exe | Bin 0 -> 86016 bytes .../bin/Debug/Attendance.exe.config | 32 + .../bin/Debug/Attendance.pdb | Bin 0 -> 189952 bytes .../bin/Debug/Attendance.vshost.exe | Bin 0 -> 5632 bytes .../bin/Debug/Attendance.vshost.exe.config | 32 + .../bin/Debug/Attendance.xml | 11 + .../bin/Debug/PhidgetsNET.dll | Bin 0 -> 49152 bytes .../obj/Attendance.vbproj.FileList.txt | 13 + .../obj/Debug/Attendance.Form1.resources | Bin 0 -> 5130 bytes .../obj/Debug/Attendance.Form2.resources | Bin 0 -> 180 bytes .../obj/Debug/Attendance.Resources.resources | Bin 0 -> 180 bytes .../obj/Debug/Attendance.exe | Bin 0 -> 86016 bytes .../obj/Debug/Attendance.pdb | Bin 0 -> 189952 bytes .../Attendance.vbproj.GenerateResource.Cache | Bin 0 -> 900 bytes .../obj/Debug/Attendance.xml | 11 + .../obj/Debug/ResolveAssemblyReference.cache | Bin 0 -> 3141 bytes .../My Project.Resources.Designer.vb.dll | Bin 0 -> 8192 bytes .../TempPE/NorthwindDataSet.Designer.vb.dll | Bin 0 -> 45056 bytes .../TempPE/NorthwindDataSet1.Designer.vb.dll | Bin 0 -> 45056 bytes .../Attendance_Phidget_CS/Attendance_CS.sln | 20 + .../Attendance_Phidget_CS/Attendance_CS.suo | Bin 0 -> 23040 bytes .../Attendance_CS/Attendance_CS.csproj | 79 + .../Attendance_CS/Attendance_CS.csproj.user | 5 + .../Attendance_CS/Form1.Designer.cs | 124 + .../Attendance_CS/Form1.cs | 75 + .../Attendance_CS/Form1.resx | 123 + .../Attendance_CS/Program.cs | 20 + .../Attendance_CS/Properties/AssemblyInfo.cs | 33 + .../Properties/Resources.Designer.cs | 71 + .../Attendance_CS/Properties/Resources.resx | 117 + .../Properties/Settings.Designer.cs | 30 + .../Properties/Settings.settings | 7 + .../Attendance_CS/bin/Debug/Attendance_CS.exe | Bin 0 -> 24576 bytes .../Attendance_CS/bin/Debug/Attendance_CS.pdb | Bin 0 -> 26112 bytes .../bin/Debug/Attendance_CS.vshost.exe | Bin 0 -> 5632 bytes .../Attendance_CS/bin/Debug/PhidgetsNET.dll | Bin 0 -> 49152 bytes .../obj/Attendance_CS.csproj.FileList.txt | 9 + .../obj/Debug/Attendance_CS.Form1.resources | Bin 0 -> 180 bytes ...tendance_CS.Properties.Resources.resources | Bin 0 -> 180 bytes ...ttendance_CS.csproj.GenerateResource.Cache | Bin 0 -> 900 bytes .../Attendance_CS/obj/Debug/Attendance_CS.exe | Bin 0 -> 24576 bytes .../Attendance_CS/obj/Debug/Attendance_CS.pdb | Bin 0 -> 26112 bytes .../obj/Debug/ResolveAssemblyReference.cache | Bin 0 -> 3126 bytes Chapter06(ExternalDevices)/PING.bs2 | 39 + .../SecuritySystem/SecuritySystem.sln | 20 + .../SecuritySystem/SecuritySystem.suo | Bin 0 -> 19456 bytes .../SecuritySystem/Form1.Designer.vb | 109 + .../SecuritySystem/SecuritySystem/Form1.resx | 120 + .../SecuritySystem/SecuritySystem/Form1.vb | 185 + .../My Project/Application.Designer.vb | 38 + .../My Project/Application.myapp | 11 + .../SecuritySystem/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../SecuritySystem/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../SecuritySystem/SecuritySystem.vbproj | 106 + .../SecuritySystem/SecuritySystem.vbproj.user | 5 + .../bin/Debug/SecuritySystem.exe | Bin 0 -> 36864 bytes .../bin/Debug/SecuritySystem.pdb | Bin 0 -> 69120 bytes .../bin/Debug/SecuritySystem.vshost.exe | Bin 0 -> 5632 bytes .../bin/Debug/SecuritySystem.xml | 11 + .../obj/Debug/SecuritySystem.Form1.resources | Bin 0 -> 180 bytes .../Debug/SecuritySystem.Resources.resources | Bin 0 -> 180 bytes .../obj/Debug/SecuritySystem.exe | Bin 0 -> 36864 bytes .../obj/Debug/SecuritySystem.pdb | Bin 0 -> 69120 bytes ...curitySystem.vbproj.GenerateResource.Cache | Bin 0 -> 842 bytes .../obj/Debug/SecuritySystem.xml | 11 + .../obj/SecuritySystem.vbproj.FileList.txt | 10 + .../SecuritySystem_CS/SecuritySystem_CS.sln | 20 + .../SecuritySystem_CS/SecuritySystem_CS.suo | Bin 0 -> 17408 bytes .../SecuritySystem_CS/Form1.Designer.cs | 126 + .../SecuritySystem_CS/Form1.cs | 154 + .../SecuritySystem_CS/Form1.resx | 120 + .../SecuritySystem_CS/Program.cs | 20 + .../Properties/AssemblyInfo.cs | 33 + .../Properties/Resources.Designer.cs | 71 + .../Properties/Resources.resx | 117 + .../Properties/Settings.Designer.cs | 30 + .../Properties/Settings.settings | 7 + .../SecuritySystem_CS.csproj | 78 + .../bin/Debug/SecuritySystem_CS.exe | Bin 0 -> 24576 bytes .../bin/Debug/SecuritySystem_CS.pdb | Bin 0 -> 28160 bytes .../bin/Debug/SecuritySystem_CS.vshost.exe | Bin 0 -> 5632 bytes .../Debug/SecuritySystem_CS.Form1.resources | Bin 0 -> 180 bytes ...tySystem_CS.Properties.Resources.resources | Bin 0 -> 180 bytes ...itySystem_CS.csproj.GenerateResource.Cache | Bin 0 -> 842 bytes .../obj/Debug/SecuritySystem_CS.exe | Bin 0 -> 24576 bytes .../obj/Debug/SecuritySystem_CS.pdb | Bin 0 -> 28160 bytes .../obj/SecuritySystem_CS.csproj.FileList.txt | 8 + LICENSE.txt | 27 + README.md | 15 + contributing.md | 14 + 743 files changed, 37158 insertions(+) create mode 100644 3321.pdf create mode 100644 9781590597903.jpg create mode 100644 Chapter01(Socket)/Part 0/Client/Client.sln create mode 100644 Chapter01(Socket)/Part 0/Client/Client.suo create mode 100644 Chapter01(Socket)/Part 0/Client/Client/Client.vbproj create mode 100644 Chapter01(Socket)/Part 0/Client/Client/Module1.vb create mode 100644 Chapter01(Socket)/Part 0/Client/Client/My Project/Application.Designer.vb create mode 100644 Chapter01(Socket)/Part 0/Client/Client/My Project/Application.myapp create mode 100644 Chapter01(Socket)/Part 0/Client/Client/My Project/AssemblyInfo.vb create mode 100644 Chapter01(Socket)/Part 0/Client/Client/My Project/Resources.Designer.vb create mode 100644 Chapter01(Socket)/Part 0/Client/Client/My Project/Resources.resx create mode 100644 Chapter01(Socket)/Part 0/Client/Client/My Project/Settings.Designer.vb create mode 100644 Chapter01(Socket)/Part 0/Client/Client/My Project/Settings.settings create mode 100644 Chapter01(Socket)/Part 0/Client/Client/bin/Debug/Client.exe create mode 100644 Chapter01(Socket)/Part 0/Client/Client/bin/Debug/Client.pdb create mode 100644 Chapter01(Socket)/Part 0/Client/Client/bin/Debug/Client.vshost.exe create mode 100644 Chapter01(Socket)/Part 0/Client/Client/bin/Debug/Client.xml create mode 100644 Chapter01(Socket)/Part 0/Client/Client/obj/Client.vbproj.FileList.txt create mode 100644 Chapter01(Socket)/Part 0/Client/Client/obj/Debug/Client.Resources.resources create mode 100644 Chapter01(Socket)/Part 0/Client/Client/obj/Debug/Client.exe create mode 100644 Chapter01(Socket)/Part 0/Client/Client/obj/Debug/Client.pdb create mode 100644 Chapter01(Socket)/Part 0/Client/Client/obj/Debug/Client.vbproj.GenerateResource.Cache create mode 100644 Chapter01(Socket)/Part 0/Client/Client/obj/Debug/Client.xml create mode 100644 Chapter01(Socket)/Part 0/Client_CS/Client_CS.sln create mode 100644 Chapter01(Socket)/Part 0/Client_CS/Client_CS.suo create mode 100644 Chapter01(Socket)/Part 0/Client_CS/Client_CS/Client_CS.csproj create mode 100644 Chapter01(Socket)/Part 0/Client_CS/Client_CS/Program.cs create mode 100644 Chapter01(Socket)/Part 0/Client_CS/Client_CS/Properties/AssemblyInfo.cs create mode 100644 Chapter01(Socket)/Part 0/Client_CS/Client_CS/bin/Debug/Client_CS.exe create mode 100644 Chapter01(Socket)/Part 0/Client_CS/Client_CS/bin/Debug/Client_CS.pdb create mode 100644 Chapter01(Socket)/Part 0/Client_CS/Client_CS/bin/Debug/Client_CS.vshost.exe create mode 100644 Chapter01(Socket)/Part 0/Client_CS/Client_CS/obj/Client_CS.csproj.FileList.txt create mode 100644 Chapter01(Socket)/Part 0/Client_CS/Client_CS/obj/Debug/Client_CS.exe create mode 100644 Chapter01(Socket)/Part 0/Client_CS/Client_CS/obj/Debug/Client_CS.pdb create mode 100644 Chapter01(Socket)/Part 0/Server/Server.sln create mode 100644 Chapter01(Socket)/Part 0/Server/Server.suo create mode 100644 Chapter01(Socket)/Part 0/Server/Server/Module1.vb create mode 100644 Chapter01(Socket)/Part 0/Server/Server/My Project/Application.Designer.vb create mode 100644 Chapter01(Socket)/Part 0/Server/Server/My Project/Application.myapp create mode 100644 Chapter01(Socket)/Part 0/Server/Server/My Project/AssemblyInfo.vb create mode 100644 Chapter01(Socket)/Part 0/Server/Server/My Project/Resources.Designer.vb create mode 100644 Chapter01(Socket)/Part 0/Server/Server/My Project/Resources.resx create mode 100644 Chapter01(Socket)/Part 0/Server/Server/My Project/Settings.Designer.vb create mode 100644 Chapter01(Socket)/Part 0/Server/Server/My Project/Settings.settings create mode 100644 Chapter01(Socket)/Part 0/Server/Server/Server.vbproj create mode 100644 Chapter01(Socket)/Part 0/Server/Server/bin/Debug/Server.exe create mode 100644 Chapter01(Socket)/Part 0/Server/Server/bin/Debug/Server.pdb create mode 100644 Chapter01(Socket)/Part 0/Server/Server/bin/Debug/Server.vshost.exe create mode 100644 Chapter01(Socket)/Part 0/Server/Server/bin/Debug/Server.xml create mode 100644 Chapter01(Socket)/Part 0/Server/Server/obj/Debug/Server.Resources.resources create mode 100644 Chapter01(Socket)/Part 0/Server/Server/obj/Debug/Server.exe create mode 100644 Chapter01(Socket)/Part 0/Server/Server/obj/Debug/Server.pdb create mode 100644 Chapter01(Socket)/Part 0/Server/Server/obj/Debug/Server.vbproj.GenerateResource.Cache create mode 100644 Chapter01(Socket)/Part 0/Server/Server/obj/Debug/Server.xml create mode 100644 Chapter01(Socket)/Part 0/Server/Server/obj/Server.vbproj.FileList.txt create mode 100644 Chapter01(Socket)/Part 0/Server_CS/Server_CS.sln create mode 100644 Chapter01(Socket)/Part 0/Server_CS/Server_CS.suo create mode 100644 Chapter01(Socket)/Part 0/Server_CS/Server_CS/Program.cs create mode 100644 Chapter01(Socket)/Part 0/Server_CS/Server_CS/Properties/AssemblyInfo.cs create mode 100644 Chapter01(Socket)/Part 0/Server_CS/Server_CS/Server_CS.csproj create mode 100644 Chapter01(Socket)/Part 0/Server_CS/Server_CS/bin/Debug/Server_CS.exe create mode 100644 Chapter01(Socket)/Part 0/Server_CS/Server_CS/bin/Debug/Server_CS.pdb create mode 100644 Chapter01(Socket)/Part 0/Server_CS/Server_CS/bin/Debug/Server_CS.vshost.exe create mode 100644 Chapter01(Socket)/Part 0/Server_CS/Server_CS/obj/Debug/Server_CS.exe create mode 100644 Chapter01(Socket)/Part 0/Server_CS/Server_CS/obj/Debug/Server_CS.pdb create mode 100644 Chapter01(Socket)/Part 0/Server_CS/Server_CS/obj/Server_CS.csproj.FileList.txt create mode 100644 Chapter01(Socket)/Part 1/WinClient/WinClient.sln create mode 100644 Chapter01(Socket)/Part 1/WinClient/WinClient.suo create mode 100644 Chapter01(Socket)/Part 1/WinClient/WinClient/Form1.Designer.vb create mode 100644 Chapter01(Socket)/Part 1/WinClient/WinClient/Form1.resx create mode 100644 Chapter01(Socket)/Part 1/WinClient/WinClient/Form1.vb create mode 100644 Chapter01(Socket)/Part 1/WinClient/WinClient/My Project/AssemblyInfo.vb create mode 100644 Chapter01(Socket)/Part 1/WinClient/WinClient/My Project/MyApplication.myapp create mode 100644 Chapter01(Socket)/Part 1/WinClient/WinClient/My Project/MyApplication.vb create mode 100644 Chapter01(Socket)/Part 1/WinClient/WinClient/My Project/MyEvents.vb create mode 100644 Chapter01(Socket)/Part 1/WinClient/WinClient/My Project/MyResources.resx create mode 100644 Chapter01(Socket)/Part 1/WinClient/WinClient/My Project/MyResources.vb create mode 100644 Chapter01(Socket)/Part 1/WinClient/WinClient/My Project/MySettings.settings create mode 100644 Chapter01(Socket)/Part 1/WinClient/WinClient/My Project/MySettings.vb create mode 100644 Chapter01(Socket)/Part 1/WinClient/WinClient/WinClient.vbproj create mode 100644 Chapter01(Socket)/Part 1/WinClient/WinClient/WinClient.vbproj.user create mode 100644 Chapter01(Socket)/Part 1/WinClient/WinClient/app.config create mode 100644 Chapter01(Socket)/Part 1/WinClient/WinClient/bin/WinClient.exe create mode 100644 Chapter01(Socket)/Part 1/WinClient/WinClient/bin/WinClient.exe.config create mode 100644 Chapter01(Socket)/Part 1/WinClient/WinClient/bin/WinClient.pdb create mode 100644 Chapter01(Socket)/Part 1/WinClient/WinClient/bin/WinClient.vshost.exe create mode 100644 Chapter01(Socket)/Part 1/WinClient/WinClient/bin/WinClient.vshost.exe.config create mode 100644 Chapter01(Socket)/Part 1/WinClient/WinClient/bin/WinClient.xml create mode 100644 Chapter01(Socket)/Part 1/WinClient/WinClient/obj/Release/TempPE/My Project.MyResources.vb.dll create mode 100644 Chapter01(Socket)/Part 1/WinClient/WinClient/obj/Release/WinClient.Form1.resources create mode 100644 Chapter01(Socket)/Part 1/WinClient/WinClient/obj/Release/WinClient.MyResources.resources create mode 100644 Chapter01(Socket)/Part 1/WinClient/WinClient/obj/Release/WinClient.exe create mode 100644 Chapter01(Socket)/Part 1/WinClient/WinClient/obj/Release/WinClient.pdb create mode 100644 Chapter01(Socket)/Part 1/WinClient/WinClient/obj/Release/WinClient.vbproj.GenerateResource.Cache create mode 100644 Chapter01(Socket)/Part 1/WinClient/WinClient/obj/Release/WinClient.xml create mode 100644 Chapter01(Socket)/Part 1/WinClient/WinClient/obj/WinClient.vbproj.FileList.txt create mode 100644 Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS.sln create mode 100644 Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS.suo create mode 100644 Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/Form1.Designer.cs create mode 100644 Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/Form1.cs create mode 100644 Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/Form1.resx create mode 100644 Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/Program.cs create mode 100644 Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/Properties/AssemblyInfo.cs create mode 100644 Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/Properties/Resources.Designer.cs create mode 100644 Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/Properties/Resources.resx create mode 100644 Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/Properties/Settings.Designer.cs create mode 100644 Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/Properties/Settings.settings create mode 100644 Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/WinClient_CS.csproj create mode 100644 Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/bin/Debug/WinClient_CS.exe create mode 100644 Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/bin/Debug/WinClient_CS.pdb create mode 100644 Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/bin/Debug/WinClient_CS.vshost.exe create mode 100644 Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/obj/Debug/WinClient_CS.Form1.resources create mode 100644 Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/obj/Debug/WinClient_CS.Properties.Resources.resources create mode 100644 Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/obj/Debug/WinClient_CS.csproj.GenerateResource.Cache create mode 100644 Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/obj/Debug/WinClient_CS.exe create mode 100644 Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/obj/Debug/WinClient_CS.pdb create mode 100644 Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/obj/WinClient_CS.csproj.FileList.txt create mode 100644 Chapter01(Socket)/Part 1/server/server.sln create mode 100644 Chapter01(Socket)/Part 1/server/server.suo create mode 100644 Chapter01(Socket)/Part 1/server/server/ChatClient.vb create mode 100644 Chapter01(Socket)/Part 1/server/server/Module1.vb create mode 100644 Chapter01(Socket)/Part 1/server/server/My Project/AssemblyInfo.vb create mode 100644 Chapter01(Socket)/Part 1/server/server/My Project/MyApplication.myapp create mode 100644 Chapter01(Socket)/Part 1/server/server/My Project/MyApplication.vb create mode 100644 Chapter01(Socket)/Part 1/server/server/My Project/MyResources.resx create mode 100644 Chapter01(Socket)/Part 1/server/server/My Project/MyResources.vb create mode 100644 Chapter01(Socket)/Part 1/server/server/My Project/MySettings.settings create mode 100644 Chapter01(Socket)/Part 1/server/server/My Project/MySettings.vb create mode 100644 Chapter01(Socket)/Part 1/server/server/app.config create mode 100644 Chapter01(Socket)/Part 1/server/server/bin/server.exe create mode 100644 Chapter01(Socket)/Part 1/server/server/bin/server.exe.config create mode 100644 Chapter01(Socket)/Part 1/server/server/bin/server.pdb create mode 100644 Chapter01(Socket)/Part 1/server/server/bin/server.vshost.exe create mode 100644 Chapter01(Socket)/Part 1/server/server/bin/server.vshost.exe.config create mode 100644 Chapter01(Socket)/Part 1/server/server/bin/server.xml create mode 100644 Chapter01(Socket)/Part 1/server/server/obj/Debug/server.MyResources.resources create mode 100644 Chapter01(Socket)/Part 1/server/server/obj/Debug/server.exe create mode 100644 Chapter01(Socket)/Part 1/server/server/obj/Debug/server.pdb create mode 100644 Chapter01(Socket)/Part 1/server/server/obj/Debug/server.vbproj.GenerateResource.Cache create mode 100644 Chapter01(Socket)/Part 1/server/server/obj/Debug/server.xml create mode 100644 Chapter01(Socket)/Part 1/server/server/obj/server.vbproj.FileList.txt create mode 100644 Chapter01(Socket)/Part 1/server/server/server.vbproj create mode 100644 Chapter01(Socket)/Part 1/server/server/server.vbproj.user create mode 100644 Chapter01(Socket)/Part 1/server_CS/server_CS.sln create mode 100644 Chapter01(Socket)/Part 1/server_CS/server_CS.suo create mode 100644 Chapter01(Socket)/Part 1/server_CS/server_CS/ChatClient.cs create mode 100644 Chapter01(Socket)/Part 1/server_CS/server_CS/Program.cs create mode 100644 Chapter01(Socket)/Part 1/server_CS/server_CS/Properties/AssemblyInfo.cs create mode 100644 Chapter01(Socket)/Part 1/server_CS/server_CS/bin/Debug/server_CS.exe create mode 100644 Chapter01(Socket)/Part 1/server_CS/server_CS/bin/Debug/server_CS.pdb create mode 100644 Chapter01(Socket)/Part 1/server_CS/server_CS/bin/Debug/server_CS.vshost.exe create mode 100644 Chapter01(Socket)/Part 1/server_CS/server_CS/obj/Debug/server_CS.exe create mode 100644 Chapter01(Socket)/Part 1/server_CS/server_CS/obj/Debug/server_CS.pdb create mode 100644 Chapter01(Socket)/Part 1/server_CS/server_CS/obj/server_CS.csproj.FileList.txt create mode 100644 Chapter01(Socket)/Part 1/server_CS/server_CS/server_CS.csproj create mode 100644 Chapter01(Socket)/Part 2/WinClient/WinClient.sln create mode 100644 Chapter01(Socket)/Part 2/WinClient/WinClient.suo create mode 100644 Chapter01(Socket)/Part 2/WinClient/WinClient/Form1.Designer.vb create mode 100644 Chapter01(Socket)/Part 2/WinClient/WinClient/Form1.resx create mode 100644 Chapter01(Socket)/Part 2/WinClient/WinClient/Form1.vb create mode 100644 Chapter01(Socket)/Part 2/WinClient/WinClient/My Project/AssemblyInfo.vb create mode 100644 Chapter01(Socket)/Part 2/WinClient/WinClient/My Project/MyApplication.myapp create mode 100644 Chapter01(Socket)/Part 2/WinClient/WinClient/My Project/MyApplication.vb create mode 100644 Chapter01(Socket)/Part 2/WinClient/WinClient/My Project/MyEvents.vb create mode 100644 Chapter01(Socket)/Part 2/WinClient/WinClient/My Project/MyResources.resx create mode 100644 Chapter01(Socket)/Part 2/WinClient/WinClient/My Project/MyResources.vb create mode 100644 Chapter01(Socket)/Part 2/WinClient/WinClient/My Project/MySettings.settings create mode 100644 Chapter01(Socket)/Part 2/WinClient/WinClient/My Project/MySettings.vb create mode 100644 Chapter01(Socket)/Part 2/WinClient/WinClient/WinClient.vbproj create mode 100644 Chapter01(Socket)/Part 2/WinClient/WinClient/WinClient.vbproj.user create mode 100644 Chapter01(Socket)/Part 2/WinClient/WinClient/app.config create mode 100644 Chapter01(Socket)/Part 2/WinClient/WinClient/bin/WinClient.exe create mode 100644 Chapter01(Socket)/Part 2/WinClient/WinClient/bin/WinClient.exe.config create mode 100644 Chapter01(Socket)/Part 2/WinClient/WinClient/bin/WinClient.pdb create mode 100644 Chapter01(Socket)/Part 2/WinClient/WinClient/bin/WinClient.vshost.exe create mode 100644 Chapter01(Socket)/Part 2/WinClient/WinClient/bin/WinClient.vshost.exe.config create mode 100644 Chapter01(Socket)/Part 2/WinClient/WinClient/bin/WinClient.xml create mode 100644 Chapter01(Socket)/Part 2/WinClient/WinClient/obj/Debug/WinClient.Form1.resources create mode 100644 Chapter01(Socket)/Part 2/WinClient/WinClient/obj/Debug/WinClient.MyResources.resources create mode 100644 Chapter01(Socket)/Part 2/WinClient/WinClient/obj/Debug/WinClient.exe create mode 100644 Chapter01(Socket)/Part 2/WinClient/WinClient/obj/Debug/WinClient.pdb create mode 100644 Chapter01(Socket)/Part 2/WinClient/WinClient/obj/Debug/WinClient.vbproj.GenerateResource.Cache create mode 100644 Chapter01(Socket)/Part 2/WinClient/WinClient/obj/Debug/WinClient.xml create mode 100644 Chapter01(Socket)/Part 2/WinClient/WinClient/obj/WinClient.vbproj.FileList.txt create mode 100644 Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS.sln create mode 100644 Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS.suo create mode 100644 Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS/Form1.Designer.cs create mode 100644 Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS/Form1.cs create mode 100644 Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS/Form1.resx create mode 100644 Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS/Program.cs create mode 100644 Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS/Properties/AssemblyInfo.cs create mode 100644 Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS/Properties/Resources.Designer.cs create mode 100644 Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS/Properties/Resources.resx create mode 100644 Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS/Properties/Settings.Designer.cs create mode 100644 Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS/Properties/Settings.settings create mode 100644 Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS/WinClient_CS.csproj create mode 100644 Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS/bin/Debug/WinClient_CS.exe create mode 100644 Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS/bin/Debug/WinClient_CS.pdb create mode 100644 Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS/bin/Debug/WinClient_CS.vshost.exe create mode 100644 Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS/obj/Debug/WinClient_CS.Form1.resources create mode 100644 Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS/obj/Debug/WinClient_CS.Properties.Resources.resources create mode 100644 Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS/obj/Debug/WinClient_CS.csproj.GenerateResource.Cache create mode 100644 Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS/obj/Debug/WinClient_CS.exe create mode 100644 Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS/obj/Debug/WinClient_CS.pdb create mode 100644 Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS/obj/WinClient_CS.csproj.FileList.txt create mode 100644 Chapter01(Socket)/Part 2/server/server.sln create mode 100644 Chapter01(Socket)/Part 2/server/server.suo create mode 100644 Chapter01(Socket)/Part 2/server/server/ChatClient.vb create mode 100644 Chapter01(Socket)/Part 2/server/server/Module1.vb create mode 100644 Chapter01(Socket)/Part 2/server/server/My Project/AssemblyInfo.vb create mode 100644 Chapter01(Socket)/Part 2/server/server/My Project/MyApplication.myapp create mode 100644 Chapter01(Socket)/Part 2/server/server/My Project/MyApplication.vb create mode 100644 Chapter01(Socket)/Part 2/server/server/My Project/MyResources.resx create mode 100644 Chapter01(Socket)/Part 2/server/server/My Project/MyResources.vb create mode 100644 Chapter01(Socket)/Part 2/server/server/My Project/MySettings.settings create mode 100644 Chapter01(Socket)/Part 2/server/server/My Project/MySettings.vb create mode 100644 Chapter01(Socket)/Part 2/server/server/app.config create mode 100644 Chapter01(Socket)/Part 2/server/server/bin/server.exe create mode 100644 Chapter01(Socket)/Part 2/server/server/bin/server.exe.config create mode 100644 Chapter01(Socket)/Part 2/server/server/bin/server.pdb create mode 100644 Chapter01(Socket)/Part 2/server/server/bin/server.vshost.exe create mode 100644 Chapter01(Socket)/Part 2/server/server/bin/server.vshost.exe.config create mode 100644 Chapter01(Socket)/Part 2/server/server/bin/server.xml create mode 100644 Chapter01(Socket)/Part 2/server/server/obj/Debug/server.MyResources.resources create mode 100644 Chapter01(Socket)/Part 2/server/server/obj/Debug/server.exe create mode 100644 Chapter01(Socket)/Part 2/server/server/obj/Debug/server.pdb create mode 100644 Chapter01(Socket)/Part 2/server/server/obj/Debug/server.vbproj.GenerateResource.Cache create mode 100644 Chapter01(Socket)/Part 2/server/server/obj/Debug/server.xml create mode 100644 Chapter01(Socket)/Part 2/server/server/obj/server.vbproj.FileList.txt create mode 100644 Chapter01(Socket)/Part 2/server/server/server.vbproj create mode 100644 Chapter01(Socket)/Part 2/server/server/server.vbproj.user create mode 100644 Chapter01(Socket)/Part 2/server_CS/server_CS.sln create mode 100644 Chapter01(Socket)/Part 2/server_CS/server_CS.suo create mode 100644 Chapter01(Socket)/Part 2/server_CS/server_CS/ChatClient.cs create mode 100644 Chapter01(Socket)/Part 2/server_CS/server_CS/Program.cs create mode 100644 Chapter01(Socket)/Part 2/server_CS/server_CS/Properties/AssemblyInfo.cs create mode 100644 Chapter01(Socket)/Part 2/server_CS/server_CS/bin/Debug/server_CS.exe create mode 100644 Chapter01(Socket)/Part 2/server_CS/server_CS/bin/Debug/server_CS.pdb create mode 100644 Chapter01(Socket)/Part 2/server_CS/server_CS/bin/Debug/server_CS.vshost.exe create mode 100644 Chapter01(Socket)/Part 2/server_CS/server_CS/obj/Debug/server_CS.exe create mode 100644 Chapter01(Socket)/Part 2/server_CS/server_CS/obj/Debug/server_CS.pdb create mode 100644 Chapter01(Socket)/Part 2/server_CS/server_CS/obj/server_CS.csproj.FileList.txt create mode 100644 Chapter01(Socket)/Part 2/server_CS/server_CS/server_CS.csproj create mode 100644 Chapter02(Serial)/SerialCommChat/SerialCommChat.sln create mode 100644 Chapter02(Serial)/SerialCommChat/SerialCommChat.suo create mode 100644 Chapter02(Serial)/SerialCommChat/SerialCommChat/Form1.Designer.vb create mode 100644 Chapter02(Serial)/SerialCommChat/SerialCommChat/Form1.resx create mode 100644 Chapter02(Serial)/SerialCommChat/SerialCommChat/Form1.vb create mode 100644 Chapter02(Serial)/SerialCommChat/SerialCommChat/My Project/Application.Designer.vb create mode 100644 Chapter02(Serial)/SerialCommChat/SerialCommChat/My Project/Application.myapp create mode 100644 Chapter02(Serial)/SerialCommChat/SerialCommChat/My Project/AssemblyInfo.vb create mode 100644 Chapter02(Serial)/SerialCommChat/SerialCommChat/My Project/Resources.Designer.vb create mode 100644 Chapter02(Serial)/SerialCommChat/SerialCommChat/My Project/Resources.resx create mode 100644 Chapter02(Serial)/SerialCommChat/SerialCommChat/My Project/Settings.Designer.vb create mode 100644 Chapter02(Serial)/SerialCommChat/SerialCommChat/My Project/Settings.settings create mode 100644 Chapter02(Serial)/SerialCommChat/SerialCommChat/SerialCommChat.vbproj create mode 100644 Chapter02(Serial)/SerialCommChat/SerialCommChat/SerialCommChat.vbproj.user create mode 100644 Chapter02(Serial)/SerialCommChat/SerialCommChat/bin/Debug/SerialCommChat.exe create mode 100644 Chapter02(Serial)/SerialCommChat/SerialCommChat/bin/Debug/SerialCommChat.pdb create mode 100644 Chapter02(Serial)/SerialCommChat/SerialCommChat/bin/Debug/SerialCommChat.vshost.exe create mode 100644 Chapter02(Serial)/SerialCommChat/SerialCommChat/bin/Debug/SerialCommChat.xml create mode 100644 Chapter02(Serial)/SerialCommChat/SerialCommChat/obj/Debug/SerialCommChat.Form1.resources create mode 100644 Chapter02(Serial)/SerialCommChat/SerialCommChat/obj/Debug/SerialCommChat.Resources.resources create mode 100644 Chapter02(Serial)/SerialCommChat/SerialCommChat/obj/Debug/SerialCommChat.exe create mode 100644 Chapter02(Serial)/SerialCommChat/SerialCommChat/obj/Debug/SerialCommChat.pdb create mode 100644 Chapter02(Serial)/SerialCommChat/SerialCommChat/obj/Debug/SerialCommChat.vbproj.GenerateResource.Cache create mode 100644 Chapter02(Serial)/SerialCommChat/SerialCommChat/obj/Debug/SerialCommChat.xml create mode 100644 Chapter02(Serial)/SerialCommChat/SerialCommChat/obj/SerialCommChat.vbproj.FileList.txt create mode 100644 Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC.sln create mode 100644 Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC.suo create mode 100644 Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC/Form1.Designer.vb create mode 100644 Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC/Form1.resx create mode 100644 Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC/Form1.vb create mode 100644 Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC/My Project/AssemblyInfo.vb create mode 100644 Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC/My Project/Resources.Designer.vb create mode 100644 Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC/My Project/Resources.resx create mode 100644 Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC/SerialCommChatPocketPC.vbproj create mode 100644 Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC/SerialCommChatPocketPC.vbproj.user create mode 100644 Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC/bin/Debug/SerialCommChatPocketPC.exe create mode 100644 Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC/bin/Debug/SerialCommChatPocketPC.pdb create mode 100644 Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC/bin/Debug/SerialCommChatPocketPC.xml create mode 100644 Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC/obj/Debug/SerialCommChatPocketPC.Form1.resources create mode 100644 Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC/obj/Debug/SerialCommChatPocketPC.Resources.resources create mode 100644 Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC/obj/Debug/SerialCommChatPocketPC.exe create mode 100644 Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC/obj/Debug/SerialCommChatPocketPC.pdb create mode 100644 Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC/obj/Debug/SerialCommChatPocketPC.vbproj.GenerateResource.Cache create mode 100644 Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC/obj/Debug/SerialCommChatPocketPC.xml create mode 100644 Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC/obj/Debug/TempPE/My Project.Resources.Designer.vb.dll create mode 100644 Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC/obj/SerialCommChatPocketPC.vbproj.FileList.txt create mode 100644 Chapter02(Serial)/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS.sln create mode 100644 Chapter02(Serial)/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS.suo create mode 100644 Chapter02(Serial)/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS/Form1.Designer.cs create mode 100644 Chapter02(Serial)/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS/Form1.cs create mode 100644 Chapter02(Serial)/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS/Form1.resx create mode 100644 Chapter02(Serial)/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS/Program.cs create mode 100644 Chapter02(Serial)/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS/Properties/AssemblyInfo.cs create mode 100644 Chapter02(Serial)/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS/Properties/Resources.Designer.cs create mode 100644 Chapter02(Serial)/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS/Properties/Resources.resx create mode 100644 Chapter02(Serial)/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS.csproj create mode 100644 Chapter02(Serial)/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS.csproj.user create mode 100644 Chapter02(Serial)/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS/bin/Debug/SerialCommChatPocketPC_CS.exe create mode 100644 Chapter02(Serial)/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS/bin/Debug/SerialCommChatPocketPC_CS.pdb create mode 100644 Chapter02(Serial)/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS/obj/Debug/SerialCommChatPocketPC_CS.Form1.resources create mode 100644 Chapter02(Serial)/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS/obj/Debug/SerialCommChatPocketPC_CS.Properties.Resources.resources create mode 100644 Chapter02(Serial)/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS/obj/Debug/SerialCommChatPocketPC_CS.csproj.GenerateResource.Cache create mode 100644 Chapter02(Serial)/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS/obj/Debug/SerialCommChatPocketPC_CS.exe create mode 100644 Chapter02(Serial)/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS/obj/Debug/SerialCommChatPocketPC_CS.pdb create mode 100644 Chapter02(Serial)/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS/obj/SerialCommChatPocketPC_CS.csproj.FileList.txt create mode 100644 Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS.sln create mode 100644 Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS.suo create mode 100644 Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS/Form1.Designer.cs create mode 100644 Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS/Form1.cs create mode 100644 Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS/Form1.resx create mode 100644 Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS/Program.cs create mode 100644 Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS/Properties/AssemblyInfo.cs create mode 100644 Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS/Properties/Resources.Designer.cs create mode 100644 Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS/Properties/Resources.resx create mode 100644 Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS/Properties/Settings.Designer.cs create mode 100644 Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS/Properties/Settings.settings create mode 100644 Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS/SerialCommChat_CS.csproj create mode 100644 Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS/bin/Debug/SerialCommChat_CS.exe create mode 100644 Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS/bin/Debug/SerialCommChat_CS.pdb create mode 100644 Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS/bin/Debug/SerialCommChat_CS.vshost.exe create mode 100644 Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS/obj/Debug/SerialCommChat_CS.Form1.resources create mode 100644 Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS/obj/Debug/SerialCommChat_CS.Properties.Resources.resources create mode 100644 Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS/obj/Debug/SerialCommChat_CS.csproj.GenerateResource.Cache create mode 100644 Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS/obj/Debug/SerialCommChat_CS.exe create mode 100644 Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS/obj/Debug/SerialCommChat_CS.pdb create mode 100644 Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS/obj/SerialCommChat_CS.csproj.FileList.txt create mode 100644 Chapter02(Serial)/VirtualEarth/GPSReceiver/Form1.Designer.vb create mode 100644 Chapter02(Serial)/VirtualEarth/GPSReceiver/Form1.resx create mode 100644 Chapter02(Serial)/VirtualEarth/GPSReceiver/Form1.vb create mode 100644 Chapter02(Serial)/VirtualEarth/GPSReceiver/GPSReceiver.suo create mode 100644 Chapter02(Serial)/VirtualEarth/GPSReceiver/GPSReceiver.vbproj create mode 100644 Chapter02(Serial)/VirtualEarth/GPSReceiver/GPSReceiver.vbproj.user create mode 100644 Chapter02(Serial)/VirtualEarth/GPSReceiver/My Project/AssemblyInfo.vb create mode 100644 Chapter02(Serial)/VirtualEarth/GPSReceiver/My Project/Resources.Designer.vb create mode 100644 Chapter02(Serial)/VirtualEarth/GPSReceiver/My Project/Resources.resx create mode 100644 Chapter02(Serial)/VirtualEarth/GPSReceiver/bin/Debug/GPSReceiver.exe create mode 100644 Chapter02(Serial)/VirtualEarth/GPSReceiver/bin/Debug/GPSReceiver.pdb create mode 100644 Chapter02(Serial)/VirtualEarth/GPSReceiver/bin/Debug/GPSReceiver.xml create mode 100644 Chapter02(Serial)/VirtualEarth/GPSReceiver/obj/Debug/GPSReceiver.Form1.resources create mode 100644 Chapter02(Serial)/VirtualEarth/GPSReceiver/obj/Debug/GPSReceiver.Resources.resources create mode 100644 Chapter02(Serial)/VirtualEarth/GPSReceiver/obj/Debug/GPSReceiver.exe create mode 100644 Chapter02(Serial)/VirtualEarth/GPSReceiver/obj/Debug/GPSReceiver.pdb create mode 100644 Chapter02(Serial)/VirtualEarth/GPSReceiver/obj/Debug/GPSReceiver.vbproj.GenerateResource.Cache create mode 100644 Chapter02(Serial)/VirtualEarth/GPSReceiver/obj/Debug/GPSReceiver.xml create mode 100644 Chapter02(Serial)/VirtualEarth/GPSReceiver/obj/Debug/TempPE/My Project.Resources.Designer.vb.dll create mode 100644 Chapter02(Serial)/VirtualEarth/GPSReceiver/obj/GPSReceiver.vbproj.FileList.txt create mode 100644 Chapter02(Serial)/VirtualEarth/VirtualEarth/Copy of Map.html create mode 100644 Chapter02(Serial)/VirtualEarth/VirtualEarth/Form1.Designer.vb create mode 100644 Chapter02(Serial)/VirtualEarth/VirtualEarth/Form1.resx create mode 100644 Chapter02(Serial)/VirtualEarth/VirtualEarth/Form1.vb create mode 100644 Chapter02(Serial)/VirtualEarth/VirtualEarth/Map.html create mode 100644 Chapter02(Serial)/VirtualEarth/VirtualEarth/My Project/Application.Designer.vb create mode 100644 Chapter02(Serial)/VirtualEarth/VirtualEarth/My Project/Application.myapp create mode 100644 Chapter02(Serial)/VirtualEarth/VirtualEarth/My Project/AssemblyInfo.vb create mode 100644 Chapter02(Serial)/VirtualEarth/VirtualEarth/My Project/Resources.Designer.vb create mode 100644 Chapter02(Serial)/VirtualEarth/VirtualEarth/My Project/Resources.resx create mode 100644 Chapter02(Serial)/VirtualEarth/VirtualEarth/My Project/Settings.Designer.vb create mode 100644 Chapter02(Serial)/VirtualEarth/VirtualEarth/My Project/Settings.settings create mode 100644 Chapter02(Serial)/VirtualEarth/VirtualEarth/VirtualEarth.sln create mode 100644 Chapter02(Serial)/VirtualEarth/VirtualEarth/VirtualEarth.suo create mode 100644 Chapter02(Serial)/VirtualEarth/VirtualEarth/VirtualEarth.vbproj create mode 100644 Chapter02(Serial)/VirtualEarth/VirtualEarth/bin/Debug/Copy of Map.html create mode 100644 Chapter02(Serial)/VirtualEarth/VirtualEarth/bin/Debug/Map.html create mode 100644 Chapter02(Serial)/VirtualEarth/VirtualEarth/bin/Debug/VirtualEarth.exe create mode 100644 Chapter02(Serial)/VirtualEarth/VirtualEarth/bin/Debug/VirtualEarth.pdb create mode 100644 Chapter02(Serial)/VirtualEarth/VirtualEarth/bin/Debug/VirtualEarth.vshost.exe create mode 100644 Chapter02(Serial)/VirtualEarth/VirtualEarth/bin/Debug/VirtualEarth.xml create mode 100644 Chapter02(Serial)/VirtualEarth/VirtualEarth/obj/Debug/TempPE/My Project.Resources.Designer.vb.dll create mode 100644 Chapter02(Serial)/VirtualEarth/VirtualEarth/obj/Debug/VirtualEarth.Form1.resources create mode 100644 Chapter02(Serial)/VirtualEarth/VirtualEarth/obj/Debug/VirtualEarth.Resources.resources create mode 100644 Chapter02(Serial)/VirtualEarth/VirtualEarth/obj/Debug/VirtualEarth.exe create mode 100644 Chapter02(Serial)/VirtualEarth/VirtualEarth/obj/Debug/VirtualEarth.pdb create mode 100644 Chapter02(Serial)/VirtualEarth/VirtualEarth/obj/Debug/VirtualEarth.vbproj.GenerateResource.Cache create mode 100644 Chapter02(Serial)/VirtualEarth/VirtualEarth/obj/Debug/VirtualEarth.xml create mode 100644 Chapter02(Serial)/VirtualEarth/VirtualEarth/obj/VirtualEarth.vbproj.FileList.txt create mode 100644 Chapter02(Serial)/VirtualEarth_CS/Form1.Designer.cs create mode 100644 Chapter02(Serial)/VirtualEarth_CS/Form1.cs create mode 100644 Chapter02(Serial)/VirtualEarth_CS/Form1.resx create mode 100644 Chapter02(Serial)/VirtualEarth_CS/Map.html create mode 100644 Chapter02(Serial)/VirtualEarth_CS/Program.cs create mode 100644 Chapter02(Serial)/VirtualEarth_CS/Properties/AssemblyInfo.cs create mode 100644 Chapter02(Serial)/VirtualEarth_CS/Properties/Resources.Designer.cs create mode 100644 Chapter02(Serial)/VirtualEarth_CS/Properties/Resources.resx create mode 100644 Chapter02(Serial)/VirtualEarth_CS/Properties/Settings.Designer.cs create mode 100644 Chapter02(Serial)/VirtualEarth_CS/Properties/Settings.settings create mode 100644 Chapter02(Serial)/VirtualEarth_CS/VirtualEarth_CS.csproj create mode 100644 Chapter02(Serial)/VirtualEarth_CS/VirtualEarth_CS.sln create mode 100644 Chapter02(Serial)/VirtualEarth_CS/VirtualEarth_CS.suo create mode 100644 Chapter02(Serial)/VirtualEarth_CS/bin/Debug/Map.html create mode 100644 Chapter02(Serial)/VirtualEarth_CS/bin/Debug/VirtualEarth_CS.exe create mode 100644 Chapter02(Serial)/VirtualEarth_CS/bin/Debug/VirtualEarth_CS.pdb create mode 100644 Chapter02(Serial)/VirtualEarth_CS/bin/Debug/VirtualEarth_CS.vshost.exe create mode 100644 Chapter02(Serial)/VirtualEarth_CS/obj/Debug/VirtualEarth_CS.Form1.resources create mode 100644 Chapter02(Serial)/VirtualEarth_CS/obj/Debug/VirtualEarth_CS.Properties.Resources.resources create mode 100644 Chapter02(Serial)/VirtualEarth_CS/obj/Debug/VirtualEarth_CS.csproj.GenerateResource.Cache create mode 100644 Chapter02(Serial)/VirtualEarth_CS/obj/Debug/VirtualEarth_CS.exe create mode 100644 Chapter02(Serial)/VirtualEarth_CS/obj/Debug/VirtualEarth_CS.pdb create mode 100644 Chapter02(Serial)/VirtualEarth_CS/obj/VirtualEarth_CS.csproj.FileList.txt create mode 100644 Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader.sln create mode 100644 Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader.suo create mode 100644 Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/DBClass.vb create mode 100644 Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/FingerPrintReader.vbproj create mode 100644 Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/FingerPrintReader.vbproj.user create mode 100644 Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/Form1.Designer.vb create mode 100644 Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/Form1.resx create mode 100644 Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/Form1.vb create mode 100644 Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/GrFingerSample.mdb create mode 100644 Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/My Project/Application.Designer.vb create mode 100644 Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/My Project/Application.myapp create mode 100644 Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/My Project/AssemblyInfo.vb create mode 100644 Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/My Project/Resources.Designer.vb create mode 100644 Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/My Project/Resources.resx create mode 100644 Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/My Project/Settings.Designer.vb create mode 100644 Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/My Project/Settings.settings create mode 100644 Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/Resources/fingerprintreader.jpg create mode 100644 Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/Util.vb create mode 100644 Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/bin/Debug/AxInterop.GrFingerXLib.dll create mode 100644 Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/bin/Debug/FingerPrintReader.exe create mode 100644 Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/bin/Debug/FingerPrintReader.pdb create mode 100644 Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/bin/Debug/FingerPrintReader.vshost.exe create mode 100644 Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/bin/Debug/FingerPrintReader.xml create mode 100644 Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/bin/Debug/GrFingerSample.mdb create mode 100644 Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/bin/Debug/Interop.GrFingerXLib.dll create mode 100644 Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/obj/Debug/AxInterop.GrFingerXLib.dll create mode 100644 Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/obj/Debug/FingerPrintReader.Form1.resources create mode 100644 Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/obj/Debug/FingerPrintReader.Resources.resources create mode 100644 Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/obj/Debug/FingerPrintReader.exe create mode 100644 Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/obj/Debug/FingerPrintReader.pdb create mode 100644 Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/obj/Debug/FingerPrintReader.vbproj.GenerateResource.Cache create mode 100644 Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/obj/Debug/FingerPrintReader.vbproj.ResolveComReference.cache create mode 100644 Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/obj/Debug/FingerPrintReader.xml create mode 100644 Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/obj/Debug/Interop.GrFingerXLib.dll create mode 100644 Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/obj/Debug/TempPE/My Project.Resources.Designer.vb.dll create mode 100644 Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/obj/FingerPrintReader.vbproj.FileList.txt create mode 100644 Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS.sln create mode 100644 Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS.suo create mode 100644 Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/DBClass.cs create mode 100644 Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/FingerPrintReader_CS.csproj create mode 100644 Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/FingerPrintReader_CS.csproj.user create mode 100644 Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/Form1.Designer.cs create mode 100644 Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/Form1.cs create mode 100644 Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/Form1.resx create mode 100644 Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/GrFingerSample.mdb create mode 100644 Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/Program.cs create mode 100644 Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/Properties/AssemblyInfo.cs create mode 100644 Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/Properties/Resources.Designer.cs create mode 100644 Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/Properties/Resources.resx create mode 100644 Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/Properties/Settings.Designer.cs create mode 100644 Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/Properties/Settings.settings create mode 100644 Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/Resources/fingerprintreader.jpg create mode 100644 Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/Util.cs create mode 100644 Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/bin/Debug/AxInterop.GrFingerXLib.dll create mode 100644 Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/bin/Debug/FingerPrintReader_CS.exe create mode 100644 Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/bin/Debug/FingerPrintReader_CS.pdb create mode 100644 Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/bin/Debug/FingerPrintReader_CS.vshost.exe create mode 100644 Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/bin/Debug/GrFingerSample.mdb create mode 100644 Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/bin/Debug/Interop.GrFingerXLib.dll create mode 100644 Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/obj/Debug/AxInterop.GrFingerXLib.dll create mode 100644 Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/obj/Debug/FingerPrintReader_CS.Form1.resources create mode 100644 Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/obj/Debug/FingerPrintReader_CS.Properties.Resources.resources create mode 100644 Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/obj/Debug/FingerPrintReader_CS.csproj.GenerateResource.Cache create mode 100644 Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/obj/Debug/FingerPrintReader_CS.csproj.ResolveComReference.cache create mode 100644 Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/obj/Debug/FingerPrintReader_CS.exe create mode 100644 Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/obj/Debug/FingerPrintReader_CS.pdb create mode 100644 Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/obj/Debug/Interop.GrFingerXLib.dll create mode 100644 Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/obj/Debug/TempPE/Properties.Resources.Designer.cs.dll create mode 100644 Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/obj/FingerPrintReader_CS.csproj.FileList.txt create mode 100644 Chapter04(Infrared)/IRChat/IRChat.sln create mode 100644 Chapter04(Infrared)/IRChat/IRChat.suo create mode 100644 Chapter04(Infrared)/IRChat/IRChat/Form1.Designer.vb create mode 100644 Chapter04(Infrared)/IRChat/IRChat/Form1.resx create mode 100644 Chapter04(Infrared)/IRChat/IRChat/Form1.vb create mode 100644 Chapter04(Infrared)/IRChat/IRChat/IRChat.vbproj create mode 100644 Chapter04(Infrared)/IRChat/IRChat/IRChat.vbproj.user create mode 100644 Chapter04(Infrared)/IRChat/IRChat/My Project/AssemblyInfo.vb create mode 100644 Chapter04(Infrared)/IRChat/IRChat/My Project/Resources.Designer.vb create mode 100644 Chapter04(Infrared)/IRChat/IRChat/My Project/Resources.resx create mode 100644 Chapter04(Infrared)/IRChat/IRChat/bin/Debug/IRChat.exe create mode 100644 Chapter04(Infrared)/IRChat/IRChat/bin/Debug/IRChat.pdb create mode 100644 Chapter04(Infrared)/IRChat/IRChat/bin/Debug/IRChat.xml create mode 100644 Chapter04(Infrared)/IRChat/IRChat/obj/Debug/IRChat.Form1.resources create mode 100644 Chapter04(Infrared)/IRChat/IRChat/obj/Debug/IRChat.Resources.resources create mode 100644 Chapter04(Infrared)/IRChat/IRChat/obj/Debug/IRChat.exe create mode 100644 Chapter04(Infrared)/IRChat/IRChat/obj/Debug/IRChat.pdb create mode 100644 Chapter04(Infrared)/IRChat/IRChat/obj/Debug/IRChat.vbproj.GenerateResource.Cache create mode 100644 Chapter04(Infrared)/IRChat/IRChat/obj/Debug/IRChat.xml create mode 100644 Chapter04(Infrared)/IRChat/IRChat/obj/Debug/ResolveAssemblyReference.cache create mode 100644 Chapter04(Infrared)/IRChat/IRChat/obj/Debug/TempPE/My Project.Resources.Designer.vb.dll create mode 100644 Chapter04(Infrared)/IRChat/IRChat/obj/IRChat.vbproj.FileList.txt create mode 100644 Chapter04(Infrared)/IRChat_CS/IRChat_CS.sln create mode 100644 Chapter04(Infrared)/IRChat_CS/IRChat_CS.suo create mode 100644 Chapter04(Infrared)/IRChat_CS/IRChat_CS/Form1.Designer.cs create mode 100644 Chapter04(Infrared)/IRChat_CS/IRChat_CS/Form1.cs create mode 100644 Chapter04(Infrared)/IRChat_CS/IRChat_CS/Form1.resx create mode 100644 Chapter04(Infrared)/IRChat_CS/IRChat_CS/IRChat_CS.csproj create mode 100644 Chapter04(Infrared)/IRChat_CS/IRChat_CS/IRChat_CS.csproj.user create mode 100644 Chapter04(Infrared)/IRChat_CS/IRChat_CS/Program.cs create mode 100644 Chapter04(Infrared)/IRChat_CS/IRChat_CS/Properties/AssemblyInfo.cs create mode 100644 Chapter04(Infrared)/IRChat_CS/IRChat_CS/Properties/Resources.Designer.cs create mode 100644 Chapter04(Infrared)/IRChat_CS/IRChat_CS/Properties/Resources.resx create mode 100644 Chapter04(Infrared)/IRChat_CS/IRChat_CS/bin/Debug/IRChat_CS.exe create mode 100644 Chapter04(Infrared)/IRChat_CS/IRChat_CS/bin/Debug/IRChat_CS.pdb create mode 100644 Chapter04(Infrared)/IRChat_CS/IRChat_CS/obj/Debug/IRChat_CS.Form1.resources create mode 100644 Chapter04(Infrared)/IRChat_CS/IRChat_CS/obj/Debug/IRChat_CS.Properties.Resources.resources create mode 100644 Chapter04(Infrared)/IRChat_CS/IRChat_CS/obj/Debug/IRChat_CS.csproj.GenerateResource.Cache create mode 100644 Chapter04(Infrared)/IRChat_CS/IRChat_CS/obj/Debug/IRChat_CS.exe create mode 100644 Chapter04(Infrared)/IRChat_CS/IRChat_CS/obj/Debug/IRChat_CS.pdb create mode 100644 Chapter04(Infrared)/IRChat_CS/IRChat_CS/obj/Debug/ResolveAssemblyReference.cache create mode 100644 Chapter04(Infrared)/IRChat_CS/IRChat_CS/obj/IRChat_CS.csproj.FileList.txt create mode 100644 Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop.sln create mode 100644 Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop.suo create mode 100644 Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/Form1.Designer.vb create mode 100644 Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/Form1.resx create mode 100644 Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/Form1.vb create mode 100644 Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/IRChat_Desktop.vbproj create mode 100644 Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/IRChat_Desktop.vbproj.user create mode 100644 Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/My Project/Application.Designer.vb create mode 100644 Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/My Project/Application.myapp create mode 100644 Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/My Project/AssemblyInfo.vb create mode 100644 Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/My Project/Resources.Designer.vb create mode 100644 Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/My Project/Resources.resx create mode 100644 Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/My Project/Settings.Designer.vb create mode 100644 Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/My Project/Settings.settings create mode 100644 Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/bin/Debug/IRChat_Desktop.exe create mode 100644 Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/bin/Debug/IRChat_Desktop.pdb create mode 100644 Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/bin/Debug/IRChat_Desktop.vshost.exe create mode 100644 Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/bin/Debug/IRChat_Desktop.xml create mode 100644 Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/bin/Debug/InTheHand.Net.Personal.dll create mode 100644 Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/bin/Debug/InTheHand.Net.Personal.xml create mode 100644 Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/obj/Debug/IRChat_Desktop.Form1.resources create mode 100644 Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/obj/Debug/IRChat_Desktop.Resources.resources create mode 100644 Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/obj/Debug/IRChat_Desktop.exe create mode 100644 Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/obj/Debug/IRChat_Desktop.pdb create mode 100644 Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/obj/Debug/IRChat_Desktop.vbproj.GenerateResource.Cache create mode 100644 Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/obj/Debug/IRChat_Desktop.xml create mode 100644 Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/obj/Debug/ResolveAssemblyReference.cache create mode 100644 Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/obj/IRChat_Desktop.vbproj.FileList.txt create mode 100644 Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS.sln create mode 100644 Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS.suo create mode 100644 Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/Form1.Designer.cs create mode 100644 Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/Form1.cs create mode 100644 Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/Form1.resx create mode 100644 Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/IRChat_Desktop_CS.csproj create mode 100644 Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/Program.cs create mode 100644 Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/Properties/AssemblyInfo.cs create mode 100644 Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/Properties/Resources.Designer.cs create mode 100644 Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/Properties/Resources.resx create mode 100644 Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/Properties/Settings.Designer.cs create mode 100644 Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/Properties/Settings.settings create mode 100644 Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/bin/Debug/IRChat_Desktop_CS.exe create mode 100644 Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/bin/Debug/IRChat_Desktop_CS.pdb create mode 100644 Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/bin/Debug/IRChat_Desktop_CS.vshost.exe create mode 100644 Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/bin/Debug/InTheHand.Net.Personal.dll create mode 100644 Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/bin/Debug/InTheHand.Net.Personal.xml create mode 100644 Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/obj/Debug/IRChat_Desktop_CS.Form1.resources create mode 100644 Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/obj/Debug/IRChat_Desktop_CS.Properties.Resources.resources create mode 100644 Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/obj/Debug/IRChat_Desktop_CS.csproj.GenerateResource.Cache create mode 100644 Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/obj/Debug/IRChat_Desktop_CS.exe create mode 100644 Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/obj/Debug/IRChat_Desktop_CS.pdb create mode 100644 Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/obj/Debug/ResolveAssemblyReference.cache create mode 100644 Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/obj/IRChat_Desktop_CS.csproj.FileList.txt create mode 100644 Chapter05(RFID)/Attendance_Parallax/Attendance.sln create mode 100644 Chapter05(RFID)/Attendance_Parallax/Attendance.suo create mode 100644 Chapter05(RFID)/Attendance_Parallax/Attendance.vbproj create mode 100644 Chapter05(RFID)/Attendance_Parallax/Attendance.vbproj.user create mode 100644 Chapter05(RFID)/Attendance_Parallax/Form1.Designer.vb create mode 100644 Chapter05(RFID)/Attendance_Parallax/Form1.resx create mode 100644 Chapter05(RFID)/Attendance_Parallax/Form1.vb create mode 100644 Chapter05(RFID)/Attendance_Parallax/My Project/Application.Designer.vb create mode 100644 Chapter05(RFID)/Attendance_Parallax/My Project/Application.myapp create mode 100644 Chapter05(RFID)/Attendance_Parallax/My Project/AssemblyInfo.vb create mode 100644 Chapter05(RFID)/Attendance_Parallax/My Project/Resources.Designer.vb create mode 100644 Chapter05(RFID)/Attendance_Parallax/My Project/Resources.resx create mode 100644 Chapter05(RFID)/Attendance_Parallax/My Project/Settings.Designer.vb create mode 100644 Chapter05(RFID)/Attendance_Parallax/My Project/Settings.settings create mode 100644 Chapter05(RFID)/Attendance_Parallax/NorthwindDataSet.Designer.vb create mode 100644 Chapter05(RFID)/Attendance_Parallax/NorthwindDataSet.xsc create mode 100644 Chapter05(RFID)/Attendance_Parallax/NorthwindDataSet.xsd create mode 100644 Chapter05(RFID)/Attendance_Parallax/NorthwindDataSet.xss create mode 100644 Chapter05(RFID)/Attendance_Parallax/app.config create mode 100644 Chapter05(RFID)/Attendance_Parallax/bin/Debug/Attendance.exe create mode 100644 Chapter05(RFID)/Attendance_Parallax/bin/Debug/Attendance.exe.config create mode 100644 Chapter05(RFID)/Attendance_Parallax/bin/Debug/Attendance.pdb create mode 100644 Chapter05(RFID)/Attendance_Parallax/bin/Debug/Attendance.vshost.exe create mode 100644 Chapter05(RFID)/Attendance_Parallax/bin/Debug/Attendance.vshost.exe.config create mode 100644 Chapter05(RFID)/Attendance_Parallax/bin/Debug/Attendance.xml create mode 100644 Chapter05(RFID)/Attendance_Parallax/obj/Attendance.vbproj.FileList.txt create mode 100644 Chapter05(RFID)/Attendance_Parallax/obj/Debug/Attendance.Form1.resources create mode 100644 Chapter05(RFID)/Attendance_Parallax/obj/Debug/Attendance.Resources.resources create mode 100644 Chapter05(RFID)/Attendance_Parallax/obj/Debug/Attendance.exe create mode 100644 Chapter05(RFID)/Attendance_Parallax/obj/Debug/Attendance.pdb create mode 100644 Chapter05(RFID)/Attendance_Parallax/obj/Debug/Attendance.vbproj.GenerateResource.Cache create mode 100644 Chapter05(RFID)/Attendance_Parallax/obj/Debug/Attendance.xml create mode 100644 Chapter05(RFID)/Attendance_Parallax/obj/Debug/TempPE/My Project.Resources.Designer.vb.dll create mode 100644 Chapter05(RFID)/Attendance_Parallax/obj/Debug/TempPE/NorthwindDataSet.Designer.vb.dll create mode 100644 Chapter05(RFID)/Attendance_Parallax/obj/Debug/TempPE/NorthwindDataSet1.Designer.vb.dll create mode 100644 Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS.sln create mode 100644 Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS.suo create mode 100644 Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/Attendance_CS.csproj create mode 100644 Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/Form1.Designer.cs create mode 100644 Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/Form1.cs create mode 100644 Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/Form1.resx create mode 100644 Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/NorthwindDataSet.Designer.cs create mode 100644 Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/NorthwindDataSet.xsc create mode 100644 Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/NorthwindDataSet.xsd create mode 100644 Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/NorthwindDataSet.xss create mode 100644 Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/Program.cs create mode 100644 Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/Properties/AssemblyInfo.cs create mode 100644 Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/Properties/Resources.Designer.cs create mode 100644 Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/Properties/Resources.resx create mode 100644 Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/Properties/Settings.Designer.cs create mode 100644 Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/Properties/Settings.settings create mode 100644 Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/app.config create mode 100644 Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/bin/Debug/Attendance_CS.exe create mode 100644 Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/bin/Debug/Attendance_CS.exe.config create mode 100644 Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/bin/Debug/Attendance_CS.pdb create mode 100644 Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/bin/Debug/Attendance_CS.vshost.exe create mode 100644 Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/bin/Debug/Attendance_CS.vshost.exe.config create mode 100644 Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/obj/Attendance_CS.csproj.FileList.txt create mode 100644 Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/obj/Debug/Attendance_CS.Form1.resources create mode 100644 Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/obj/Debug/Attendance_CS.Properties.Resources.resources create mode 100644 Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/obj/Debug/Attendance_CS.csproj.GenerateResource.Cache create mode 100644 Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/obj/Debug/Attendance_CS.exe create mode 100644 Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/obj/Debug/Attendance_CS.pdb create mode 100644 Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/obj/Debug/TempPE/NorthwindDataSet.Designer.cs.dll create mode 100644 Chapter05(RFID)/Attendance_Phidget/Attendance.sln create mode 100644 Chapter05(RFID)/Attendance_Phidget/Attendance.suo create mode 100644 Chapter05(RFID)/Attendance_Phidget/Attendance.vbproj create mode 100644 Chapter05(RFID)/Attendance_Phidget/Attendance.vbproj.user create mode 100644 Chapter05(RFID)/Attendance_Phidget/Form1.Designer.vb create mode 100644 Chapter05(RFID)/Attendance_Phidget/Form1.resx create mode 100644 Chapter05(RFID)/Attendance_Phidget/Form1.vb create mode 100644 Chapter05(RFID)/Attendance_Phidget/Form2.Designer.vb create mode 100644 Chapter05(RFID)/Attendance_Phidget/Form2.resx create mode 100644 Chapter05(RFID)/Attendance_Phidget/Form2.vb create mode 100644 Chapter05(RFID)/Attendance_Phidget/My Project/Application.Designer.vb create mode 100644 Chapter05(RFID)/Attendance_Phidget/My Project/Application.myapp create mode 100644 Chapter05(RFID)/Attendance_Phidget/My Project/AssemblyInfo.vb create mode 100644 Chapter05(RFID)/Attendance_Phidget/My Project/Resources.Designer.vb create mode 100644 Chapter05(RFID)/Attendance_Phidget/My Project/Resources.resx create mode 100644 Chapter05(RFID)/Attendance_Phidget/My Project/Settings.Designer.vb create mode 100644 Chapter05(RFID)/Attendance_Phidget/My Project/Settings.settings create mode 100644 Chapter05(RFID)/Attendance_Phidget/NorthwindDataSet.Designer.vb create mode 100644 Chapter05(RFID)/Attendance_Phidget/NorthwindDataSet.xsc create mode 100644 Chapter05(RFID)/Attendance_Phidget/NorthwindDataSet.xsd create mode 100644 Chapter05(RFID)/Attendance_Phidget/NorthwindDataSet.xss create mode 100644 Chapter05(RFID)/Attendance_Phidget/app.config create mode 100644 Chapter05(RFID)/Attendance_Phidget/bin/Debug/Attendance.exe create mode 100644 Chapter05(RFID)/Attendance_Phidget/bin/Debug/Attendance.exe.config create mode 100644 Chapter05(RFID)/Attendance_Phidget/bin/Debug/Attendance.pdb create mode 100644 Chapter05(RFID)/Attendance_Phidget/bin/Debug/Attendance.vshost.exe create mode 100644 Chapter05(RFID)/Attendance_Phidget/bin/Debug/Attendance.vshost.exe.config create mode 100644 Chapter05(RFID)/Attendance_Phidget/bin/Debug/Attendance.xml create mode 100644 Chapter05(RFID)/Attendance_Phidget/bin/Debug/PhidgetsNET.dll create mode 100644 Chapter05(RFID)/Attendance_Phidget/obj/Attendance.vbproj.FileList.txt create mode 100644 Chapter05(RFID)/Attendance_Phidget/obj/Debug/Attendance.Form1.resources create mode 100644 Chapter05(RFID)/Attendance_Phidget/obj/Debug/Attendance.Form2.resources create mode 100644 Chapter05(RFID)/Attendance_Phidget/obj/Debug/Attendance.Resources.resources create mode 100644 Chapter05(RFID)/Attendance_Phidget/obj/Debug/Attendance.exe create mode 100644 Chapter05(RFID)/Attendance_Phidget/obj/Debug/Attendance.pdb create mode 100644 Chapter05(RFID)/Attendance_Phidget/obj/Debug/Attendance.vbproj.GenerateResource.Cache create mode 100644 Chapter05(RFID)/Attendance_Phidget/obj/Debug/Attendance.xml create mode 100644 Chapter05(RFID)/Attendance_Phidget/obj/Debug/ResolveAssemblyReference.cache create mode 100644 Chapter05(RFID)/Attendance_Phidget/obj/Debug/TempPE/My Project.Resources.Designer.vb.dll create mode 100644 Chapter05(RFID)/Attendance_Phidget/obj/Debug/TempPE/NorthwindDataSet.Designer.vb.dll create mode 100644 Chapter05(RFID)/Attendance_Phidget/obj/Debug/TempPE/NorthwindDataSet1.Designer.vb.dll create mode 100644 Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS.sln create mode 100644 Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS.suo create mode 100644 Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/Attendance_CS.csproj create mode 100644 Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/Attendance_CS.csproj.user create mode 100644 Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/Form1.Designer.cs create mode 100644 Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/Form1.cs create mode 100644 Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/Form1.resx create mode 100644 Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/Program.cs create mode 100644 Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/Properties/AssemblyInfo.cs create mode 100644 Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/Properties/Resources.Designer.cs create mode 100644 Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/Properties/Resources.resx create mode 100644 Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/Properties/Settings.Designer.cs create mode 100644 Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/Properties/Settings.settings create mode 100644 Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/bin/Debug/Attendance_CS.exe create mode 100644 Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/bin/Debug/Attendance_CS.pdb create mode 100644 Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/bin/Debug/Attendance_CS.vshost.exe create mode 100644 Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/bin/Debug/PhidgetsNET.dll create mode 100644 Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/obj/Attendance_CS.csproj.FileList.txt create mode 100644 Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/obj/Debug/Attendance_CS.Form1.resources create mode 100644 Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/obj/Debug/Attendance_CS.Properties.Resources.resources create mode 100644 Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/obj/Debug/Attendance_CS.csproj.GenerateResource.Cache create mode 100644 Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/obj/Debug/Attendance_CS.exe create mode 100644 Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/obj/Debug/Attendance_CS.pdb create mode 100644 Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/obj/Debug/ResolveAssemblyReference.cache create mode 100644 Chapter06(ExternalDevices)/PING.bs2 create mode 100644 Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem.sln create mode 100644 Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem.suo create mode 100644 Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/Form1.Designer.vb create mode 100644 Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/Form1.resx create mode 100644 Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/Form1.vb create mode 100644 Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/My Project/Application.Designer.vb create mode 100644 Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/My Project/Application.myapp create mode 100644 Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/My Project/AssemblyInfo.vb create mode 100644 Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/My Project/Resources.Designer.vb create mode 100644 Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/My Project/Resources.resx create mode 100644 Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/My Project/Settings.Designer.vb create mode 100644 Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/My Project/Settings.settings create mode 100644 Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/SecuritySystem.vbproj create mode 100644 Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/SecuritySystem.vbproj.user create mode 100644 Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/bin/Debug/SecuritySystem.exe create mode 100644 Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/bin/Debug/SecuritySystem.pdb create mode 100644 Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/bin/Debug/SecuritySystem.vshost.exe create mode 100644 Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/bin/Debug/SecuritySystem.xml create mode 100644 Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/obj/Debug/SecuritySystem.Form1.resources create mode 100644 Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/obj/Debug/SecuritySystem.Resources.resources create mode 100644 Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/obj/Debug/SecuritySystem.exe create mode 100644 Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/obj/Debug/SecuritySystem.pdb create mode 100644 Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/obj/Debug/SecuritySystem.vbproj.GenerateResource.Cache create mode 100644 Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/obj/Debug/SecuritySystem.xml create mode 100644 Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/obj/SecuritySystem.vbproj.FileList.txt create mode 100644 Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS.sln create mode 100644 Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS.suo create mode 100644 Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/Form1.Designer.cs create mode 100644 Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/Form1.cs create mode 100644 Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/Form1.resx create mode 100644 Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/Program.cs create mode 100644 Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/Properties/AssemblyInfo.cs create mode 100644 Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/Properties/Resources.Designer.cs create mode 100644 Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/Properties/Resources.resx create mode 100644 Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/Properties/Settings.Designer.cs create mode 100644 Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/Properties/Settings.settings create mode 100644 Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/SecuritySystem_CS.csproj create mode 100644 Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/bin/Debug/SecuritySystem_CS.exe create mode 100644 Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/bin/Debug/SecuritySystem_CS.pdb create mode 100644 Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/bin/Debug/SecuritySystem_CS.vshost.exe create mode 100644 Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/obj/Debug/SecuritySystem_CS.Form1.resources create mode 100644 Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/obj/Debug/SecuritySystem_CS.Properties.Resources.resources create mode 100644 Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/obj/Debug/SecuritySystem_CS.csproj.GenerateResource.Cache create mode 100644 Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/obj/Debug/SecuritySystem_CS.exe create mode 100644 Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/obj/Debug/SecuritySystem_CS.pdb create mode 100644 Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/obj/SecuritySystem_CS.csproj.FileList.txt create mode 100644 LICENSE.txt create mode 100644 README.md create mode 100644 contributing.md diff --git a/3321.pdf b/3321.pdf new file mode 100644 index 0000000000000000000000000000000000000000..4f882d30827d4209c93577981798d5fd57b879d9 GIT binary patch literal 423721 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 F{{guRu%iF~ literal 0 HcmV?d00001 diff --git a/9781590597903.jpg b/9781590597903.jpg new file mode 100644 index 0000000000000000000000000000000000000000..96bf669de88e12937d598c2ad0ad57b0b40ecf9b GIT binary patch literal 10887 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 rW8a7ta{h4DqU%;2t + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {9952804B-B7AD-4FEF-9A02-AC6CFF879333} + Exe + Client.Module1 + Client + Client + Console + + + true + full + true + true + bin\Debug\ + Client.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + Client.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 0/Client/Client/Module1.vb b/Chapter01(Socket)/Part 0/Client/Client/Module1.vb new file mode 100644 index 0000000..958a45a --- /dev/null +++ b/Chapter01(Socket)/Part 0/Client/Client/Module1.vb @@ -0,0 +1,18 @@ +Imports System.Net.Sockets +Imports System.Text + +Module Module1 + Const portNo As Integer = 500 + Sub Main() + Dim tcpclient As New TcpClient + '---connect to the server--- + tcpclient.Connect("127.0.0.1", portNo) + + '---use a NetworkStream object to send and receive data--- + Dim ns As NetworkStream = tcpclient.GetStream + Dim data As Byte() = Encoding.ASCII.GetBytes("Hello") + + '---send the text--- + ns.Write(data, 0, data.Length) + End Sub +End Module diff --git a/Chapter01(Socket)/Part 0/Client/Client/My Project/Application.Designer.vb b/Chapter01(Socket)/Part 0/Client/Client/My Project/Application.Designer.vb new file mode 100644 index 0000000..8a621ae --- /dev/null +++ b/Chapter01(Socket)/Part 0/Client/Client/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.42 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Chapter01(Socket)/Part 0/Client/Client/My Project/Application.myapp b/Chapter01(Socket)/Part 0/Client/Client/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Chapter01(Socket)/Part 0/Client/Client/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Chapter01(Socket)/Part 0/Client/Client/My Project/AssemblyInfo.vb b/Chapter01(Socket)/Part 0/Client/Client/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..1f97c44 --- /dev/null +++ b/Chapter01(Socket)/Part 0/Client/Client/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Chapter01(Socket)/Part 0/Client/Client/My Project/Resources.Designer.vb b/Chapter01(Socket)/Part 0/Client/Client/My Project/Resources.Designer.vb new file mode 100644 index 0000000..5b2f1e1 --- /dev/null +++ b/Chapter01(Socket)/Part 0/Client/Client/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.42 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + '

+ ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Client.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Chapter01(Socket)/Part 0/Client/Client/My Project/Resources.resx b/Chapter01(Socket)/Part 0/Client/Client/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Chapter01(Socket)/Part 0/Client/Client/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 0/Client/Client/My Project/Settings.Designer.vb b/Chapter01(Socket)/Part 0/Client/Client/My Project/Settings.Designer.vb new file mode 100644 index 0000000..fa3ba1d --- /dev/null +++ b/Chapter01(Socket)/Part 0/Client/Client/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.42 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.Client.My.MySettings + Get + Return Global.Client.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Chapter01(Socket)/Part 0/Client/Client/My Project/Settings.settings b/Chapter01(Socket)/Part 0/Client/Client/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Chapter01(Socket)/Part 0/Client/Client/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Chapter01(Socket)/Part 0/Client/Client/bin/Debug/Client.exe b/Chapter01(Socket)/Part 0/Client/Client/bin/Debug/Client.exe new file mode 100644 index 0000000000000000000000000000000000000000..fd5e0132aa5f441685c92a6a155c7d4fea04e9a2 GIT binary patch literal 24576 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 ULIgqtLIgqtLIgqtelHRDUvu^yRsaA1 literal 0 HcmV?d00001 diff --git a/Chapter01(Socket)/Part 0/Client/Client/bin/Debug/Client.pdb b/Chapter01(Socket)/Part 0/Client/Client/bin/Debug/Client.pdb new file mode 100644 index 0000000000000000000000000000000000000000..ca0401b02c7b7e88841ab96531aa2e1d1e616f7b GIT binary patch literal 40448 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 literal 0 HcmV?d00001 diff --git a/Chapter01(Socket)/Part 0/Client/Client/bin/Debug/Client.vshost.exe b/Chapter01(Socket)/Part 0/Client/Client/bin/Debug/Client.vshost.exe new file mode 100644 index 0000000000000000000000000000000000000000..ce3f102c36be07551ba7c7fad64c8b24709bdb91 GIT binary patch literal 5632 zcmeHLX>3&26+Umg;MiccvX$*QEU{T$9osBr9ou8T!CO4GX{f1rGjlzDVoO|!Prgq~qltDz9r~?B;$Ix=|OT07mVmN>1Z}RE2drlP`Q)*5X zG<6uR8guNZqj#!d-Lh;?4GGnWTdHBHf%>4@X-9-MYENnj=gbf*dm1jLN#cftptQL=|aWNfvWlQP?*hWf2t+?Lo}%k$q{6hp9nL zgjRO$01v%$;r&I$YdXI8&)FG$2N&cn{PM~EIUlboSblZ6|HQ<{cD(w-H$Pi{GB!Q7 z|H6B@KUnhF)GHNJoBn(6mQTf)Ia@0-J4*9+&;GPbIdCa>RcoH#{Qln`m|0=hKQWNC z!#y@@!#j(1Un%|Q)aTD`kDfW+w4v>(rqa#M$bmyo{cgLmeRW{M$FpYm3da-W&f8x& z0nLKxvau(Eo?AGHIeD_NCo>0YuLwR+p^ze1#Ifrt(TcT2#Y;+-Fe_7rvIeo7wS(yA zX#bP}I_Nou6?Iv{Lq2$0&05=B9YEWMekRLTn0AN-P|#J@A{QJ}x~7y8++mAT5@Rw| z@Q22sG9U6Nxk<0GsfFs1h&|K+JVrkSo|br>`a#cB7|RvrMHFKBr(Uw zl5-@k@UiBtzD8d*9q>KoTQAp`O~3WAt@psmrLqha^n)4xjBMH^@f9F@n1~ujPf^Cu z1X8hoxc8RIqmNGBB-e08_V!a4+g72m#M~*saoB2`Xc84k`hJPumRK&aTH=EeACjm` zG$d}7*dy^#;3Rrn;NPL;}jK9&ZX=lbcdYSfRoToq2>!3ASPn#8u z^5_H5<0%vLR4N9}qQ$`Zh^$7XR0mux@nJd(I!OC~-=*IJ!;-UI&T=Kai#`PZNxBT& zOIH;?y#RZey+d~b$L>D*2U4BLHo7PZt&wf=(v$RGXdorBqSlVYO|go)+z#9IG|?@n z%JQ6^2HUVasx`un?b_|0)?&DE-3)s1h+%8%Ad2nU;Mif|y42~0ZO1f16zp+5(Mk28 zEh6lZ7WQn1YIVa(4rq;W%QHHKR%v&}3{yBk;dB{LLCFE;>z)xZOvCFb_i!dcaZe1+ z7VReV8n#8{t}8l2X3u)jvj&QWL{kF+Vd_0WBWeu|C7jb5g=@zhHd-g*o}-(Cj2hjF z#`S2LwxI3_6TXN_8!^$tUW;&C*dJ1wvR7@j+fFBZw=LZqR*HQcc5v8%N;}r$7|{;z zRXI0nx6BteC@kn? zx7}3wC`~t$^_JixeXZ}r;oYm_b%)++Tlw0>+HX%C`+@-Ake_bp%{*%iWKZ&%~jNE(TX9o*6g%-Rh7EHhP*OlHTd*KJ4?D*a4-;jvD#}$T zOIQn=@p>DHr7y*I8$Y743XSBB{D^C1B}AnPX@5AP4(=bd(sp9DBln=DmYb$353H*? z$g9&OB6vF%DKvX%LSbW(nz&Qd#HFe-r=+-e5z#jlnlL1prkZH9Lb+*IH9O7$Qj&K* zi1dqo@D0qF`iTGURq zl$y==AvIxC2iL{8P9EfJ^b+N0<`}+a;gbg`1N`W1H1*>kDp+;uS4JU@0csxjmC)CT zpTKMnR`9n2umfBdeGU9>R4z4m@TcTs(x)CoK$mlQycQmW;RnyOu?i1|k+nM%lbG(k zU)oNsIsglXDI;B4QqNAHkZxdK@%Jm&3M+mh+d;;>sRJgjdxC zjKDHcB4+hTNzOL=or(eXIE%yQ&!joDM74@5pgblnV%bN-JGR6=O_ohmcu4Tp%XjSM5Nh|8#A5K!MWx={dKuZ TBcLY!&!}P9UAq3eeA)j4ZC9R* literal 0 HcmV?d00001 diff --git a/Chapter01(Socket)/Part 0/Client/Client/bin/Debug/Client.xml b/Chapter01(Socket)/Part 0/Client/Client/bin/Debug/Client.xml new file mode 100644 index 0000000..1f8c2ee --- /dev/null +++ b/Chapter01(Socket)/Part 0/Client/Client/bin/Debug/Client.xml @@ -0,0 +1,11 @@ + + + + +Client + + + + + + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 0/Client/Client/obj/Client.vbproj.FileList.txt b/Chapter01(Socket)/Part 0/Client/Client/obj/Client.vbproj.FileList.txt new file mode 100644 index 0000000..1c8be69 --- /dev/null +++ b/Chapter01(Socket)/Part 0/Client/Client/obj/Client.vbproj.FileList.txt @@ -0,0 +1,9 @@ +bin\Debug\Client.exe +bin\Debug\Client.pdb +bin\Debug\Client.xml +obj\Debug\ResolveAssemblyReference.cache +obj\Debug\Client.Resources.resources +obj\Debug\Client.vbproj.GenerateResource.Cache +obj\Debug\Client.exe +obj\Debug\Client.xml +obj\Debug\Client.pdb diff --git a/Chapter01(Socket)/Part 0/Client/Client/obj/Debug/Client.Resources.resources b/Chapter01(Socket)/Part 0/Client/Client/obj/Debug/Client.Resources.resources new file mode 100644 index 0000000000000000000000000000000000000000..06c24d06c1cab750788146ce052b37770f3fa530 GIT binary patch literal 180 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 ULIgqtLIgqtLIgqtelHRDUvu^yRsaA1 literal 0 HcmV?d00001 diff --git a/Chapter01(Socket)/Part 0/Client/Client/obj/Debug/Client.pdb b/Chapter01(Socket)/Part 0/Client/Client/obj/Debug/Client.pdb new file mode 100644 index 0000000000000000000000000000000000000000..ca0401b02c7b7e88841ab96531aa2e1d1e616f7b GIT binary patch literal 40448 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 literal 0 HcmV?d00001 diff --git a/Chapter01(Socket)/Part 0/Client/Client/obj/Debug/Client.vbproj.GenerateResource.Cache b/Chapter01(Socket)/Part 0/Client/Client/obj/Debug/Client.vbproj.GenerateResource.Cache new file mode 100644 index 0000000000000000000000000000000000000000..35a36ca85b3496aa6380ec09b400372f294d2e41 GIT binary patch literal 784 zcma)3+e*Vg5KV1Udr_zlBBBpfd=M<57err*V8jbr@P_!{%Qic~wcD)hBx3vmpM3U{ z`~m;Mf6$qtA~lE;I7wz_&zza#rK%SF1K0DWcN-1 z_aNGVTZkk?fdXVHWea$@t2E$TUmzT*XaJJ`ca()7Ha0Efma_@RsYY~p;;gug|G33! zr{oVs`NgvoV;FkA(VE)RGSJ%>cpZzrhEan8-6=5qSvpAtl_MkMuHYdiKQ~+Q&G1%O zur((2jf7)s?vw;u;>4MHfC4QSix)yCfR2;TJFZ(TW%WAv;#$ejeDI6^?PPO{=dDz# zgk_hZNKoT1J}9#0`CeKlNjEh66&Yp{8vuIb(S41JxvpFya2Z@MdziB4Yau}-hOjV}*8=07kt$RmXUERqUSW(yk~WDhmMdCbjl Hilh1g4YlZF literal 0 HcmV?d00001 diff --git a/Chapter01(Socket)/Part 0/Client/Client/obj/Debug/Client.xml b/Chapter01(Socket)/Part 0/Client/Client/obj/Debug/Client.xml new file mode 100644 index 0000000..1f8c2ee --- /dev/null +++ b/Chapter01(Socket)/Part 0/Client/Client/obj/Debug/Client.xml @@ -0,0 +1,11 @@ + + + + +Client + + + + + + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 0/Client_CS/Client_CS.sln b/Chapter01(Socket)/Part 0/Client_CS/Client_CS.sln new file mode 100644 index 0000000..d416de9 --- /dev/null +++ b/Chapter01(Socket)/Part 0/Client_CS/Client_CS.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Client_CS", "Client_CS\Client_CS.csproj", "{C141460D-C554-422F-8D82-CBD5B6BE746B}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {C141460D-C554-422F-8D82-CBD5B6BE746B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C141460D-C554-422F-8D82-CBD5B6BE746B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C141460D-C554-422F-8D82-CBD5B6BE746B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C141460D-C554-422F-8D82-CBD5B6BE746B}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Chapter01(Socket)/Part 0/Client_CS/Client_CS.suo b/Chapter01(Socket)/Part 0/Client_CS/Client_CS.suo new file mode 100644 index 0000000000000000000000000000000000000000..a2c667e4e1bc030c686e0c3e56f6dff1f8f39152 GIT binary patch literal 12800 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 literal 0 HcmV?d00001 diff --git a/Chapter01(Socket)/Part 0/Client_CS/Client_CS/Client_CS.csproj b/Chapter01(Socket)/Part 0/Client_CS/Client_CS/Client_CS.csproj new file mode 100644 index 0000000..0a56da8 --- /dev/null +++ b/Chapter01(Socket)/Part 0/Client_CS/Client_CS/Client_CS.csproj @@ -0,0 +1,47 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {C141460D-C554-422F-8D82-CBD5B6BE746B} + Exe + Properties + Client_CS + Client_CS + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 0/Client_CS/Client_CS/Program.cs b/Chapter01(Socket)/Part 0/Client_CS/Client_CS/Program.cs new file mode 100644 index 0000000..9d52d67 --- /dev/null +++ b/Chapter01(Socket)/Part 0/Client_CS/Client_CS/Program.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Net.Sockets; + +namespace Client_CS +{ + class Program + { + const int portNo = 500; + static void Main(string[] args) + { + TcpClient tcpclient = new TcpClient(); + tcpclient.Connect("127.0.0.1", portNo); + NetworkStream ns = tcpclient.GetStream(); + byte[] data = Encoding.ASCII.GetBytes("Hello"); + ns.Write(data, 0, data.Length); + } + } +} diff --git a/Chapter01(Socket)/Part 0/Client_CS/Client_CS/Properties/AssemblyInfo.cs b/Chapter01(Socket)/Part 0/Client_CS/Client_CS/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..4d466fe --- /dev/null +++ b/Chapter01(Socket)/Part 0/Client_CS/Client_CS/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Client_CS")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Client_CS")] +[assembly: AssemblyCopyright("Copyright © 2006")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("b8c7757f-6e5a-4e0d-817a-382fc96d83b1")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Chapter01(Socket)/Part 0/Client_CS/Client_CS/bin/Debug/Client_CS.exe b/Chapter01(Socket)/Part 0/Client_CS/Client_CS/bin/Debug/Client_CS.exe new file mode 100644 index 0000000000000000000000000000000000000000..17a465832ab4b464d6a2497eeb43db20e4201697 GIT binary patch literal 16384 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 literal 0 HcmV?d00001 diff --git a/Chapter01(Socket)/Part 0/Client_CS/Client_CS/bin/Debug/Client_CS.vshost.exe b/Chapter01(Socket)/Part 0/Client_CS/Client_CS/bin/Debug/Client_CS.vshost.exe new file mode 100644 index 0000000000000000000000000000000000000000..ce3f102c36be07551ba7c7fad64c8b24709bdb91 GIT binary patch literal 5632 zcmeHLX>3&26+Umg;MiccvX$*QEU{T$9osBr9ou8T!CO4GX{f1rGjlzDVoO|!Prgq~qltDz9r~?B;$Ix=|OT07mVmN>1Z}RE2drlP`Q)*5X zG<6uR8guNZqj#!d-Lh;?4GGnWTdHBHf%>4@X-9-MYENnj=gbf*dm1jLN#cftptQL=|aWNfvWlQP?*hWf2t+?Lo}%k$q{6hp9nL zgjRO$01v%$;r&I$YdXI8&)FG$2N&cn{PM~EIUlboSblZ6|HQ<{cD(w-H$Pi{GB!Q7 z|H6B@KUnhF)GHNJoBn(6mQTf)Ia@0-J4*9+&;GPbIdCa>RcoH#{Qln`m|0=hKQWNC z!#y@@!#j(1Un%|Q)aTD`kDfW+w4v>(rqa#M$bmyo{cgLmeRW{M$FpYm3da-W&f8x& z0nLKxvau(Eo?AGHIeD_NCo>0YuLwR+p^ze1#Ifrt(TcT2#Y;+-Fe_7rvIeo7wS(yA zX#bP}I_Nou6?Iv{Lq2$0&05=B9YEWMekRLTn0AN-P|#J@A{QJ}x~7y8++mAT5@Rw| z@Q22sG9U6Nxk<0GsfFs1h&|K+JVrkSo|br>`a#cB7|RvrMHFKBr(Uw zl5-@k@UiBtzD8d*9q>KoTQAp`O~3WAt@psmrLqha^n)4xjBMH^@f9F@n1~ujPf^Cu z1X8hoxc8RIqmNGBB-e08_V!a4+g72m#M~*saoB2`Xc84k`hJPumRK&aTH=EeACjm` zG$d}7*dy^#;3Rrn;NPL;}jK9&ZX=lbcdYSfRoToq2>!3ASPn#8u z^5_H5<0%vLR4N9}qQ$`Zh^$7XR0mux@nJd(I!OC~-=*IJ!;-UI&T=Kai#`PZNxBT& zOIH;?y#RZey+d~b$L>D*2U4BLHo7PZt&wf=(v$RGXdorBqSlVYO|go)+z#9IG|?@n z%JQ6^2HUVasx`un?b_|0)?&DE-3)s1h+%8%Ad2nU;Mif|y42~0ZO1f16zp+5(Mk28 zEh6lZ7WQn1YIVa(4rq;W%QHHKR%v&}3{yBk;dB{LLCFE;>z)xZOvCFb_i!dcaZe1+ z7VReV8n#8{t}8l2X3u)jvj&QWL{kF+Vd_0WBWeu|C7jb5g=@zhHd-g*o}-(Cj2hjF z#`S2LwxI3_6TXN_8!^$tUW;&C*dJ1wvR7@j+fFBZw=LZqR*HQcc5v8%N;}r$7|{;z zRXI0nx6BteC@kn? zx7}3wC`~t$^_JixeXZ}r;oYm_b%)++Tlw0>+HX%C`+@-Ake_bp%{*%iWKZ&%~jNE(TX9o*6g%-Rh7EHhP*OlHTd*KJ4?D*a4-;jvD#}$T zOIQn=@p>DHr7y*I8$Y743XSBB{D^C1B}AnPX@5AP4(=bd(sp9DBln=DmYb$353H*? z$g9&OB6vF%DKvX%LSbW(nz&Qd#HFe-r=+-e5z#jlnlL1prkZH9Lb+*IH9O7$Qj&K* zi1dqo@D0qF`iTGURq zl$y==AvIxC2iL{8P9EfJ^b+N0<`}+a;gbg`1N`W1H1*>kDp+;uS4JU@0csxjmC)CT zpTKMnR`9n2umfBdeGU9>R4z4m@TcTs(x)CoK$mlQycQmW;RnyOu?i1|k+nM%lbG(k zU)oNsIsglXDI;B4QqNAHkZxdK@%Jm&3M+mh+d;;>sRJgjdxC zjKDHcB4+hTNzOL=or(eXIE%yQ&!joDM74@5pgblnV%bN-JGR6=O_ohmcu4Tp%XjSM5Nh|8#A5K!MWx={dKuZ TBcLY!&!}P9UAq3eeA)j4ZC9R* literal 0 HcmV?d00001 diff --git a/Chapter01(Socket)/Part 0/Client_CS/Client_CS/obj/Client_CS.csproj.FileList.txt b/Chapter01(Socket)/Part 0/Client_CS/Client_CS/obj/Client_CS.csproj.FileList.txt new file mode 100644 index 0000000..83c5149 --- /dev/null +++ b/Chapter01(Socket)/Part 0/Client_CS/Client_CS/obj/Client_CS.csproj.FileList.txt @@ -0,0 +1,5 @@ +obj\Debug\ResolveAssemblyReference.cache +bin\Debug\Client_CS.exe +bin\Debug\Client_CS.pdb +obj\Debug\Client_CS.exe +obj\Debug\Client_CS.pdb diff --git a/Chapter01(Socket)/Part 0/Client_CS/Client_CS/obj/Debug/Client_CS.exe b/Chapter01(Socket)/Part 0/Client_CS/Client_CS/obj/Debug/Client_CS.exe new file mode 100644 index 0000000000000000000000000000000000000000..17a465832ab4b464d6a2497eeb43db20e4201697 GIT binary patch literal 16384 zcmeHMOKcm*8UAe~)WepXxCtdvwwaoiEXtDYvXGa{5w+2B zm)%_^QX2$H5G3{`eEF3XJPS;Z@HqrJWDP~7yy7|}VciC$~J1Sv}Q zsYBbLC5U!GXOZoho>)!^9l(&mFX9%dp3^cEQ4a~@f*Fd`>-nl%mih48L^DE45hVl> z8`D*yov`(w+&4D*9;P$2*Wgb;Kii-iAzuukXG9_RWQ=j#&}3pnR}DY#Eod^f6a-O* z;b}-IL~r=q@la62N>}lSa!EW5DMd8epej)@pcqgLC-iJ_mZ8Fi@-4g=|O9 zZlM1teBL9Fc5X}TNxW%$FtpLp$Mv2)5RQ)KpBvR=G|}1ig?=Mx98V7Q4~e*1$N?sG zqJu9J{Sx_IA?HKicFTb%QEDMNg#6&eJY9nQMhT+C*W-+=y^&_^Awh+HI8*Jcjr zv|T9w(gp}o2rdwn@JYFz!zK0hI2YxFPYgiFg1)C{0LUp1d{yEdx(WHN#P_A;3yHfl zQRYdB8HwMQ_>#n5Nc_9DqCHLTq48E~)j!r+=`gU33VK#=BNy08Khs|a-qzodp+s>+ z4DO4A_WHgY%0*+$=$(|qy~kq`yCoh0c2l2}Pf8q- zn3Z@z;$?}ZL|ftyfQRW7;4!)m+=pHxoYVUtzoZY*Z|J6e3iw-ngl^Ga^fP!1qD%tU zIPGN64!Q)~4>k=tNIwP+NPL=p4mnM41HUURd5PbXXi575{R!TH{sH_Ey-VZNyd1qf zT1^a6^!_4~Mn|Qv-Zl_91)j=zrJBQ^p|oRjH=Ir94Zg@}BDw%uvr;9nJm0a4lwS%$ zUZL^g^V|wC@%`|;M>*4W$*@AtkNw6ZpL0;a_FNhX0$wRPOQ&szPjf$jZ6w6}F4jW6 z>fGdr`Y|SJZfIAyk#$4vd(}MmU$8A6(3zTDT5BckRi^F0E;@Y8R_``lbHbXxg=5M$ zOT1$G3tQCjs!P6Io)0&>KuxJ;ZQ(!+RnuMCTqEtdb9TArn}Uta?hFqs->z=$oU+5l zF~y{0Y_sfoL1E#+p)ujVVXYHskn>tJT&s2wZOxGrmSi-sR#tPVzR*dqUSGQZR2Kz&hRjn;>uIv zK5@*oyb>a(G7o1*^66|=6dYX&*T#_@r?}#bZ(|CHw7ZY`X$aqpWc>6I?Kq3?nS+lf zi{#(f|K(xtt=vjFm$V12&r{-$KP*f?HhBNK-kN9@Ydh8z?LbEpBdwWfT899=1>U{HpR-P$C=Cx35p9cH=k{vUm99@d_P1M%^(T`ja7nGv z_SLT_?o!c*EDu3kzY;wzmc%K2&x~(Y&wK9JqQ&Kunws~$7Xw)qrRsOoVmz;+A@r(+k*d#wpfFal!=R9!H>>#0vPG80EMz^=yf{*rF#V7v3#+4Pki6pa zXbbas&1O_fMf`5Yzwro(3?VZiZBF&QzxzCa>Va0{xSF#v6Pe) zCdKP#ZvPge!{`B9`Ijp|Rit=ZrH~L?{?ukt#&h8poHOWUiHuk6-ZMrlU z?^O?pzx`;ev?9!^Poj(rFj=()euvNQa0@6En4~n9c$PV*FS?)lz*w8lIQz+ z&l&U{kR{uxuInd_o^5ztSZ8rQ&7<=qcAVO3U(@jVsJ#|jU&AgOeB&;q1Lei&LRr?u zSRC+YQUyBpn49`AU|*EJ=v03Wa#_|&gMlh7$w^PCXvbnPP14!j8eJ{=5iQe3puW3f7893exzU`Pr;eA`-Oe?ws8- z=iYnnz2}^7@7%x5>zZZS=9D94Q`w##DPK4!JtC*miI&b>fk09BOLrq#<~-;wPlV4p zKwx1xq((+y4}H_f;WvEjt)FKidw3q(;xj~omY16$n<{vORM!YJ)pc}XaQ}qBt8ylC zGBG|BLB-^`-tRs>G4)5iWUiZ6}4 z|I1@vy=a{|#oGp^x6dx0>q*75KdxVR?bF>`M!nMTdAlI6&v!JCw~ODQpKC+l#?>2F zd2RolyU7kHIa7OXRv3;gsYX#M2*=TlX}sMIm(+Ol?LuJC!lja-_79E$QfWB3r0QjalZjrOwKlO{5Jd#lM)g z1JlP~8XiqcC73Syrd7|ha7}Af)0%7A_Dz>P)0$^mvz3)pdBrrZbkBodU<5#nM&s;? z@4J$YR1k6Z=F{7L+VDx_-|q9cKCTE|)PlB*WEYtG{@|6#z2m+1cEl`gT}jJXvs4nAqnm~; zKQ0Vm=^C}y=${tH9W+P3)%Nm}!jZix#719|>mO{mlIuEJ*?XJac2bh<*Xj+-DV=EN zkIibkqUxyJK8mn*Q*-lYgFi05d+6)o3p?V`kIuh0$+|q{pd)HVha4yGakw8&bGu(5 zOJJr5J^=3-O-5GoHG}F}5Md`ytuJ!@h)AGfAuT5X7@el~A<~5Wsj2 zsSXj?N}GbY74v*{G~Y8ZWH{D|i7`_*Fe|sy4p+}}Uxd5`po4bSl%@OAOqn_a$D3yB zGO#eH5CKL&!kW+T_RT2R8}MEuhI+hKH`sd3q1QF>Z+tACanF4%M02h5;9?tflY*!v za4&cc98d=m_qv&%7lJbHcDVL_IMA?+Q=dO*P9n$2x%n%+C3dNLFChE30hI2`?d?C1 z!Jm@5K9sLTXwa<}?6Li3u83kco^bn)RPUy_9* zo%JZ@I_{+d?SCd$`~T+*tfoeEV`kWxGAU)Kv%;p7ZE2~aLM;mGNC_7$Ucr=J5_am= zUgGdMm0=z5!Qwp%mtk1b9ex>4b=$$!@#mK}tibt{_*}{_3SK#S!yTA7J405G9|w1V zFCpKH_i8_Q1bMz8!V literal 0 HcmV?d00001 diff --git a/Chapter01(Socket)/Part 0/Server/Server.sln b/Chapter01(Socket)/Part 0/Server/Server.sln new file mode 100644 index 0000000..70c9e73 --- /dev/null +++ b/Chapter01(Socket)/Part 0/Server/Server.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Server", "Server\Server.vbproj", "{20D9DA33-6F44-4B3D-BC0C-549AC897E62A}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {20D9DA33-6F44-4B3D-BC0C-549AC897E62A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {20D9DA33-6F44-4B3D-BC0C-549AC897E62A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {20D9DA33-6F44-4B3D-BC0C-549AC897E62A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {20D9DA33-6F44-4B3D-BC0C-549AC897E62A}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Chapter01(Socket)/Part 0/Server/Server.suo b/Chapter01(Socket)/Part 0/Server/Server.suo new file mode 100644 index 0000000000000000000000000000000000000000..4c45cba3d3995d77142dded9fad0308563d98571 GIT binary patch literal 17408 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 literal 0 HcmV?d00001 diff --git a/Chapter01(Socket)/Part 0/Server/Server/Module1.vb b/Chapter01(Socket)/Part 0/Server/Server/Module1.vb new file mode 100644 index 0000000..083bce2 --- /dev/null +++ b/Chapter01(Socket)/Part 0/Server/Server/Module1.vb @@ -0,0 +1,35 @@ +Imports System.Net.Sockets +Imports System.Text + +Module Module1 + '---port number to use for listening--- + Const portNo As Integer = 500 + + Sub Main() + Dim localAdd As System.Net.IPAddress = _ + System.Net.IPAddress.Parse("127.0.0.1") + + '---listen at the local address--- + Dim listener As New TcpListener(localAdd, portNo) + listener.Start() + + '---Accepts a pending connection request--- + Dim tcpClient As TcpClient = listener.AcceptTcpClient() + + '---use a NetworkStream object to send and receive data--- + Dim ns As NetworkStream = tcpClient.GetStream + Dim data(tcpClient.ReceiveBufferSize) As Byte + + '---read incoming stream; Read() is a blocking call--- + Dim numBytesRead As Integer = ns.Read(data, 0, _ + CInt(tcpClient.ReceiveBufferSize)) + + '---display data received--- + Console.WriteLine("Received :" & _ + Encoding.ASCII.GetString(data, 0, numBytesRead)) + + '---prevent the console window from closing immediately--- + Console.ReadLine() + End Sub + +End Module diff --git a/Chapter01(Socket)/Part 0/Server/Server/My Project/Application.Designer.vb b/Chapter01(Socket)/Part 0/Server/Server/My Project/Application.Designer.vb new file mode 100644 index 0000000..8a621ae --- /dev/null +++ b/Chapter01(Socket)/Part 0/Server/Server/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.42 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Chapter01(Socket)/Part 0/Server/Server/My Project/Application.myapp b/Chapter01(Socket)/Part 0/Server/Server/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Chapter01(Socket)/Part 0/Server/Server/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Chapter01(Socket)/Part 0/Server/Server/My Project/AssemblyInfo.vb b/Chapter01(Socket)/Part 0/Server/Server/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..bfa3634 --- /dev/null +++ b/Chapter01(Socket)/Part 0/Server/Server/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Chapter01(Socket)/Part 0/Server/Server/My Project/Resources.Designer.vb b/Chapter01(Socket)/Part 0/Server/Server/My Project/Resources.Designer.vb new file mode 100644 index 0000000..a4f144f --- /dev/null +++ b/Chapter01(Socket)/Part 0/Server/Server/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.42 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Server.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Chapter01(Socket)/Part 0/Server/Server/My Project/Resources.resx b/Chapter01(Socket)/Part 0/Server/Server/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Chapter01(Socket)/Part 0/Server/Server/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 0/Server/Server/My Project/Settings.Designer.vb b/Chapter01(Socket)/Part 0/Server/Server/My Project/Settings.Designer.vb new file mode 100644 index 0000000..585b2af --- /dev/null +++ b/Chapter01(Socket)/Part 0/Server/Server/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.42 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.Server.My.MySettings + Get + Return Global.Server.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Chapter01(Socket)/Part 0/Server/Server/My Project/Settings.settings b/Chapter01(Socket)/Part 0/Server/Server/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Chapter01(Socket)/Part 0/Server/Server/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Chapter01(Socket)/Part 0/Server/Server/Server.vbproj b/Chapter01(Socket)/Part 0/Server/Server/Server.vbproj new file mode 100644 index 0000000..72be8b8 --- /dev/null +++ b/Chapter01(Socket)/Part 0/Server/Server/Server.vbproj @@ -0,0 +1,92 @@ + + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {20D9DA33-6F44-4B3D-BC0C-549AC897E62A} + Exe + Server.Module1 + Server + Server + Console + + + true + full + true + true + bin\Debug\ + Server.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + Server.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 0/Server/Server/bin/Debug/Server.exe b/Chapter01(Socket)/Part 0/Server/Server/bin/Debug/Server.exe new file mode 100644 index 0000000000000000000000000000000000000000..af4c69b87bf7984cfe52456b2ce3b1159b2a6914 GIT binary patch literal 24576 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 TBcLY!&!}P9UAq3eeA)j4ZC9R* literal 0 HcmV?d00001 diff --git a/Chapter01(Socket)/Part 0/Server/Server/bin/Debug/Server.xml b/Chapter01(Socket)/Part 0/Server/Server/bin/Debug/Server.xml new file mode 100644 index 0000000..6f3a531 --- /dev/null +++ b/Chapter01(Socket)/Part 0/Server/Server/bin/Debug/Server.xml @@ -0,0 +1,11 @@ + + + + +Server + + + + + + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 0/Server/Server/obj/Debug/Server.Resources.resources b/Chapter01(Socket)/Part 0/Server/Server/obj/Debug/Server.Resources.resources new file mode 100644 index 0000000000000000000000000000000000000000..06c24d06c1cab750788146ce052b37770f3fa530 GIT binary patch literal 180 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 F_5mVr>3{$L literal 0 HcmV?d00001 diff --git a/Chapter01(Socket)/Part 0/Server/Server/obj/Debug/Server.xml b/Chapter01(Socket)/Part 0/Server/Server/obj/Debug/Server.xml new file mode 100644 index 0000000..6f3a531 --- /dev/null +++ b/Chapter01(Socket)/Part 0/Server/Server/obj/Debug/Server.xml @@ -0,0 +1,11 @@ + + + + +Server + + + + + + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 0/Server/Server/obj/Server.vbproj.FileList.txt b/Chapter01(Socket)/Part 0/Server/Server/obj/Server.vbproj.FileList.txt new file mode 100644 index 0000000..d722a49 --- /dev/null +++ b/Chapter01(Socket)/Part 0/Server/Server/obj/Server.vbproj.FileList.txt @@ -0,0 +1,9 @@ +bin\Debug\Server.exe +bin\Debug\Server.pdb +bin\Debug\Server.xml +obj\Debug\ResolveAssemblyReference.cache +obj\Debug\Server.Resources.resources +obj\Debug\Server.vbproj.GenerateResource.Cache +obj\Debug\Server.exe +obj\Debug\Server.xml +obj\Debug\Server.pdb diff --git a/Chapter01(Socket)/Part 0/Server_CS/Server_CS.sln b/Chapter01(Socket)/Part 0/Server_CS/Server_CS.sln new file mode 100644 index 0000000..097cafb --- /dev/null +++ b/Chapter01(Socket)/Part 0/Server_CS/Server_CS.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Server_CS", "Server_CS\Server_CS.csproj", "{D2C9F0C0-8C52-4E44-AA28-749E15CBBA08}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D2C9F0C0-8C52-4E44-AA28-749E15CBBA08}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D2C9F0C0-8C52-4E44-AA28-749E15CBBA08}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D2C9F0C0-8C52-4E44-AA28-749E15CBBA08}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D2C9F0C0-8C52-4E44-AA28-749E15CBBA08}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Chapter01(Socket)/Part 0/Server_CS/Server_CS.suo b/Chapter01(Socket)/Part 0/Server_CS/Server_CS.suo new file mode 100644 index 0000000000000000000000000000000000000000..7aaf323e70c67192d350ca0f5b1ade55dc630f91 GIT binary patch literal 11776 zcmeI2TWnlM8OLXxCb;xQn>0Wh(j}PU(%M}+PU_UX?XEY8!Hv_bV+U#o8{crezR0_Y z6E&3(4-_hjs=kywKvfA|0z%}GK0!e$5kjeuc;N|n-~l935CRk_F~9%Jj`!?lFUM;q zR%pli@0`n=`M&ebcbo6{-HUhs@y+x1{mGQIr_2U(b?H{KDR4c)v0&RrjA`OP=U11O zmfS^SIQ*d9L=w0HueTJ|a3j6e`$M1^+zM_79|pI9JHZ{`F2M5Jb-$bb94W+NM=5iv<`m^Ox8j9@k}khr?Ogh+HfS;?XQoZRnWE2|!~BlJlfRyG!>azan5Ky4 zl3j?8ssjTz@HprJ8v7*uQ{ZXv42XjSNP=FF0(-$e zupjh+&wu_RNK?~_3zAoHb-mvYfu+pZvboEzAl$2z|YetWfJvn6_r8v0nbu z(8`;K&>iW(0>@DkCRE~Ce5`9m6((`ov z`FhcJT)Foz*FQ;G{z~5Agq4#bQuT)Zt=RsxpV-vo=B!TtG;&i$l&wyjJEAXL)|_GW zU-8vXT25cScm}Gx2sL9@)hn}_CThw%)8IPko zdF#35i+o&hPb;@^@>jkUmVWU4udl_G>c2E=l=YNtD$1=@E2vV*bgQ{mGEtqAO(qgy z$e10r*_`vCh#h+V~KQS+BAG zv$Yr1V8YUWh_TwE*p?&Ja9i**7^jlhF+@-;iOpfSrAh1}SCquMlvhct0=3LrMjlLJ zwY^s&sv<*a600<|n8c3rq)%d%2$m*82e7qgZa=co%yO>$p$+D)%(G5RiRpF26;#qn|4D)VsyIDtrg1Tp4Gs<~=C zFl2bGwR1J?EXAVDxQcY${vk+J)q={rx#*^`&350vmb~?_By0V)hfpRdxT;3us7M@d zaT--jBJIOeCMIyh@)=Ux1S1s~iqe02&G{+jFDvCm8B-iS<=M+&0@PPxYC5 zP;LL0HZ8YZi9h_xFZQ4R!?}x_e>i+szj^nqe;oPdj-RD|{P^!jzx$t4D*4dTrh8(` z+gIP--v5K|js4{H?U(jc8|lV}`+Y8I%w^u<{pq-jwd*@0jaMI%=%{o#M?{!H3l`A> zMZjVds=W@{|I4>%KOHvy1oKbtqm&2F!;3b)^QXjLlXL;u=+^E(gzac4vqp#X(qx1)C z?vsU!S&PYlYVlNBP}S$bS;N?HmDoh80+#54-N3&Nk$) zrBqENEd3Z`TMHBTI=`>~r}5j;L3waxh4ogzzyC_)-vMo3f7y!sfs*Ca(3XZ)xihd@}1Qa?X2}Ca&(g{J-i-&Q+vWrhnI3C-sMA-3x1foviEDf&mO$ zYnvwbkQZLG^;qpWC-Fz}fc2X8KVJ94(hur?E&o?r^Brf@pCj7OD#Hy+|4WSZ@uwDj z$*Epzr2ehS%Z`HKly2t2e~}3P-Qg7eL^*}uvT4U1+_J5u=DU|t<{I31*5cJ!L8DT* ze&1zQ>lv=~7H(VXwz|j7zb~9``Rk^4Z0z(phA&R4GF3hE_ahZ;C+w~>YrhKj61@`a zfA+D%9OQdwoE1;m!HNzYY=IR=dJ0EQua}low{iT;&=+HxeUKkj&&J6MOLIU)yE$7m z(f2n0^{CPpi}tdogYzv{<~%X_eTn|Q*XirUoc~vyanWQRsVV=_Za@W-IKSHKsv4hV zuiJ-bRw>8nlVtYN`(9?H5x6(i-zT}~e+`^24I{M!XzKvq6!azS+HY9x+)rUU`qt~d zdTB4FOmv!SCn+f@7i*`a6vLW2fi(U!E2BNq40qg@TxCI7{^SV-@uB~BxN&^=YHcM> z^xqgaj+0VJ_*Ge7Y3P4wO4rTH%f&9YV(TF%dE+2wL4MX#ll5gG$d}i2&!5({h;%Z= zjw1XMtEru6?+`Z6ZZyNFmAjOd#&2Yv_1dp4T~Gw|nKy?Gw)OkZm(^ximG@q2Cz%EX Iy28i)2X + + Debug + AnyCPU + 8.0.50727 + 2.0 + {D2C9F0C0-8C52-4E44-AA28-749E15CBBA08} + Exe + Properties + Server_CS + Server_CS + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 0/Server_CS/Server_CS/bin/Debug/Server_CS.exe b/Chapter01(Socket)/Part 0/Server_CS/Server_CS/bin/Debug/Server_CS.exe new file mode 100644 index 0000000000000000000000000000000000000000..55492ace8d640328bb3247eabe7293ee32d88c67 GIT binary patch literal 16384 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 literal 0 HcmV?d00001 diff --git a/Chapter01(Socket)/Part 0/Server_CS/Server_CS/bin/Debug/Server_CS.vshost.exe b/Chapter01(Socket)/Part 0/Server_CS/Server_CS/bin/Debug/Server_CS.vshost.exe new file mode 100644 index 0000000000000000000000000000000000000000..ce3f102c36be07551ba7c7fad64c8b24709bdb91 GIT binary patch literal 5632 zcmeHLX>3&26+Umg;MiccvX$*QEU{T$9osBr9ou8T!CO4GX{f1rGjlzDVoO|!Prgq~qltDz9r~?B;$Ix=|OT07mVmN>1Z}RE2drlP`Q)*5X zG<6uR8guNZqj#!d-Lh;?4GGnWTdHBHf%>4@X-9-MYENnj=gbf*dm1jLN#cftptQL=|aWNfvWlQP?*hWf2t+?Lo}%k$q{6hp9nL zgjRO$01v%$;r&I$YdXI8&)FG$2N&cn{PM~EIUlboSblZ6|HQ<{cD(w-H$Pi{GB!Q7 z|H6B@KUnhF)GHNJoBn(6mQTf)Ia@0-J4*9+&;GPbIdCa>RcoH#{Qln`m|0=hKQWNC z!#y@@!#j(1Un%|Q)aTD`kDfW+w4v>(rqa#M$bmyo{cgLmeRW{M$FpYm3da-W&f8x& z0nLKxvau(Eo?AGHIeD_NCo>0YuLwR+p^ze1#Ifrt(TcT2#Y;+-Fe_7rvIeo7wS(yA zX#bP}I_Nou6?Iv{Lq2$0&05=B9YEWMekRLTn0AN-P|#J@A{QJ}x~7y8++mAT5@Rw| z@Q22sG9U6Nxk<0GsfFs1h&|K+JVrkSo|br>`a#cB7|RvrMHFKBr(Uw zl5-@k@UiBtzD8d*9q>KoTQAp`O~3WAt@psmrLqha^n)4xjBMH^@f9F@n1~ujPf^Cu z1X8hoxc8RIqmNGBB-e08_V!a4+g72m#M~*saoB2`Xc84k`hJPumRK&aTH=EeACjm` zG$d}7*dy^#;3Rrn;NPL;}jK9&ZX=lbcdYSfRoToq2>!3ASPn#8u z^5_H5<0%vLR4N9}qQ$`Zh^$7XR0mux@nJd(I!OC~-=*IJ!;-UI&T=Kai#`PZNxBT& zOIH;?y#RZey+d~b$L>D*2U4BLHo7PZt&wf=(v$RGXdorBqSlVYO|go)+z#9IG|?@n z%JQ6^2HUVasx`un?b_|0)?&DE-3)s1h+%8%Ad2nU;Mif|y42~0ZO1f16zp+5(Mk28 zEh6lZ7WQn1YIVa(4rq;W%QHHKR%v&}3{yBk;dB{LLCFE;>z)xZOvCFb_i!dcaZe1+ z7VReV8n#8{t}8l2X3u)jvj&QWL{kF+Vd_0WBWeu|C7jb5g=@zhHd-g*o}-(Cj2hjF z#`S2LwxI3_6TXN_8!^$tUW;&C*dJ1wvR7@j+fFBZw=LZqR*HQcc5v8%N;}r$7|{;z zRXI0nx6BteC@kn? zx7}3wC`~t$^_JixeXZ}r;oYm_b%)++Tlw0>+HX%C`+@-Ake_bp%{*%iWKZ&%~jNE(TX9o*6g%-Rh7EHhP*OlHTd*KJ4?D*a4-;jvD#}$T zOIQn=@p>DHr7y*I8$Y743XSBB{D^C1B}AnPX@5AP4(=bd(sp9DBln=DmYb$353H*? z$g9&OB6vF%DKvX%LSbW(nz&Qd#HFe-r=+-e5z#jlnlL1prkZH9Lb+*IH9O7$Qj&K* zi1dqo@D0qF`iTGURq zl$y==AvIxC2iL{8P9EfJ^b+N0<`}+a;gbg`1N`W1H1*>kDp+;uS4JU@0csxjmC)CT zpTKMnR`9n2umfBdeGU9>R4z4m@TcTs(x)CoK$mlQycQmW;RnyOu?i1|k+nM%lbG(k zU)oNsIsglXDI;B4QqNAHkZxdK@%Jm&3M+mh+d;;>sRJgjdxC zjKDHcB4+hTNzOL=or(eXIE%yQ&!joDM74@5pgblnV%bN-JGR6=O_ohmcu4Tp%XjSM5Nh|8#A5K!MWx={dKuZ TBcLY!&!}P9UAq3eeA)j4ZC9R* literal 0 HcmV?d00001 diff --git a/Chapter01(Socket)/Part 0/Server_CS/Server_CS/obj/Debug/Server_CS.exe b/Chapter01(Socket)/Part 0/Server_CS/Server_CS/obj/Debug/Server_CS.exe new file mode 100644 index 0000000000000000000000000000000000000000..55492ace8d640328bb3247eabe7293ee32d88c67 GIT binary patch literal 16384 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 literal 0 HcmV?d00001 diff --git a/Chapter01(Socket)/Part 0/Server_CS/Server_CS/obj/Server_CS.csproj.FileList.txt b/Chapter01(Socket)/Part 0/Server_CS/Server_CS/obj/Server_CS.csproj.FileList.txt new file mode 100644 index 0000000..b020531 --- /dev/null +++ b/Chapter01(Socket)/Part 0/Server_CS/Server_CS/obj/Server_CS.csproj.FileList.txt @@ -0,0 +1,5 @@ +obj\Debug\ResolveAssemblyReference.cache +bin\Debug\Server_CS.exe +bin\Debug\Server_CS.pdb +obj\Debug\Server_CS.exe +obj\Debug\Server_CS.pdb diff --git a/Chapter01(Socket)/Part 1/WinClient/WinClient.sln b/Chapter01(Socket)/Part 1/WinClient/WinClient.sln new file mode 100644 index 0000000..05b6717 --- /dev/null +++ b/Chapter01(Socket)/Part 1/WinClient/WinClient.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "WinClient", "WinClient\WinClient.vbproj", "{18BAFD43-9363-4F34-80A2-F5CB6DE70617}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {18BAFD43-9363-4F34-80A2-F5CB6DE70617}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {18BAFD43-9363-4F34-80A2-F5CB6DE70617}.Debug|Any CPU.Build.0 = Debug|Any CPU + {18BAFD43-9363-4F34-80A2-F5CB6DE70617}.Release|Any CPU.ActiveCfg = Release|Any CPU + {18BAFD43-9363-4F34-80A2-F5CB6DE70617}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Chapter01(Socket)/Part 1/WinClient/WinClient.suo b/Chapter01(Socket)/Part 1/WinClient/WinClient.suo new file mode 100644 index 0000000000000000000000000000000000000000..c5b5fa4908796d3725571209d978631b31dce8c8 GIT binary patch literal 18432 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 G8~J|`4d#*n literal 0 HcmV?d00001 diff --git a/Chapter01(Socket)/Part 1/WinClient/WinClient/Form1.Designer.vb b/Chapter01(Socket)/Part 1/WinClient/WinClient/Form1.Designer.vb new file mode 100644 index 0000000..27cd2d5 --- /dev/null +++ b/Chapter01(Socket)/Part 1/WinClient/WinClient/Form1.Designer.vb @@ -0,0 +1,113 @@ +Partial Public Class Form1 + Inherits System.Windows.Forms.Form + + _ + Public Sub New() + MyBase.New() + + 'This call is required by the Windows Form Designer. + InitializeComponent() + + End Sub + + 'Form overrides dispose to clean up the component list. + _ + Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.txtMessageHistory = New System.Windows.Forms.TextBox + Me.txtMessage = New System.Windows.Forms.TextBox + Me.btnSend = New System.Windows.Forms.Button + Me.btnSignIn = New System.Windows.Forms.Button + Me.txtNick = New System.Windows.Forms.TextBox + Me.Label1 = New System.Windows.Forms.Label + Me.SuspendLayout() + ' + 'txtMessageHistory + ' + Me.txtMessageHistory.BackColor = System.Drawing.SystemColors.ControlLightLight + Me.txtMessageHistory.Location = New System.Drawing.Point(2, 39) + Me.txtMessageHistory.Multiline = True + Me.txtMessageHistory.Name = "txtMessageHistory" + Me.txtMessageHistory.ReadOnly = True + Me.txtMessageHistory.ScrollBars = System.Windows.Forms.ScrollBars.Vertical + Me.txtMessageHistory.Size = New System.Drawing.Size(268, 285) + Me.txtMessageHistory.TabIndex = 0 + ' + 'txtMessage + ' + Me.txtMessage.Location = New System.Drawing.Point(2, 331) + Me.txtMessage.Name = "txtMessage" + Me.txtMessage.Size = New System.Drawing.Size(186, 20) + Me.txtMessage.TabIndex = 1 + ' + 'btnSend + ' + Me.btnSend.Enabled = False + Me.btnSend.Location = New System.Drawing.Point(194, 329) + Me.btnSend.Name = "btnSend" + Me.btnSend.Size = New System.Drawing.Size(75, 23) + Me.btnSend.TabIndex = 2 + Me.btnSend.Text = "Send" + ' + 'btnSignIn + ' + Me.btnSignIn.Location = New System.Drawing.Point(194, 10) + Me.btnSignIn.Name = "btnSignIn" + Me.btnSignIn.Size = New System.Drawing.Size(75, 23) + Me.btnSignIn.TabIndex = 3 + Me.btnSignIn.Text = "Sign In" + ' + 'txtNick + ' + Me.txtNick.Location = New System.Drawing.Point(44, 12) + Me.txtNick.Name = "txtNick" + Me.txtNick.Size = New System.Drawing.Size(144, 20) + Me.txtNick.TabIndex = 4 + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.Location = New System.Drawing.Point(12, 15) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(29, 13) + Me.Label1.TabIndex = 5 + Me.Label1.Text = "Nick" + ' + 'Form1 + ' + Me.AcceptButton = Me.btnSend + Me.BackColor = System.Drawing.SystemColors.Control + Me.ClientSize = New System.Drawing.Size(272, 355) + Me.Controls.Add(Me.Label1) + Me.Controls.Add(Me.txtNick) + Me.Controls.Add(Me.btnSignIn) + Me.Controls.Add(Me.btnSend) + Me.Controls.Add(Me.txtMessage) + Me.Controls.Add(Me.txtMessageHistory) + Me.Name = "Form1" + Me.Text = "Chat Client" + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents txtMessageHistory As System.Windows.Forms.TextBox + Friend WithEvents txtMessage As System.Windows.Forms.TextBox + Friend WithEvents btnSend As System.Windows.Forms.Button + Friend WithEvents btnSignIn As System.Windows.Forms.Button + Friend WithEvents txtNick As System.Windows.Forms.TextBox + Friend WithEvents Label1 As System.Windows.Forms.Label + +End Class diff --git a/Chapter01(Socket)/Part 1/WinClient/WinClient/Form1.resx b/Chapter01(Socket)/Part 1/WinClient/WinClient/Form1.resx new file mode 100644 index 0000000..19dc0dd --- /dev/null +++ b/Chapter01(Socket)/Part 1/WinClient/WinClient/Form1.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 1/WinClient/WinClient/Form1.vb b/Chapter01(Socket)/Part 1/WinClient/WinClient/Form1.vb new file mode 100644 index 0000000..88ea112 --- /dev/null +++ b/Chapter01(Socket)/Part 1/WinClient/WinClient/Form1.vb @@ -0,0 +1,101 @@ +Imports System.Net.Sockets + +Public Class Form1 + Const portNo As Integer = 500 + Dim client As TcpClient + Dim data() As Byte + + Private Sub btnSend_Click( _ + ByVal sender As System.Object, _ + ByVal e As System.EventArgs) _ + Handles btnSend.Click + SendMessage(txtMessage.Text) + txtMessage.Clear() + End Sub + + Public Sub SendMessage(ByVal message As String) + Try + '---send a message to the server + Dim ns As NetworkStream = client.GetStream + Dim data As Byte() = _ + System.Text.Encoding.ASCII.GetBytes(message) + '---send the text--- + ns.Write(data, 0, data.Length) + ns.Flush() + Catch ex As Exception + MsgBox(ex.ToString) + End Try + End Sub + + Public Sub ReceiveMessage(ByVal ar As IAsyncResult) + Try + Dim bytesRead As Integer + bytesRead = client.GetStream.EndRead(ar) + If bytesRead < 1 Then + Exit Sub + Else + Dim para() As Object = _ + {System.Text.Encoding.ASCII.GetString( _ + data, 0, bytesRead)} + Me.Invoke(New delUpdateHistory( _ + AddressOf Me.UpdateHistory), para) + End If + client.GetStream.BeginRead( _ + data, 0, CInt(client.ReceiveBufferSize), _ + AddressOf ReceiveMessage, Nothing) + Catch ex As Exception + End Try + End Sub + + Private Sub btnSignIn_Click( _ + ByVal sender As System.Object, _ + ByVal e As System.EventArgs) _ + Handles btnSignIn.Click + If btnSignIn.Text = "Sign In" Then + Try + '---connect to server + client = New TcpClient + client.Connect("127.0.0.1", portNo) + ReDim data(client.ReceiveBufferSize) + SendMessage(txtNick.Text) + '---read from server + client.GetStream.BeginRead( _ + data, 0, CInt(client.ReceiveBufferSize), _ + AddressOf ReceiveMessage, Nothing) + btnSignIn.Text = "Sign Out" + btnSend.Enabled = True + Catch ex As Exception + MsgBox(ex.ToString) + End Try + Else + '---disconnect from server + Disconnect() + btnSignIn.Text = "Sign In" + btnSend.Enabled = False + End If + End Sub + + Public Sub Disconnect() + '---Disconnect from server + Try + client.GetStream.Close() + client.Close() + Catch ex As Exception + MsgBox(ex.ToString) + End Try + End Sub + + '---delegate and subroutine to update the TextBox control + Public Delegate Sub delUpdateHistory(ByVal str As String) + Public Sub UpdateHistory(ByVal str As String) + txtMessageHistory.AppendText(str) + End Sub + + Private Sub Form1_FormClosing( _ + ByVal sender As Object, _ + ByVal e As System.Windows.Forms.FormClosingEventArgs) _ + Handles Me.FormClosing + Disconnect() + End Sub +End Class + diff --git a/Chapter01(Socket)/Part 1/WinClient/WinClient/My Project/AssemblyInfo.vb b/Chapter01(Socket)/Part 1/WinClient/WinClient/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..76041b3 --- /dev/null +++ b/Chapter01(Socket)/Part 1/WinClient/WinClient/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Chapter01(Socket)/Part 1/WinClient/WinClient/My Project/MyApplication.myapp b/Chapter01(Socket)/Part 1/WinClient/WinClient/My Project/MyApplication.myapp new file mode 100644 index 0000000..17c28e4 --- /dev/null +++ b/Chapter01(Socket)/Part 1/WinClient/WinClient/My Project/MyApplication.myapp @@ -0,0 +1,10 @@ + + + true + WinClient.Form1 + false + 0 + true + 0 + 0 + diff --git a/Chapter01(Socket)/Part 1/WinClient/WinClient/My Project/MyApplication.vb b/Chapter01(Socket)/Part 1/WinClient/WinClient/My Project/MyApplication.vb new file mode 100644 index 0000000..e9ad238 --- /dev/null +++ b/Chapter01(Socket)/Part 1/WinClient/WinClient/My Project/MyApplication.vb @@ -0,0 +1,23 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + Partial Class MyApplication + + + Protected Overrides Sub OnCreateMainForm() + Me.MainForm = My.Forms.Form1 + End Sub + End Class +End Namespace diff --git a/Chapter01(Socket)/Part 1/WinClient/WinClient/My Project/MyEvents.vb b/Chapter01(Socket)/Part 1/WinClient/WinClient/My Project/MyEvents.vb new file mode 100644 index 0000000..d67825f --- /dev/null +++ b/Chapter01(Socket)/Part 1/WinClient/WinClient/My Project/MyEvents.vb @@ -0,0 +1,15 @@ +Namespace My + + 'Use the editor window dropdowns in the Application pane of the Project Designer to handle MyApplication Events + ' + 'Startup: Raised when the application starts, before the startup form is created. + 'Shutdown: Raised after all application forms are closed. This event is not raised if the application is terminating abnormally. + 'UnhandledException: Raised if the application encounters an unhandled exception. + 'StartupNextInstance: Raised when launching a single-instance application and the application is already active. + 'NetworkAvailabilityChanged: Raised when the network connection is connected or disconnected. + + Partial Friend Class MyApplication + + End Class + +End Namespace diff --git a/Chapter01(Socket)/Part 1/WinClient/WinClient/My Project/MyResources.resx b/Chapter01(Socket)/Part 1/WinClient/WinClient/My Project/MyResources.resx new file mode 100644 index 0000000..3e18af9 --- /dev/null +++ b/Chapter01(Socket)/Part 1/WinClient/WinClient/My Project/MyResources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 1/WinClient/WinClient/My Project/MyResources.vb b/Chapter01(Socket)/Part 1/WinClient/WinClient/My Project/MyResources.vb new file mode 100644 index 0000000..250357e --- /dev/null +++ b/Chapter01(Socket)/Part 1/WinClient/WinClient/My Project/MyResources.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict Off +Option Explicit On + +Imports System +Imports System.IO +Imports System.Resources + +Namespace My.Resources + + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + 'This class was auto-generated by the Strongly Typed Resource Builder + 'class via a tool like ResGen or Visual Studio.NET. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + _ + Module MyResources + + Private _resMgr As System.Resources.ResourceManager + + Private _resCulture As System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Public ReadOnly Property ResourceManager() As System.Resources.ResourceManager + Get + If (_resMgr Is Nothing) Then + Dim temp As System.Resources.ResourceManager = New System.Resources.ResourceManager("WinClient.MyResources", GetType(MyResources).Assembly) + System.Threading.Thread.MemoryBarrier + _resMgr = temp + End If + Return _resMgr + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Public Property Culture() As System.Globalization.CultureInfo + Get + Return _resCulture + End Get + Set + _resCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Chapter01(Socket)/Part 1/WinClient/WinClient/My Project/MySettings.settings b/Chapter01(Socket)/Part 1/WinClient/WinClient/My Project/MySettings.settings new file mode 100644 index 0000000..0bcb11d --- /dev/null +++ b/Chapter01(Socket)/Part 1/WinClient/WinClient/My Project/MySettings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 1/WinClient/WinClient/My Project/MySettings.vb b/Chapter01(Socket)/Part 1/WinClient/WinClient/My Project/MySettings.vb new file mode 100644 index 0000000..3d12c6f --- /dev/null +++ b/Chapter01(Socket)/Part 1/WinClient/WinClient/My Project/MySettings.vb @@ -0,0 +1,38 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict Off +Option Explicit On + + + +Partial Friend NotInheritable Class MySettings + Inherits System.Configuration.ApplicationSettingsBase + + Private Shared m_Value As MySettings + + Private Shared m_SyncObject As Object = New Object + + _ + Public Shared ReadOnly Property Value() As MySettings + Get + If (MySettings.m_Value Is Nothing) Then + System.Threading.Monitor.Enter(MySettings.m_SyncObject) + If (MySettings.m_Value Is Nothing) Then + Try + MySettings.m_Value = New MySettings + Finally + System.Threading.Monitor.Exit(MySettings.m_SyncObject) + End Try + End If + End If + Return MySettings.m_Value + End Get + End Property +End Class diff --git a/Chapter01(Socket)/Part 1/WinClient/WinClient/WinClient.vbproj b/Chapter01(Socket)/Part 1/WinClient/WinClient/WinClient.vbproj new file mode 100644 index 0000000..e1343bc --- /dev/null +++ b/Chapter01(Socket)/Part 1/WinClient/WinClient/WinClient.vbproj @@ -0,0 +1,94 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {18BAFD43-9363-4F34-80A2-F5CB6DE70617} + WinExe + WinClient.My.MyApplication + WinClient + WinClient + WindowsForms + + + true + full + true + true + bin\ + WinClient.xml + 42016,42017,42018,42019,42032 + + + pdbonly + false + true + true + bin\ + WinClient.xml + 42016,42017,42018,42019,42032 + + + + + + + + + + + + + + + + + + Form + + + Form1.vb + Form + + + + True + MyApplication.myapp + + + True + True + MyResources.resx + + + True + MySettings.settings + True + + + + + + Form1.vb + Designer + + + VbMyResourcesResXFileCodeGenerator + MyResources.vb + My.Resources + + + + + + MyApplicationCodeGenerator + MyApplication.vb + + + SettingsSingleFileGenerator + MySettings.vb + + + + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 1/WinClient/WinClient/WinClient.vbproj.user b/Chapter01(Socket)/Part 1/WinClient/WinClient/WinClient.vbproj.user new file mode 100644 index 0000000..e1d33e3 --- /dev/null +++ b/Chapter01(Socket)/Part 1/WinClient/WinClient/WinClient.vbproj.user @@ -0,0 +1,7 @@ + + + 8.0.41115 + ProjectFiles + 0 + + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 1/WinClient/WinClient/app.config b/Chapter01(Socket)/Part 1/WinClient/WinClient/app.config new file mode 100644 index 0000000..f636923 --- /dev/null +++ b/Chapter01(Socket)/Part 1/WinClient/WinClient/app.config @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 1/WinClient/WinClient/bin/WinClient.exe b/Chapter01(Socket)/Part 1/WinClient/WinClient/bin/WinClient.exe new file mode 100644 index 0000000000000000000000000000000000000000..f66a27ddb29e31e3b9960252d0821d2e4c45c53d GIT binary patch literal 32768 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 literal 0 HcmV?d00001 diff --git a/Chapter01(Socket)/Part 1/WinClient/WinClient/bin/WinClient.exe.config b/Chapter01(Socket)/Part 1/WinClient/WinClient/bin/WinClient.exe.config new file mode 100644 index 0000000..f636923 --- /dev/null +++ b/Chapter01(Socket)/Part 1/WinClient/WinClient/bin/WinClient.exe.config @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 1/WinClient/WinClient/bin/WinClient.pdb b/Chapter01(Socket)/Part 1/WinClient/WinClient/bin/WinClient.pdb new file mode 100644 index 0000000000000000000000000000000000000000..acd60008ec61c8c4ca55f4903ffade2480cd38f9 GIT binary patch literal 58880 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 HPy+uC?HKX+ literal 0 HcmV?d00001 diff --git a/Chapter01(Socket)/Part 1/WinClient/WinClient/bin/WinClient.vshost.exe b/Chapter01(Socket)/Part 1/WinClient/WinClient/bin/WinClient.vshost.exe new file mode 100644 index 0000000000000000000000000000000000000000..ce3f102c36be07551ba7c7fad64c8b24709bdb91 GIT binary patch literal 5632 zcmeHLX>3&26+Umg;MiccvX$*QEU{T$9osBr9ou8T!CO4GX{f1rGjlzDVoO|!Prgq~qltDz9r~?B;$Ix=|OT07mVmN>1Z}RE2drlP`Q)*5X zG<6uR8guNZqj#!d-Lh;?4GGnWTdHBHf%>4@X-9-MYENnj=gbf*dm1jLN#cftptQL=|aWNfvWlQP?*hWf2t+?Lo}%k$q{6hp9nL zgjRO$01v%$;r&I$YdXI8&)FG$2N&cn{PM~EIUlboSblZ6|HQ<{cD(w-H$Pi{GB!Q7 z|H6B@KUnhF)GHNJoBn(6mQTf)Ia@0-J4*9+&;GPbIdCa>RcoH#{Qln`m|0=hKQWNC z!#y@@!#j(1Un%|Q)aTD`kDfW+w4v>(rqa#M$bmyo{cgLmeRW{M$FpYm3da-W&f8x& z0nLKxvau(Eo?AGHIeD_NCo>0YuLwR+p^ze1#Ifrt(TcT2#Y;+-Fe_7rvIeo7wS(yA zX#bP}I_Nou6?Iv{Lq2$0&05=B9YEWMekRLTn0AN-P|#J@A{QJ}x~7y8++mAT5@Rw| z@Q22sG9U6Nxk<0GsfFs1h&|K+JVrkSo|br>`a#cB7|RvrMHFKBr(Uw zl5-@k@UiBtzD8d*9q>KoTQAp`O~3WAt@psmrLqha^n)4xjBMH^@f9F@n1~ujPf^Cu z1X8hoxc8RIqmNGBB-e08_V!a4+g72m#M~*saoB2`Xc84k`hJPumRK&aTH=EeACjm` zG$d}7*dy^#;3Rrn;NPL;}jK9&ZX=lbcdYSfRoToq2>!3ASPn#8u z^5_H5<0%vLR4N9}qQ$`Zh^$7XR0mux@nJd(I!OC~-=*IJ!;-UI&T=Kai#`PZNxBT& zOIH;?y#RZey+d~b$L>D*2U4BLHo7PZt&wf=(v$RGXdorBqSlVYO|go)+z#9IG|?@n z%JQ6^2HUVasx`un?b_|0)?&DE-3)s1h+%8%Ad2nU;Mif|y42~0ZO1f16zp+5(Mk28 zEh6lZ7WQn1YIVa(4rq;W%QHHKR%v&}3{yBk;dB{LLCFE;>z)xZOvCFb_i!dcaZe1+ z7VReV8n#8{t}8l2X3u)jvj&QWL{kF+Vd_0WBWeu|C7jb5g=@zhHd-g*o}-(Cj2hjF z#`S2LwxI3_6TXN_8!^$tUW;&C*dJ1wvR7@j+fFBZw=LZqR*HQcc5v8%N;}r$7|{;z zRXI0nx6BteC@kn? zx7}3wC`~t$^_JixeXZ}r;oYm_b%)++Tlw0>+HX%C`+@-Ake_bp%{*%iWKZ&%~jNE(TX9o*6g%-Rh7EHhP*OlHTd*KJ4?D*a4-;jvD#}$T zOIQn=@p>DHr7y*I8$Y743XSBB{D^C1B}AnPX@5AP4(=bd(sp9DBln=DmYb$353H*? z$g9&OB6vF%DKvX%LSbW(nz&Qd#HFe-r=+-e5z#jlnlL1prkZH9Lb+*IH9O7$Qj&K* zi1dqo@D0qF`iTGURq zl$y==AvIxC2iL{8P9EfJ^b+N0<`}+a;gbg`1N`W1H1*>kDp+;uS4JU@0csxjmC)CT zpTKMnR`9n2umfBdeGU9>R4z4m@TcTs(x)CoK$mlQycQmW;RnyOu?i1|k+nM%lbG(k zU)oNsIsglXDI;B4QqNAHkZxdK@%Jm&3M+mh+d;;>sRJgjdxC zjKDHcB4+hTNzOL=or(eXIE%yQ&!joDM74@5pgblnV%bN-JGR6=O_ohmcu4Tp%XjSM5Nh|8#A5K!MWx={dKuZ TBcLY!&!}P9UAq3eeA)j4ZC9R* literal 0 HcmV?d00001 diff --git a/Chapter01(Socket)/Part 1/WinClient/WinClient/bin/WinClient.vshost.exe.config b/Chapter01(Socket)/Part 1/WinClient/WinClient/bin/WinClient.vshost.exe.config new file mode 100644 index 0000000..f636923 --- /dev/null +++ b/Chapter01(Socket)/Part 1/WinClient/WinClient/bin/WinClient.vshost.exe.config @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 1/WinClient/WinClient/bin/WinClient.xml b/Chapter01(Socket)/Part 1/WinClient/WinClient/bin/WinClient.xml new file mode 100644 index 0000000..3a4f94d --- /dev/null +++ b/Chapter01(Socket)/Part 1/WinClient/WinClient/bin/WinClient.xml @@ -0,0 +1,11 @@ + + + + +WinClient + + + + + + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 1/WinClient/WinClient/obj/Release/TempPE/My Project.MyResources.vb.dll b/Chapter01(Socket)/Part 1/WinClient/WinClient/obj/Release/TempPE/My Project.MyResources.vb.dll new file mode 100644 index 0000000000000000000000000000000000000000..4d2d751b0c7420e02e5742c0ee03fed22636a3a5 GIT binary patch literal 7168 zcmeHLeQX@n5uf*N@5ATB_-yB^cARw#jT7Um35Ebd;Mix!h8zj8lR$;A&vzSV)4kiv z?mF>7aSx(arKFUq6@^Nbpi!!nKia6Jl%}l!rA45MD*Vx+NHT`WW!5c zPmAp@bxrO!UA^eovrZJ)y`5=SEGm#wSg1yxqsb^yN+uR7XuwP>H7^#`OkMM;{u=jzF-^3rN_+%FCqe|(5d%F|rHGQAG4Fvs*8%{Uign5QU{5C<*U3Vx zd>aJ98?_Qw%@~CDNyo5kC@Np4A!J*hz*RE_iH2%Og`VNOVz6(L!u0BT)W9V~LUBJj z=#)K}8sCIFJdJPqj*AV9m%-EAC}Z$TbCH>N8D*!r4U9ok+eFmbF9=KX+KC08VaFkj z_flk2Rfg$_1-4-~o+pFB!~$Ejk%cAmutZ{k*Rhw^$Rs7OUKlbN>H!+>!FB{QeSfeD zmtaEnv{oe*KM_yj3?|DS6l%?SJO>eC&WbwzYVZ+nLLNnM?R|01RByaD(yK`oWNW`v zrHZH%p%(gJ1>$Uv+{=*jxeCTMvCieNgEbQJ?loZ9*yVU*^e6&v?`!FSc5kCEiQ4TD zMV0NF{Q1)D0P7x}$2paBHEbbUi3J3y^LoU0ma$831yv>AIy1?Ajj{P16-NbW|Fs*O%0_*rYu^uWu zx5GsqBW2cjy}3rC8yc@F6@O8IKqRfDWgAr*#n8k}Ln5eTi0IJfWPkFi{w zfEohoUO>>e^VL1!Ic8zjWsS3#)Q@}j?g?r}fZRU1x9uKJ;jV*z1i9`Wvg{eqJV1)Q zE56;(fPm;-aV4KqL`v=ab~+q- zfVR^O;SF-Tl71I(KyIXm!#B!nfv4n8=%?XTG_Iu2(aYg!`5e6h_@d&x40u5PPT?Er z2yGEb>J_$3(v@Of4&nsAPlH(Xx9DT-^hZF($DwJ$Q^vE3Z-O%>%1ZwT-HlmC$W@SM z-4ANFcuYx;saeP9H2pw4t2n3W&vdOkt@tkj?v-a1{|#l~4Q1^u#V5fll3=eIM7MaK zbcO4RKdA6Qg-_?Z4x2pc^}0~${G8C>4>z@DJSjIor5QEIckb*PWFI|-zO$a`>(h2_&N6PGyqmQh z%bcOKnRRT}-sdIvnC@K08p^n4meQrI#iC_qGoEP|Xs=lqwoIeoCDSE{hV6WD&NCdK zJ01Igk@bM>HD)FZ=a88-T$wj9H9W*(P%`V;aP>lACR2v*a5bWdlIt0H^4-Q%HFwtVrm7nG zDq0^Ku~yC6lxJ#*&Tbc3V?~AJ)oqCiOKWqPpQ_9467AXrYiErd#8$dw(>B8!%eec8 z@livQrJ}(Mb)U5T_XrxsUU|mU)Of-5GKDNKnj|wIC}p}u+pQO~i!f7}aFN{dHv09D z950|+3K@%rZD8}>o{TkTpcpupiosr0&G~y!QxKKXNM{O}StM}EG2Ha5LxJKpyx(Lj z^De(uhvzJB&N0Rd`)s8c&?@Uo4RIh9xm$xP|EMAfmVvAL%-K1|U#2GUm1p(lNXuGWUA)9v23`1o5TIdpErTvdbs6bkna&J7tP7Foi&Z`| z!nzbqO{?&{PnRZ*e9^+`jb4LKK>XpOiy!Vmfc`D!-xB_Z0YS0PBLy$*|HYJ$qOrZXe!l^lr&w69HZW|;z>Tf%fW~XooSk0ijjiU2e=y2oce*4hz zcwCCZMR?6}piw~YvvBvIXM^&`N$oFKQottQ$Fkn_?#W~ zp%O1s|GO^(DldK=V(~L4 Ry;IY3FQ)o2|Nk!o{|4k5lM?^{ literal 0 HcmV?d00001 diff --git a/Chapter01(Socket)/Part 1/WinClient/WinClient/obj/Release/WinClient.Form1.resources b/Chapter01(Socket)/Part 1/WinClient/WinClient/obj/Release/WinClient.Form1.resources new file mode 100644 index 0000000000000000000000000000000000000000..06c24d06c1cab750788146ce052b37770f3fa530 GIT binary patch literal 180 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 literal 0 HcmV?d00001 diff --git a/Chapter01(Socket)/Part 1/WinClient/WinClient/obj/Release/WinClient.pdb b/Chapter01(Socket)/Part 1/WinClient/WinClient/obj/Release/WinClient.pdb new file mode 100644 index 0000000000000000000000000000000000000000..acd60008ec61c8c4ca55f4903ffade2480cd38f9 GIT binary patch literal 58880 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 HPy+uC?HKX+ literal 0 HcmV?d00001 diff --git a/Chapter01(Socket)/Part 1/WinClient/WinClient/obj/Release/WinClient.vbproj.GenerateResource.Cache b/Chapter01(Socket)/Part 1/WinClient/WinClient/obj/Release/WinClient.vbproj.GenerateResource.Cache new file mode 100644 index 0000000000000000000000000000000000000000..f9c1da70c011ee28075fef0d67c25bf318cfb415 GIT binary patch literal 844 zcma)4%}(1u5Vo7xtOSJGOH`>rX`w`d1|bf;Y`kN!WaC9Uc7=I> zir3-F3$!oLx9B^RnH3-utg2&aJf5BX=9~HK`JU(fCF3_+>jk;fv5KuhlVs7yTxl5{ z3!GuMa{?BXNe5d|kDqR5nCmRJFi0WKtkB)gVLsI={sP6ZnL#?3_O_FqRbFrW#y>D&48F`)BDA6*LZvkR!oE zEZuLmHZ=1KVZpW;bZ8_TTJv2=ur*Fh)D=`|xfq@ZodbGarQ!uavsTt??*VJQg!A4r z{69zUKeU)tqe;FVunWnxIpWDe$9ZJzydRM$mtl>PYvZCr6whfF-^K+=XmT3^x`H-e zcRQ(5P;Zb6IO> + + + +WinClient + + + + + + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 1/WinClient/WinClient/obj/WinClient.vbproj.FileList.txt b/Chapter01(Socket)/Part 1/WinClient/WinClient/obj/WinClient.vbproj.FileList.txt new file mode 100644 index 0000000..5707253 --- /dev/null +++ b/Chapter01(Socket)/Part 1/WinClient/WinClient/obj/WinClient.vbproj.FileList.txt @@ -0,0 +1,11 @@ +bin\WinClient.exe.config +bin\WinClient.exe +bin\WinClient.pdb +bin\WinClient.xml +obj\Release\ResolveAssemblyReference.cache +obj\Release\WinClient.Form1.resources +obj\Release\WinClient.MyResources.resources +obj\Release\WinClient.vbproj.GenerateResource.Cache +obj\Release\WinClient.exe +obj\Release\WinClient.xml +obj\Release\WinClient.pdb diff --git a/Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS.sln b/Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS.sln new file mode 100644 index 0000000..2c877d7 --- /dev/null +++ b/Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WinClient_CS", "WinClient_CS\WinClient_CS.csproj", "{5AE42AD9-0C4F-4E26-A9EE-13CDB60E9B2D}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {5AE42AD9-0C4F-4E26-A9EE-13CDB60E9B2D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5AE42AD9-0C4F-4E26-A9EE-13CDB60E9B2D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5AE42AD9-0C4F-4E26-A9EE-13CDB60E9B2D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5AE42AD9-0C4F-4E26-A9EE-13CDB60E9B2D}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS.suo b/Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS.suo new file mode 100644 index 0000000000000000000000000000000000000000..c8e9ff2920af3e367a3840fc55afc36f19a7a711 GIT binary patch literal 18944 zcmeI3U2I%O702&7O=xMFwn+#flw_NxA!+Ny&R3nJU+Y~bF>w+%PVCSw4UT>7Y;5nE z-F2LhRFop2^3gsaXjN5|F9`}l^aVj*5JjR$s7hWCf+vu8L@j-Rs?eC_ zD|Yc%|GoFlojYgd%sFSyoEcxea{FJu`|5_jIYsFqXPI+t;wEQ>FF(Y+VA5@l)4+|M zuT4x$*i6Uab}20)4!loWZ^)0~a;_Th4}lxOO<*PXFt{1q0#*Tr-nkWo!R=r*SOeCA zkAO|!qhLMw7}x+l4(4w@-qquo3n<@QL>W1D4GX}%X8Lk(c zE<^u3?djvLR@w}G>7w*3D1F&&>AaG3&V%w~19s>0JsTkX_sV!SKs03siuGUR*5%7r z(|-;B{rPgzf7yX8;BK%Ld=hK}+rd3R_1>4iM!0?oG=X;TY2dZ5pZh%^2U@^hun+79 z4}b^3L*QZX2#A7K5Cd`01`dFO;1KZYJW1tf}3XX#=Z~~kJ-Jl1Y0-pho zfyY4td=@+bRPX1w_JT8@4=7I~J^%*u&q=Q5zz`VD=cTx&!6^8AK2P6%f%`FV9*hHN zlC)XxE^)mKp3Fa!WzyblPd_*Mm0ON})%n`Urgxp+^180{&zNS3>zgFEFNR|K67h83 z*od3TWy8Ix{&1I@%Oz8T*+h??-SD=qbl;Gh+n(s`&E&$(iJoLCHk^dY=~&m)ht5oT z)Xn6QZZ>h;&8EjPeQq{F#To}^#RI9a;bDoM<2+YrtZczdlD_{3h#}<(Bsh&EjX5J& z4q5Z86Gp;PPCr-Kl^lObo(Fl8Kt^3;bOgETq*Na=*2^0g*&a3J(v%Eh|2$dJHAr8U zQRvGJwqzW7XK3-Dp`4*jz0mG+&XQk?wrU9H?Z14Cp!DVA$X8J+rr(O~cWJ{AJV+Z} ziHnufwrR{i@~_^_S6NJ7^PlW~&=J@QeaXMHFlhhf%X#xp(rLt|Nm>TsWe0bzkt1<` zh>=Lsk^~kp4PU}oxD33JR18oq!<#7Y#jz}Z39M&7JQK$fNaR_{svjyDcA7zqdir?| zW81s9m&{2jw^Lp+nBiU}C7Y7d7_yn9gkSm4H(|cYan15|A6ILU=aQmy zX_y`i7!a1P0eU=W?4Kyx-WS(mpV9wG+Ck~x$*1S@0&)x+caAwlb4{_1cTcvm zJZ+2_15a%@(#3u}I{$$tcx39f5p?s}H9|4-Py?njXnp*2x zt^bdpDZ@rj=KC_;4+@r%LjlZeOwN+_EpVQr^XCr# z=uaG-u@zM`)ym3=gfFB@9C#!4$J$x@aXL569ZaVYO;iVLMl@lWZt*3&`fAHV5hr0iO3o6<@2M^t-_8SkI8S=KI8^7`$!`epvD zd;a(L{}5d7H?&jqd6?E{tu4J37v`S6xB8y$WFH=M%WZYVqaRf7y~f;u{!5ir zT~PWvD672%C2ya{+yCie-jof}460Q@Ee-VgFWO4B*6P1IdF{pD4loC{A?0$gV@Q0X zanPEL)7{K-oafV%R!Q-L#S^ur3)+9#>TMDjQjg*G5Ocq* z@VJ@vwdNc|9%TV*rJ35_YVt2Rt(AyB*B$?o54=7<|5T$dIjNPr__qb|q`;1&obI#DW4YRpWT8bBF17x}`n6^f2Bw?;) z=CW~4Gq`Hj>)5?#M}fHSY*-z!qQ$oRR4II={j1VojrB{M8TiLR_!FICwyN#HUBI{2 z`pyekDf;OTSq0sLtCtH}Aa%P(HsR>kY3 zq(v*rTD_%6QEH8Kb^iIDzdv?t<<_G=erwH}zgYER<4V?M2V1*h-=gfyq9e7qyEwG7 zlHOWb(~?13R*}ZL?*7k;H>PZ+z}=Wm22_q^d&8ml#emsI88&+@apD23L?;ijXL5oQ zhEYbM%@kI=tC`Ik#mDyN?-bF{=xZm`wr7NEAxdCg^P~6UCeGs$Z*{$FbJYp$wAqc+ zIWq55R^^j85z6@MD6M;P_t{71U~5PF_jq2CE6-ybg^!9iDf+JMz~Xayk&>8*l{<0r zn@gO8UsLUWd2d79dTEJUhFf-}QY?2-q)&T_I(0S7o?<(`#{d?gAZ=e?;$Mlh$y<|b zJ-fskpKN(2CkwLk{U!eR_*1NV+SS+b5%0uh7Og99$Kq`r?UJ_#C;8cfrXHpAF=FYm zg{9|HBfM|Ji;$hPCt9`7s}<@HdFMG6qJ6dq$3mL$D|P_QLKkU~_Fr}I#GVq@S&L!* z6uK7Fj`+N`Lp-sx^n&q9`Km5$k44`V*K(G`? z%tj{HWx6kITXbIA7B{kQz2Cu-_IP@AeI-Yytfp$7CtK1trG=$)t7%bjdrLLc-}dXF z4_cY{Tj_7lLXbgwI?Zoyr^>3oy$emBb(Y=F+ep!=dA|+t_v3obUy2J&ZL^)X7KM~#ab;}P`9|UYg@c_poP&REuG~7L zY5M7du|qHyGt2aOTF;l&?9c816=8pj-I4843h)UlL&u4D&Q_2QYLu~*?Qe~ubMksI G)BhjfigLOD literal 0 HcmV?d00001 diff --git a/Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/Form1.Designer.cs b/Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/Form1.Designer.cs new file mode 100644 index 0000000..3af743d --- /dev/null +++ b/Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/Form1.Designer.cs @@ -0,0 +1,121 @@ +namespace WinClient_CS +{ + partial class Form1 + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.Label1 = new System.Windows.Forms.Label(); + this.txtNick = new System.Windows.Forms.TextBox(); + this.btnSignIn = new System.Windows.Forms.Button(); + this.btnSend = new System.Windows.Forms.Button(); + this.txtMessage = new System.Windows.Forms.TextBox(); + this.txtMessageHistory = new System.Windows.Forms.TextBox(); + this.SuspendLayout(); + // + // Label1 + // + this.Label1.AutoSize = true; + this.Label1.Location = new System.Drawing.Point(12, 11); + this.Label1.Name = "Label1"; + this.Label1.Size = new System.Drawing.Size(29, 13); + this.Label1.TabIndex = 11; + this.Label1.Text = "Nick"; + // + // txtNick + // + this.txtNick.Location = new System.Drawing.Point(44, 8); + this.txtNick.Name = "txtNick"; + this.txtNick.Size = new System.Drawing.Size(144, 20); + this.txtNick.TabIndex = 10; + // + // btnSignIn + // + this.btnSignIn.Location = new System.Drawing.Point(194, 6); + this.btnSignIn.Name = "btnSignIn"; + this.btnSignIn.Size = new System.Drawing.Size(75, 23); + this.btnSignIn.TabIndex = 9; + this.btnSignIn.Text = "Sign In"; + this.btnSignIn.Click += new System.EventHandler(this.btnSignIn_Click); + // + // btnSend + // + this.btnSend.Enabled = false; + this.btnSend.Location = new System.Drawing.Point(194, 325); + this.btnSend.Name = "btnSend"; + this.btnSend.Size = new System.Drawing.Size(75, 23); + this.btnSend.TabIndex = 8; + this.btnSend.Text = "Send"; + this.btnSend.Click += new System.EventHandler(this.btnSend_Click); + // + // txtMessage + // + this.txtMessage.Location = new System.Drawing.Point(2, 327); + this.txtMessage.Name = "txtMessage"; + this.txtMessage.Size = new System.Drawing.Size(186, 20); + this.txtMessage.TabIndex = 7; + // + // txtMessageHistory + // + this.txtMessageHistory.BackColor = System.Drawing.SystemColors.ControlLightLight; + this.txtMessageHistory.Location = new System.Drawing.Point(2, 35); + this.txtMessageHistory.Multiline = true; + this.txtMessageHistory.Name = "txtMessageHistory"; + this.txtMessageHistory.ReadOnly = true; + this.txtMessageHistory.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.txtMessageHistory.Size = new System.Drawing.Size(268, 285); + this.txtMessageHistory.TabIndex = 6; + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(272, 355); + this.Controls.Add(this.Label1); + this.Controls.Add(this.txtNick); + this.Controls.Add(this.btnSignIn); + this.Controls.Add(this.btnSend); + this.Controls.Add(this.txtMessage); + this.Controls.Add(this.txtMessageHistory); + this.Name = "Form1"; + this.Text = "Form1"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form_Closing); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + internal System.Windows.Forms.Label Label1; + internal System.Windows.Forms.TextBox txtNick; + internal System.Windows.Forms.Button btnSignIn; + internal System.Windows.Forms.Button btnSend; + internal System.Windows.Forms.TextBox txtMessage; + internal System.Windows.Forms.TextBox txtMessageHistory; + } +} + diff --git a/Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/Form1.cs b/Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/Form1.cs new file mode 100644 index 0000000..7170d83 --- /dev/null +++ b/Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/Form1.cs @@ -0,0 +1,122 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + + +using System.Net.Sockets; + +namespace WinClient_CS +{ + public partial class Form1 : Form + { + const int portNo = 500; + TcpClient client; + byte[] data; + + public Form1() + { + InitializeComponent(); + } + + public void SendMessage(string message) + { + try + { + NetworkStream ns = client.GetStream(); + byte[] data = System.Text.Encoding.ASCII.GetBytes(message); + ns.Write(data, 0, data.Length); + ns.Flush(); + } + catch (Exception ex) + { + MessageBox.Show(ex.ToString()); + } + } + + + public void ReceiveMessage(IAsyncResult ar) + { + try + { + int bytesRead; + bytesRead = client.GetStream().EndRead(ar); + if (bytesRead < 1) + { + return; + } + else + { + object[] para = { System.Text.Encoding.ASCII.GetString(data, 0, bytesRead) }; + this.Invoke(new delUpdateHistory(UpdateHistory), para); + } + client.GetStream().BeginRead(data, 0, System.Convert.ToInt32(client.ReceiveBufferSize),ReceiveMessage, null); + } + catch (Exception ex) + { + } + } + + private void btnSignIn_Click(object sender, EventArgs e) + { + if (btnSignIn.Text == "Sign In") + { + try + { + client = new TcpClient(); + client.Connect("127.0.0.1", portNo); + + data = new byte[client.ReceiveBufferSize]; + + SendMessage(txtNick.Text); + client.GetStream().BeginRead(data, 0, System.Convert.ToInt32(client.ReceiveBufferSize), ReceiveMessage, null); + btnSignIn.Text = "Sign Out"; + btnSend.Enabled = true; + } + catch (Exception ex) + { + MessageBox.Show(ex.ToString()); + } + } + else + { + Disconnect(); + btnSignIn.Text = "Sign In"; + btnSend.Enabled = false; + } + } + public void Disconnect() + { + try + { + client.GetStream().Close(); + client.Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.ToString()); + } + } + + public delegate void delUpdateHistory(string str); + public void UpdateHistory(string str) + { + txtMessageHistory.AppendText(str); + } + + private void Form_Closing(object sender, FormClosingEventArgs e) + { + Disconnect(); + } + + private void btnSend_Click(object sender, EventArgs e) + { + SendMessage(txtMessage.Text); + txtMessage.Clear(); + } + + } +} \ No newline at end of file diff --git a/Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/Form1.resx b/Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/Form1.resx new file mode 100644 index 0000000..19dc0dd --- /dev/null +++ b/Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/Form1.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/Program.cs b/Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/Program.cs new file mode 100644 index 0000000..f2b9ee7 --- /dev/null +++ b/Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/Program.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace WinClient_CS +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form1()); + } + } +} \ No newline at end of file diff --git a/Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/Properties/AssemblyInfo.cs b/Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..3d6d21f --- /dev/null +++ b/Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("WinClient_CS")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("WinClient_CS")] +[assembly: AssemblyCopyright("Copyright © 2006")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("fa365092-9344-4be4-8f05-4a7c6f02b55f")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/Properties/Resources.Designer.cs b/Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/Properties/Resources.Designer.cs new file mode 100644 index 0000000..a54b167 --- /dev/null +++ b/Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace WinClient_CS.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("WinClient_CS.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/Properties/Resources.resx b/Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/Properties/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/Properties/Settings.Designer.cs b/Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/Properties/Settings.Designer.cs new file mode 100644 index 0000000..76414ec --- /dev/null +++ b/Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace WinClient_CS.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/Properties/Settings.settings b/Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/WinClient_CS.csproj b/Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/WinClient_CS.csproj new file mode 100644 index 0000000..b906046 --- /dev/null +++ b/Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/WinClient_CS.csproj @@ -0,0 +1,78 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {5AE42AD9-0C4F-4E26-A9EE-13CDB60E9B2D} + WinExe + Properties + WinClient_CS + WinClient_CS + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + Form + + + Form1.cs + + + + + Designer + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/bin/Debug/WinClient_CS.exe b/Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/bin/Debug/WinClient_CS.exe new file mode 100644 index 0000000000000000000000000000000000000000..17fb48e02fa22a908bc21c04b9e87d5ebfd82049 GIT binary patch literal 24576 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 Yj6jS)j6jS)j6jS)j6jUQ|49V?2iO(PD*ylh literal 0 HcmV?d00001 diff --git a/Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/bin/Debug/WinClient_CS.pdb b/Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/bin/Debug/WinClient_CS.pdb new file mode 100644 index 0000000000000000000000000000000000000000..2df146b9fe4bc7e3f0f5103b580cd7635e2610cb GIT binary patch literal 24064 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 literal 0 HcmV?d00001 diff --git a/Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/bin/Debug/WinClient_CS.vshost.exe b/Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/bin/Debug/WinClient_CS.vshost.exe new file mode 100644 index 0000000000000000000000000000000000000000..ce3f102c36be07551ba7c7fad64c8b24709bdb91 GIT binary patch literal 5632 zcmeHLX>3&26+Umg;MiccvX$*QEU{T$9osBr9ou8T!CO4GX{f1rGjlzDVoO|!Prgq~qltDz9r~?B;$Ix=|OT07mVmN>1Z}RE2drlP`Q)*5X zG<6uR8guNZqj#!d-Lh;?4GGnWTdHBHf%>4@X-9-MYENnj=gbf*dm1jLN#cftptQL=|aWNfvWlQP?*hWf2t+?Lo}%k$q{6hp9nL zgjRO$01v%$;r&I$YdXI8&)FG$2N&cn{PM~EIUlboSblZ6|HQ<{cD(w-H$Pi{GB!Q7 z|H6B@KUnhF)GHNJoBn(6mQTf)Ia@0-J4*9+&;GPbIdCa>RcoH#{Qln`m|0=hKQWNC z!#y@@!#j(1Un%|Q)aTD`kDfW+w4v>(rqa#M$bmyo{cgLmeRW{M$FpYm3da-W&f8x& z0nLKxvau(Eo?AGHIeD_NCo>0YuLwR+p^ze1#Ifrt(TcT2#Y;+-Fe_7rvIeo7wS(yA zX#bP}I_Nou6?Iv{Lq2$0&05=B9YEWMekRLTn0AN-P|#J@A{QJ}x~7y8++mAT5@Rw| z@Q22sG9U6Nxk<0GsfFs1h&|K+JVrkSo|br>`a#cB7|RvrMHFKBr(Uw zl5-@k@UiBtzD8d*9q>KoTQAp`O~3WAt@psmrLqha^n)4xjBMH^@f9F@n1~ujPf^Cu z1X8hoxc8RIqmNGBB-e08_V!a4+g72m#M~*saoB2`Xc84k`hJPumRK&aTH=EeACjm` zG$d}7*dy^#;3Rrn;NPL;}jK9&ZX=lbcdYSfRoToq2>!3ASPn#8u z^5_H5<0%vLR4N9}qQ$`Zh^$7XR0mux@nJd(I!OC~-=*IJ!;-UI&T=Kai#`PZNxBT& zOIH;?y#RZey+d~b$L>D*2U4BLHo7PZt&wf=(v$RGXdorBqSlVYO|go)+z#9IG|?@n z%JQ6^2HUVasx`un?b_|0)?&DE-3)s1h+%8%Ad2nU;Mif|y42~0ZO1f16zp+5(Mk28 zEh6lZ7WQn1YIVa(4rq;W%QHHKR%v&}3{yBk;dB{LLCFE;>z)xZOvCFb_i!dcaZe1+ z7VReV8n#8{t}8l2X3u)jvj&QWL{kF+Vd_0WBWeu|C7jb5g=@zhHd-g*o}-(Cj2hjF z#`S2LwxI3_6TXN_8!^$tUW;&C*dJ1wvR7@j+fFBZw=LZqR*HQcc5v8%N;}r$7|{;z zRXI0nx6BteC@kn? zx7}3wC`~t$^_JixeXZ}r;oYm_b%)++Tlw0>+HX%C`+@-Ake_bp%{*%iWKZ&%~jNE(TX9o*6g%-Rh7EHhP*OlHTd*KJ4?D*a4-;jvD#}$T zOIQn=@p>DHr7y*I8$Y743XSBB{D^C1B}AnPX@5AP4(=bd(sp9DBln=DmYb$353H*? z$g9&OB6vF%DKvX%LSbW(nz&Qd#HFe-r=+-e5z#jlnlL1prkZH9Lb+*IH9O7$Qj&K* zi1dqo@D0qF`iTGURq zl$y==AvIxC2iL{8P9EfJ^b+N0<`}+a;gbg`1N`W1H1*>kDp+;uS4JU@0csxjmC)CT zpTKMnR`9n2umfBdeGU9>R4z4m@TcTs(x)CoK$mlQycQmW;RnyOu?i1|k+nM%lbG(k zU)oNsIsglXDI;B4QqNAHkZxdK@%Jm&3M+mh+d;;>sRJgjdxC zjKDHcB4+hTNzOL=or(eXIE%yQ&!joDM74@5pgblnV%bN-JGR6=O_ohmcu4Tp%XjSM5Nh|8#A5K!MWx={dKuZ TBcLY!&!}P9UAq3eeA)j4ZC9R* literal 0 HcmV?d00001 diff --git a/Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/obj/Debug/WinClient_CS.Form1.resources b/Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/obj/Debug/WinClient_CS.Form1.resources new file mode 100644 index 0000000000000000000000000000000000000000..06c24d06c1cab750788146ce052b37770f3fa530 GIT binary patch literal 180 zcmX?i>is@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYis@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYXais=*d z&Dsa37kvlcLC+alDRC)13*Vldne)we&bL7r1i>Q(zd4p)5nP|C)EYFIOAZUAWik>t z!A|=MEGm=tx05bEo%W#6uCUP0p>S5{PW!wVYn7hBd}Jn&_s89xY&YA>dOf+@6+0s0 zYu=TzCm#XdLw*D^$R*^d0%R$53wS+L8gP9q5KdJ-0msiR2lwxbcqf$PK}U5!A&gv zo@{MkrZZu|wwQEaB%E7wt0dSOFI=jxP^IBwd?j=N7zC9{5Jk;e*SyC|{n^+#{|H+dK`y4Sv9PWMx-%nHra-PO?7^KvhcOwv q5_*xoY3^|Q%XdAx|M4vhS+du@!U?zc^H&jn;=NTq&aujS9L*>5nDQh5 literal 0 HcmV?d00001 diff --git a/Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/obj/Debug/WinClient_CS.exe b/Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/obj/Debug/WinClient_CS.exe new file mode 100644 index 0000000000000000000000000000000000000000..17fb48e02fa22a908bc21c04b9e87d5ebfd82049 GIT binary patch literal 24576 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 Yj6jS)j6jS)j6jS)j6jUQ|49V?2iO(PD*ylh literal 0 HcmV?d00001 diff --git a/Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/obj/Debug/WinClient_CS.pdb b/Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/obj/Debug/WinClient_CS.pdb new file mode 100644 index 0000000000000000000000000000000000000000..2df146b9fe4bc7e3f0f5103b580cd7635e2610cb GIT binary patch literal 24064 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 literal 0 HcmV?d00001 diff --git a/Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/obj/WinClient_CS.csproj.FileList.txt b/Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/obj/WinClient_CS.csproj.FileList.txt new file mode 100644 index 0000000..8f7db2b --- /dev/null +++ b/Chapter01(Socket)/Part 1/WinClient_CS/WinClient_CS/obj/WinClient_CS.csproj.FileList.txt @@ -0,0 +1,8 @@ +obj\Debug\ResolveAssemblyReference.cache +obj\Debug\WinClient_CS.Form1.resources +obj\Debug\WinClient_CS.Properties.Resources.resources +obj\Debug\WinClient_CS.csproj.GenerateResource.Cache +bin\Debug\WinClient_CS.exe +bin\Debug\WinClient_CS.pdb +obj\Debug\WinClient_CS.exe +obj\Debug\WinClient_CS.pdb diff --git a/Chapter01(Socket)/Part 1/server/server.sln b/Chapter01(Socket)/Part 1/server/server.sln new file mode 100644 index 0000000..c397be3 --- /dev/null +++ b/Chapter01(Socket)/Part 1/server/server.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "server", "server\server.vbproj", "{02784E52-3E62-4C83-A989-2C63C2368170}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {02784E52-3E62-4C83-A989-2C63C2368170}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {02784E52-3E62-4C83-A989-2C63C2368170}.Debug|Any CPU.Build.0 = Debug|Any CPU + {02784E52-3E62-4C83-A989-2C63C2368170}.Release|Any CPU.ActiveCfg = Release|Any CPU + {02784E52-3E62-4C83-A989-2C63C2368170}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Chapter01(Socket)/Part 1/server/server.suo b/Chapter01(Socket)/Part 1/server/server.suo new file mode 100644 index 0000000000000000000000000000000000000000..aec5eb38c7a0d710f4c5e3294afd976472df95e5 GIT binary patch literal 22016 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 literal 0 HcmV?d00001 diff --git a/Chapter01(Socket)/Part 1/server/server/ChatClient.vb b/Chapter01(Socket)/Part 1/server/server/ChatClient.vb new file mode 100644 index 0000000..9055ed3 --- /dev/null +++ b/Chapter01(Socket)/Part 1/server/server/ChatClient.vb @@ -0,0 +1,101 @@ +Imports System.Net.Sockets + +Public Class ChatClient + '---contains a list of all the clients + Public Shared AllClients As New Hashtable + + '---information about the client + Private _client As TcpClient + Private _clientIP As String + Private _ClientNick As String + + '---used for sending/receiving data + Private data() As Byte + + '---is the nick name being sent? + Private ReceiveNick As Boolean = True + + Public Sub New(ByVal client As TcpClient) + _client = client + + '---get the client IP address + _clientIP = client.Client.RemoteEndPoint.ToString + + '---add the current client to the hash table + AllClients.Add(_clientIP, Me) + + '---start reading data from the client in a separate thread + ReDim data(_client.ReceiveBufferSize) + + _client.GetStream.BeginRead(data, 0, _ + CInt(_client.ReceiveBufferSize), _ + AddressOf ReceiveMessage, Nothing) + End Sub + + Public Sub SendMessage(ByVal message As String) + Try + '---send the text + Dim ns As System.Net.Sockets.NetworkStream + SyncLock _client.GetStream + ns = _client.GetStream + End SyncLock + Dim bytesToSend As Byte() = _ + System.Text.Encoding.ASCII.GetBytes(message) + ns.Write(bytesToSend, 0, bytesToSend.Length) + ns.Flush() + Catch ex As Exception + Console.WriteLine(ex.ToString) + End Try + End Sub + + Public Sub ReceiveMessage(ByVal ar As IAsyncResult) + '---read from client--- + Dim bytesRead As Integer + Try + SyncLock _client.GetStream + bytesRead = _client.GetStream.EndRead(ar) + End SyncLock + '---client has disconnected + If bytesRead < 1 Then + AllClients.Remove(_clientIP) + Broadcast(_ClientNick & " has left the chat.") + Exit Sub + Else + '---get the message sent + Dim messageReceived As String = _ + System.Text.Encoding.ASCII. _ + GetString(data, 0, bytesRead) + '---client is sending its nickname + If ReceiveNick Then + _ClientNick = messageReceived + + '---tell everyone client has entered the chat + Broadcast(_ClientNick & " has joined the chat.") + ReceiveNick = False + Else + '---broadcast the message to everyone + Broadcast(_ClientNick & ">" & messageReceived) + End If + End If + '---continue reading from client + SyncLock _client.GetStream + _client.GetStream.BeginRead(data, 0, _ + CInt(_client.ReceiveBufferSize), _ + AddressOf ReceiveMessage, Nothing) + End SyncLock + Catch ex As Exception + AllClients.Remove(_clientIP) + Broadcast(_ClientNick & " has left the chat.") + End Try + End Sub + + Public Sub Broadcast(ByVal message As String) + '---log it locally + Console.WriteLine(message) + Dim c As DictionaryEntry + For Each c In AllClients + '---broadcast message to all users + CType(c.Value, ChatClient).SendMessage(message & vbLf) + Next + End Sub +End Class diff --git a/Chapter01(Socket)/Part 1/server/server/Module1.vb b/Chapter01(Socket)/Part 1/server/server/Module1.vb new file mode 100644 index 0000000..f329318 --- /dev/null +++ b/Chapter01(Socket)/Part 1/server/server/Module1.vb @@ -0,0 +1,15 @@ +Imports System.Net.Sockets + +Module Module1 + Const portNo As Integer = 500 + + Sub Main() + Dim localAdd As System.Net.IPAddress = _ + System.Net.IPAddress.Parse("127.0.0.1") + Dim listener As New TcpListener(localAdd, portNo) + listener.Start() + While True + Dim user As New ChatClient(listener.AcceptTcpClient) + End While + End Sub +End Module diff --git a/Chapter01(Socket)/Part 1/server/server/My Project/AssemblyInfo.vb b/Chapter01(Socket)/Part 1/server/server/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..30e1c1e --- /dev/null +++ b/Chapter01(Socket)/Part 1/server/server/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Chapter01(Socket)/Part 1/server/server/My Project/MyApplication.myapp b/Chapter01(Socket)/Part 1/server/server/My Project/MyApplication.myapp new file mode 100644 index 0000000..76de46d --- /dev/null +++ b/Chapter01(Socket)/Part 1/server/server/My Project/MyApplication.myapp @@ -0,0 +1,9 @@ + + + false + false + 0 + true + 0 + 3 + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 1/server/server/My Project/MyApplication.vb b/Chapter01(Socket)/Part 1/server/server/My Project/MyApplication.vb new file mode 100644 index 0000000..0154603 --- /dev/null +++ b/Chapter01(Socket)/Part 1/server/server/My Project/MyApplication.vb @@ -0,0 +1,12 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Chapter01(Socket)/Part 1/server/server/My Project/MyResources.resx b/Chapter01(Socket)/Part 1/server/server/My Project/MyResources.resx new file mode 100644 index 0000000..3e18af9 --- /dev/null +++ b/Chapter01(Socket)/Part 1/server/server/My Project/MyResources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 1/server/server/My Project/MyResources.vb b/Chapter01(Socket)/Part 1/server/server/My Project/MyResources.vb new file mode 100644 index 0000000..a8884f3 --- /dev/null +++ b/Chapter01(Socket)/Part 1/server/server/My Project/MyResources.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict Off +Option Explicit On + +Imports System +Imports System.IO +Imports System.Resources + +Namespace My.Resources + + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + 'This class was auto-generated by the Strongly Typed Resource Builder + 'class via a tool like ResGen or Visual Studio.NET. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + _ + Module MyResources + + Private _resMgr As System.Resources.ResourceManager + + Private _resCulture As System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Public ReadOnly Property ResourceManager() As System.Resources.ResourceManager + Get + If (_resMgr Is Nothing) Then + Dim temp As System.Resources.ResourceManager = New System.Resources.ResourceManager("$safeprojectname$.MyResources", GetType(MyResources).Assembly) + System.Threading.Thread.MemoryBarrier + _resMgr = temp + End If + Return _resMgr + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Public Property Culture() As System.Globalization.CultureInfo + Get + Return _resCulture + End Get + Set + _resCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Chapter01(Socket)/Part 1/server/server/My Project/MySettings.settings b/Chapter01(Socket)/Part 1/server/server/My Project/MySettings.settings new file mode 100644 index 0000000..0bcb11d --- /dev/null +++ b/Chapter01(Socket)/Part 1/server/server/My Project/MySettings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 1/server/server/My Project/MySettings.vb b/Chapter01(Socket)/Part 1/server/server/My Project/MySettings.vb new file mode 100644 index 0000000..3d12c6f --- /dev/null +++ b/Chapter01(Socket)/Part 1/server/server/My Project/MySettings.vb @@ -0,0 +1,38 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict Off +Option Explicit On + + + +Partial Friend NotInheritable Class MySettings + Inherits System.Configuration.ApplicationSettingsBase + + Private Shared m_Value As MySettings + + Private Shared m_SyncObject As Object = New Object + + _ + Public Shared ReadOnly Property Value() As MySettings + Get + If (MySettings.m_Value Is Nothing) Then + System.Threading.Monitor.Enter(MySettings.m_SyncObject) + If (MySettings.m_Value Is Nothing) Then + Try + MySettings.m_Value = New MySettings + Finally + System.Threading.Monitor.Exit(MySettings.m_SyncObject) + End Try + End If + End If + Return MySettings.m_Value + End Get + End Property +End Class diff --git a/Chapter01(Socket)/Part 1/server/server/app.config b/Chapter01(Socket)/Part 1/server/server/app.config new file mode 100644 index 0000000..f636923 --- /dev/null +++ b/Chapter01(Socket)/Part 1/server/server/app.config @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 1/server/server/bin/server.exe b/Chapter01(Socket)/Part 1/server/server/bin/server.exe new file mode 100644 index 0000000000000000000000000000000000000000..abd4dd498e70d9568df58dc0bf0a3434054eaa1a GIT binary patch literal 28672 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 + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 1/server/server/bin/server.pdb b/Chapter01(Socket)/Part 1/server/server/bin/server.pdb new file mode 100644 index 0000000000000000000000000000000000000000..fc3d4e5320ed1169ccc06ba6bf4e9e3725dfcb14 GIT binary patch literal 44544 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 b*8|RF=s1_mUEXdFxIN(ZfZGEXY!CcD`}Ikp literal 0 HcmV?d00001 diff --git a/Chapter01(Socket)/Part 1/server/server/bin/server.vshost.exe b/Chapter01(Socket)/Part 1/server/server/bin/server.vshost.exe new file mode 100644 index 0000000000000000000000000000000000000000..ce3f102c36be07551ba7c7fad64c8b24709bdb91 GIT binary patch literal 5632 zcmeHLX>3&26+Umg;MiccvX$*QEU{T$9osBr9ou8T!CO4GX{f1rGjlzDVoO|!Prgq~qltDz9r~?B;$Ix=|OT07mVmN>1Z}RE2drlP`Q)*5X zG<6uR8guNZqj#!d-Lh;?4GGnWTdHBHf%>4@X-9-MYENnj=gbf*dm1jLN#cftptQL=|aWNfvWlQP?*hWf2t+?Lo}%k$q{6hp9nL zgjRO$01v%$;r&I$YdXI8&)FG$2N&cn{PM~EIUlboSblZ6|HQ<{cD(w-H$Pi{GB!Q7 z|H6B@KUnhF)GHNJoBn(6mQTf)Ia@0-J4*9+&;GPbIdCa>RcoH#{Qln`m|0=hKQWNC z!#y@@!#j(1Un%|Q)aTD`kDfW+w4v>(rqa#M$bmyo{cgLmeRW{M$FpYm3da-W&f8x& z0nLKxvau(Eo?AGHIeD_NCo>0YuLwR+p^ze1#Ifrt(TcT2#Y;+-Fe_7rvIeo7wS(yA zX#bP}I_Nou6?Iv{Lq2$0&05=B9YEWMekRLTn0AN-P|#J@A{QJ}x~7y8++mAT5@Rw| z@Q22sG9U6Nxk<0GsfFs1h&|K+JVrkSo|br>`a#cB7|RvrMHFKBr(Uw zl5-@k@UiBtzD8d*9q>KoTQAp`O~3WAt@psmrLqha^n)4xjBMH^@f9F@n1~ujPf^Cu z1X8hoxc8RIqmNGBB-e08_V!a4+g72m#M~*saoB2`Xc84k`hJPumRK&aTH=EeACjm` zG$d}7*dy^#;3Rrn;NPL;}jK9&ZX=lbcdYSfRoToq2>!3ASPn#8u z^5_H5<0%vLR4N9}qQ$`Zh^$7XR0mux@nJd(I!OC~-=*IJ!;-UI&T=Kai#`PZNxBT& zOIH;?y#RZey+d~b$L>D*2U4BLHo7PZt&wf=(v$RGXdorBqSlVYO|go)+z#9IG|?@n z%JQ6^2HUVasx`un?b_|0)?&DE-3)s1h+%8%Ad2nU;Mif|y42~0ZO1f16zp+5(Mk28 zEh6lZ7WQn1YIVa(4rq;W%QHHKR%v&}3{yBk;dB{LLCFE;>z)xZOvCFb_i!dcaZe1+ z7VReV8n#8{t}8l2X3u)jvj&QWL{kF+Vd_0WBWeu|C7jb5g=@zhHd-g*o}-(Cj2hjF z#`S2LwxI3_6TXN_8!^$tUW;&C*dJ1wvR7@j+fFBZw=LZqR*HQcc5v8%N;}r$7|{;z zRXI0nx6BteC@kn? zx7}3wC`~t$^_JixeXZ}r;oYm_b%)++Tlw0>+HX%C`+@-Ake_bp%{*%iWKZ&%~jNE(TX9o*6g%-Rh7EHhP*OlHTd*KJ4?D*a4-;jvD#}$T zOIQn=@p>DHr7y*I8$Y743XSBB{D^C1B}AnPX@5AP4(=bd(sp9DBln=DmYb$353H*? z$g9&OB6vF%DKvX%LSbW(nz&Qd#HFe-r=+-e5z#jlnlL1prkZH9Lb+*IH9O7$Qj&K* zi1dqo@D0qF`iTGURq zl$y==AvIxC2iL{8P9EfJ^b+N0<`}+a;gbg`1N`W1H1*>kDp+;uS4JU@0csxjmC)CT zpTKMnR`9n2umfBdeGU9>R4z4m@TcTs(x)CoK$mlQycQmW;RnyOu?i1|k+nM%lbG(k zU)oNsIsglXDI;B4QqNAHkZxdK@%Jm&3M+mh+d;;>sRJgjdxC zjKDHcB4+hTNzOL=or(eXIE%yQ&!joDM74@5pgblnV%bN-JGR6=O_ohmcu4Tp%XjSM5Nh|8#A5K!MWx={dKuZ TBcLY!&!}P9UAq3eeA)j4ZC9R* literal 0 HcmV?d00001 diff --git a/Chapter01(Socket)/Part 1/server/server/bin/server.vshost.exe.config b/Chapter01(Socket)/Part 1/server/server/bin/server.vshost.exe.config new file mode 100644 index 0000000..f636923 --- /dev/null +++ b/Chapter01(Socket)/Part 1/server/server/bin/server.vshost.exe.config @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 1/server/server/bin/server.xml b/Chapter01(Socket)/Part 1/server/server/bin/server.xml new file mode 100644 index 0000000..83af37a --- /dev/null +++ b/Chapter01(Socket)/Part 1/server/server/bin/server.xml @@ -0,0 +1,11 @@ + + + + +server + + + + + + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 1/server/server/obj/Debug/server.MyResources.resources b/Chapter01(Socket)/Part 1/server/server/obj/Debug/server.MyResources.resources new file mode 100644 index 0000000000000000000000000000000000000000..06c24d06c1cab750788146ce052b37770f3fa530 GIT binary patch literal 180 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 b*8|RF=s1_mUEXdFxIN(ZfZGEXY!CcD`}Ikp literal 0 HcmV?d00001 diff --git a/Chapter01(Socket)/Part 1/server/server/obj/Debug/server.vbproj.GenerateResource.Cache b/Chapter01(Socket)/Part 1/server/server/obj/Debug/server.vbproj.GenerateResource.Cache new file mode 100644 index 0000000000000000000000000000000000000000..625f780f1ca0ebe1789e73c075a77d33f7834991 GIT binary patch literal 786 zcma)3O-sW-5KV1U`=L+|;z18VJP4N1Dx#Mn*iscO)DOgimu+@}Yqwe1NyPXI1b>rP zFa8z(gU%EcX@fX{mt=PK&6{~n&T*U%3Vw6U%@ADmRA3F7F!uKorKNu%aENv95-chc zwKn|*KXtF2=s2;^iXe%t&~>k$473W4A-ym|h+2cjR=6GRgw3YhZip@6a+~!`cK;0U z0HO}uK_npx6d+3}TfnQX(tt|?fpDUtAxQr3C<{SsY+A^zW)n_Qjp_2lS#cTvaf{W? z$zO`{E9WW3F!I|*Yidu+K>twSO)Lf)#tjN|r@-)M=`0mgPK=OU!9&b`ZMM`lqdQ^2 z)|j+yB=oJhR}yTA6X)s?3bb4-UJ9K6I!-?CxNfzS)$8b+Yb`_b(G>st>FyrSTd7nD z%PvEapvGT(P-M-^z0@N~w>0~8FD1)NVgo>*TzaT+IaiiT1TI4}+nH&rHz+l>nKxI} zKQ80akBce0z7Y~cVg$<*c`Y#R8L2`Aa&h7e9u&q{Bx&=xu}5VV$>TWQ^V`e&>r-xl HQykS#5{2ov literal 0 HcmV?d00001 diff --git a/Chapter01(Socket)/Part 1/server/server/obj/Debug/server.xml b/Chapter01(Socket)/Part 1/server/server/obj/Debug/server.xml new file mode 100644 index 0000000..83af37a --- /dev/null +++ b/Chapter01(Socket)/Part 1/server/server/obj/Debug/server.xml @@ -0,0 +1,11 @@ + + + + +server + + + + + + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 1/server/server/obj/server.vbproj.FileList.txt b/Chapter01(Socket)/Part 1/server/server/obj/server.vbproj.FileList.txt new file mode 100644 index 0000000..c15a50b --- /dev/null +++ b/Chapter01(Socket)/Part 1/server/server/obj/server.vbproj.FileList.txt @@ -0,0 +1,10 @@ +bin\server.exe.config +bin\server.exe +bin\server.pdb +bin\server.xml +obj\Debug\ResolveAssemblyReference.cache +obj\Debug\server.MyResources.resources +obj\Debug\server.vbproj.GenerateResource.Cache +obj\Debug\server.exe +obj\Debug\server.xml +obj\Debug\server.pdb diff --git a/Chapter01(Socket)/Part 1/server/server/server.vbproj b/Chapter01(Socket)/Part 1/server/server/server.vbproj new file mode 100644 index 0000000..3fb4616 --- /dev/null +++ b/Chapter01(Socket)/Part 1/server/server/server.vbproj @@ -0,0 +1,83 @@ + + + Debug + AnyCPU + 8.0.41115 + 2.0 + {02784E52-3E62-4C83-A989-2C63C2368170} + Exe + server.Module1 + server + server + Windows + + + true + full + true + true + bin\ + server.xml + 42016,42017,42018,42019,42032 + + + pdbonly + false + true + true + bin\ + server.xml + 42016,42017,42018,42019,42032 + + + + + + + + + + + + + + + + + + + + True + MyApplication.myapp + + + True + True + MyResources.resx + + + True + MySettings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + MyResources.vb + My.Resources + + + + + + MyApplicationCodeGenerator + MyApplication.vb + + + SettingsSingleFileGenerator + MySettings.vb + + + + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 1/server/server/server.vbproj.user b/Chapter01(Socket)/Part 1/server/server/server.vbproj.user new file mode 100644 index 0000000..e1d33e3 --- /dev/null +++ b/Chapter01(Socket)/Part 1/server/server/server.vbproj.user @@ -0,0 +1,7 @@ + + + 8.0.41115 + ProjectFiles + 0 + + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 1/server_CS/server_CS.sln b/Chapter01(Socket)/Part 1/server_CS/server_CS.sln new file mode 100644 index 0000000..ecd2d10 --- /dev/null +++ b/Chapter01(Socket)/Part 1/server_CS/server_CS.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "server_CS", "server_CS\server_CS.csproj", "{2D92EC13-47B0-44B3-9357-7C59D7AD57BB}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {2D92EC13-47B0-44B3-9357-7C59D7AD57BB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2D92EC13-47B0-44B3-9357-7C59D7AD57BB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2D92EC13-47B0-44B3-9357-7C59D7AD57BB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2D92EC13-47B0-44B3-9357-7C59D7AD57BB}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Chapter01(Socket)/Part 1/server_CS/server_CS.suo b/Chapter01(Socket)/Part 1/server_CS/server_CS.suo new file mode 100644 index 0000000000000000000000000000000000000000..a96f5f1617016d3b74a207089a577f1ebee2d1d3 GIT binary patch literal 15360 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 BS-SuL literal 0 HcmV?d00001 diff --git a/Chapter01(Socket)/Part 1/server_CS/server_CS/ChatClient.cs b/Chapter01(Socket)/Part 1/server_CS/server_CS/ChatClient.cs new file mode 100644 index 0000000..2eb07dc --- /dev/null +++ b/Chapter01(Socket)/Part 1/server_CS/server_CS/ChatClient.cs @@ -0,0 +1,98 @@ +using System; +using System.Collections.Generic; +using System.Text; + +using System.Net.Sockets; +using System.Collections; + +namespace server_CS +{ + class ChatClient + { + public static Hashtable AllClients = + new Hashtable(); + private TcpClient _client; + private string _clientIP; + private string _ClientNick; + private byte[] data; + private bool ReceiveNick = true; + + public ChatClient(TcpClient client) + { + _client = client; + _clientIP = client.Client.RemoteEndPoint.ToString(); + AllClients.Add(_clientIP, this); + + data = new byte[_client.ReceiveBufferSize]; + _client.GetStream().BeginRead(data, 0, System.Convert.ToInt32(_client.ReceiveBufferSize), ReceiveMessage, null); + } + + public void SendMessage(string message) + { + try + { + System.Net.Sockets.NetworkStream ns; + lock (_client.GetStream()) + { + ns = _client.GetStream(); + } + byte[] bytesToSend = System.Text.Encoding.ASCII.GetBytes(message); + ns.Write(bytesToSend, 0, bytesToSend.Length); + ns.Flush(); + } + catch (Exception ex) + { + Console.WriteLine(ex.ToString()); + } + } + + public void ReceiveMessage(IAsyncResult ar) + { + int bytesRead; + try + { + lock (_client.GetStream()) + { + bytesRead = _client.GetStream().EndRead(ar); + } + if (bytesRead < 1) + { + AllClients.Remove(_clientIP); + Broadcast(_ClientNick + " has left the chat."); + return; + } + else + { + string messageReceived = System.Text.Encoding.ASCII.GetString(data, 0, bytesRead); + if (ReceiveNick) + { + _ClientNick = messageReceived; + Broadcast(_ClientNick + " has joined the chat."); + ReceiveNick = false; + } + else + { + Broadcast(_ClientNick + ">" + messageReceived); + } + } + lock (_client.GetStream()) + { + _client.GetStream().BeginRead(data, 0, System.Convert.ToInt32(_client.ReceiveBufferSize),ReceiveMessage, null); + } + } + catch (Exception ex) + { + AllClients.Remove(_clientIP); + Broadcast(_ClientNick + " has left the chat."); + } + } + public void Broadcast(string message) + { + Console.WriteLine(message); + foreach (DictionaryEntry c in AllClients) + { + ((ChatClient)(c.Value)).SendMessage(message + Environment.NewLine); + } + } + } +} diff --git a/Chapter01(Socket)/Part 1/server_CS/server_CS/Program.cs b/Chapter01(Socket)/Part 1/server_CS/server_CS/Program.cs new file mode 100644 index 0000000..75ff94f --- /dev/null +++ b/Chapter01(Socket)/Part 1/server_CS/server_CS/Program.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Text; + +using System.Net.Sockets; + +namespace server_CS +{ + class Program + { + const int portNo = 500; + static void Main(string[] args) + { + System.Net.IPAddress localAdd = System.Net.IPAddress.Parse("127.0.0.1"); + TcpListener listener = new TcpListener(localAdd, portNo); + listener.Start(); + while (true) + { + ChatClient user = new ChatClient(listener.AcceptTcpClient()); + } + } + } +} diff --git a/Chapter01(Socket)/Part 1/server_CS/server_CS/Properties/AssemblyInfo.cs b/Chapter01(Socket)/Part 1/server_CS/server_CS/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..c02c11d --- /dev/null +++ b/Chapter01(Socket)/Part 1/server_CS/server_CS/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("server_CS")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("server_CS")] +[assembly: AssemblyCopyright("Copyright © 2006")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("b1825a4b-8cb0-4ac9-b622-08605a30e817")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Chapter01(Socket)/Part 1/server_CS/server_CS/bin/Debug/server_CS.exe b/Chapter01(Socket)/Part 1/server_CS/server_CS/bin/Debug/server_CS.exe new file mode 100644 index 0000000000000000000000000000000000000000..64d9767c36cd963856137fbc8bc582430f4e9300 GIT binary patch literal 20480 zcmeHOdu$xV8UOa-yYtyT#h2hD#D+~wz=`qIc5HAO8f>4PV~Dvn`oW|GbL7$=M(DBH=e9m6 zjXbw?YR+)9f^B7OJ+Gy8)3jVI#WcHUYKEx|jVHCdm0_`lhVW(OswaktMkIxLM~{N@ z(km2^>ZA~n2AOB1Z*+oa$oFF*a^<;f7Cr|$iISY_ zCkk;O&QCWG)kF7{PY^YqZ~GuwLw!~D5aa_@a?E85F60MzY_L`O18zBKL^s52$4)~d zV(SOP{Sk9@>PPf3o8>Gx@>uBxWbW6GT$TEX2CGD$^%3w9@DcD4@DcD4@DcD4@DcD4 z@DcD4_&-9RRQ{Ia-=;FvkctoU+v|uV$N}-+M*~CY4APg&MdXc3s6v(7@GTlf^~#dW zMa61_Y(+U)53+>MZuMp~sLH1}D_a}5zbv2P?$$*RPH#j+OEtnpD4U>^PjN+4m0KI! z!t%KQY6&=-z;CcNgI-QMX-lU{X~czQ(0aKHuVs5f+r@aS(uL`4sJ3kjSHDPY`0NiW zRtsodAlMYV)37e#mVk9Bf6&>+dJ2h-v}vA#(4K@+GF?RLwpWe;BpRQfMwF4Z0He<# z5cK53V^OTFsC89DfsNQ8o1N72A`LKxI zl#vTq80>JJe2R}!rNSK~2bXyHN;NxHS0guxL8bPKmm4|+k6_#O<(5`qxfZ@3VdSa? zg3fl-|JS{xv*_$jqJa^CGe&|4!%gkTm2(;3Pp={GM&1UrDtd@w{&zqZL+*g=jhjNV z;4!@#Nhy!EfZw{D1KHjlw5|a29e^%{DN1c^kX$q)D{X)=EJnkE48VgHq6^oDI-Whd zF<1n6QbX;Aa}pH6S_@I~sRs`UYe%LHw0o2=xe=SL^HW1X?y z&a1nx<}KDx4)j;(bnDGTeP~R>x@%3kwqa%+?s2phP2<^mC`rEnkC3T#|DnVXp1*_q zDB5ft%vmYOJOKddNQ+D`5xpzz;sXO00(Kl*3YIgP5l3Cz)_{zrg&)czh075KXqff_ z(HRlNO55qyAd6ZAgi9$0^_JP!J*@(0j}%B`B9 z*9bbLjzF^@=v{(7EcDNUhUxEWLJU;8bv2QJk`mob z5zu=v6(#z%px?(zkmxbmOxKm(!OWh}c&%UDbOxuJ68+Va=x4MIqvUQCHhLK&qtKO@ z)$pX(VN>Z*A>F;{W%VsY@RTRf`_v2RJLKl zRgPh)>{YIZeo#q+&MR5^B`qmA`VIVVq~Fs6%1QbY{aU#d^m)+N=nds|(0?hXVU^W; zKtt*tdXt*euY>PUA3>eH>JLbg;_Bn@Jg7b;_@6+3Tz#Gzr7x&|q|MU(pj)NK)t8}p zM*TDGkX}GNjUvu2>238L+AW;{hP$O;%^uK(njlWWo3RFBR7abn7;T~Lpsh3xx=YYK zbO?N$@}Qp25q{FwZH^$sp(n`-W*P*F&q1@U`+H1A^Oia*> zXBjin^OVtDohDhD87G)f#L}*1Q<9mPQRX;$mQiBBSv1p=%qiyFifhF-Xj^(FtvfCi zEZZHkXjC`MN<5Qnwj4JNI1bCFa*O+n96QWx2YnfEv00{yE_zZnUSROhh)otv*T}P2 z!gQH!6_UW!NHd4_7mdtHEpaP<*l-L$v!bii97pIydkw>st!G$Xx98U=V-*%{BRl6_ zXu_~%is>~Bh@qgHix-xNTjs2hE!sLC#S6_t%t_luVQu4-;a2yl49bw9XHCm-jkH5U zELF^A`K(x}+SB3J2-6W*od+ck6hmPzW9cbGc#|xrF9^m1Z$BY1qt6SO%s)H&3#><+5efl;!<$(m*Ctwu>1#Se%_jkj71n1{X0? zP|r!ro`*Bj^R%D2We)ISskt;|VUFzT#*D&@jqABwO2-^8_dPLAW%ogrHOxt-XDDBu z<7JnrIaHhhXf$e>244une9qDEg0Z|Br}!P!u$i`mAMeaSGM-5AXn2ec9kC6Bx-VCB z<_Li~78a|}jTk0FRcR&$nsi=!MufrPIKg;$yloUp>u$MwT#*a3K|h?qZ|mS z{IwCU6H-e=(MaM(;n$epY)I88dWe%_u%eVKH8+D3dR-+c6cV~kby`idv85&yiW<#O zOCS_2qLr4KNKjMo2!*&l5)P_Sy`?6)6xCr3MH_iD%{3%PBHS^;9Rs95iqr;cLJ{tW zfGAqJ4ed7LZGy)s*9XhA97?7OP7SKrmi`nvEcTmy87HcAwY zSN2QonTIs3yR-8ugd$Px^3Nc?CD4ZO2jhKLT*6<|rsSq0wq6*s%;m*_g=n4RujL|D z?!je9-$Z^8ukR1y<6|;8luY!6pIraanEqFy2D`Zl5{|A(nbSLMvinRJ!s`B$JGjYovUSQ(aRJ z4HG`yFVJ(p1IS1FanHvOEz0Rpxd+@~{M-5&&|#Vcm!NSPgPZ`}2cD;=)i=(0w-A*R z5bt@du&&(sl|}Iw0+mp!PB!W>#MxQ`XJ)fFJLBmxaZ@-2s}8LLJ3nVLU^Rsuk*ezu ztAv>4%w1EEMbU#tA}PzpS*J;dEwrR5=<)j2rLhwQ$4ROeuKw*=L%mFeaQhoo$`=z%PX|iZN#8i5Viy2#%~0C zR+NeZfdVaxNV7P7NMPzY540F{l>`_4H1uFyj+f>#bc=SpGzMeOOL>80(Dq8 z*(?Gtx2hLw^@FHKV70o;`G}p5SDz>|09-gSd5l;NJ=QQ=_*kqUeSSG~(@#DEJ_0@h zJ_0@hJ_0@hJ_0@hJ_0@hA8!Qkky(!(-p@Za{p2IyBj6+8Bj6+8Bj6+8Bj6+8Bj6+8 NBj6+8Bk-|A;6L2{2%i7| literal 0 HcmV?d00001 diff --git a/Chapter01(Socket)/Part 1/server_CS/server_CS/bin/Debug/server_CS.pdb b/Chapter01(Socket)/Part 1/server_CS/server_CS/bin/Debug/server_CS.pdb new file mode 100644 index 0000000000000000000000000000000000000000..d54f376468bd0caac4a796d0645614240797383f GIT binary patch literal 17920 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 TBcLY!&!}P9UAq3eeA)j4ZC9R* literal 0 HcmV?d00001 diff --git a/Chapter01(Socket)/Part 1/server_CS/server_CS/obj/Debug/server_CS.exe b/Chapter01(Socket)/Part 1/server_CS/server_CS/obj/Debug/server_CS.exe new file mode 100644 index 0000000000000000000000000000000000000000..64d9767c36cd963856137fbc8bc582430f4e9300 GIT binary patch literal 20480 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 NBj6+8Bk-|A;6L2{2%i7| literal 0 HcmV?d00001 diff --git a/Chapter01(Socket)/Part 1/server_CS/server_CS/obj/Debug/server_CS.pdb b/Chapter01(Socket)/Part 1/server_CS/server_CS/obj/Debug/server_CS.pdb new file mode 100644 index 0000000000000000000000000000000000000000..d54f376468bd0caac4a796d0645614240797383f GIT binary patch literal 17920 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 + + Debug + AnyCPU + 8.0.50727 + 2.0 + {2D92EC13-47B0-44B3-9357-7C59D7AD57BB} + Exe + Properties + server_CS + server_CS + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 2/WinClient/WinClient.sln b/Chapter01(Socket)/Part 2/WinClient/WinClient.sln new file mode 100644 index 0000000..05b6717 --- /dev/null +++ b/Chapter01(Socket)/Part 2/WinClient/WinClient.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "WinClient", "WinClient\WinClient.vbproj", "{18BAFD43-9363-4F34-80A2-F5CB6DE70617}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {18BAFD43-9363-4F34-80A2-F5CB6DE70617}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {18BAFD43-9363-4F34-80A2-F5CB6DE70617}.Debug|Any CPU.Build.0 = Debug|Any CPU + {18BAFD43-9363-4F34-80A2-F5CB6DE70617}.Release|Any CPU.ActiveCfg = Release|Any CPU + {18BAFD43-9363-4F34-80A2-F5CB6DE70617}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Chapter01(Socket)/Part 2/WinClient/WinClient.suo b/Chapter01(Socket)/Part 2/WinClient/WinClient.suo new file mode 100644 index 0000000000000000000000000000000000000000..8ebcd2e584ba3ebcc0eb17724919cd181930e747 GIT binary patch literal 22016 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 literal 0 HcmV?d00001 diff --git a/Chapter01(Socket)/Part 2/WinClient/WinClient/Form1.Designer.vb b/Chapter01(Socket)/Part 2/WinClient/WinClient/Form1.Designer.vb new file mode 100644 index 0000000..c82f696 --- /dev/null +++ b/Chapter01(Socket)/Part 2/WinClient/WinClient/Form1.Designer.vb @@ -0,0 +1,179 @@ +Partial Public Class Form1 + Inherits System.Windows.Forms.Form + + _ + Public Sub New() + MyBase.New() + + 'This call is required by the Windows Form Designer. + InitializeComponent() + + End Sub + + 'Form overrides dispose to clean up the component list. + _ + Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.txtMessageHistory = New System.Windows.Forms.TextBox + Me.txtMessage = New System.Windows.Forms.TextBox + Me.btnSend = New System.Windows.Forms.Button + Me.btnSignIn = New System.Windows.Forms.Button + Me.txtNick = New System.Windows.Forms.TextBox + Me.Label1 = New System.Windows.Forms.Label + Me.lstUsers = New System.Windows.Forms.ListBox + Me.btnFTP = New System.Windows.Forms.Button + Me.Label2 = New System.Windows.Forms.Label + Me.StatusStrip1 = New System.Windows.Forms.StatusStrip + Me.ToolStripStatusLabel1 = New System.Windows.Forms.ToolStripStatusLabel + Me.StatusStrip1.SuspendLayout() + Me.SuspendLayout() + ' + 'txtMessageHistory + ' + Me.txtMessageHistory.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ + Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.txtMessageHistory.BackColor = System.Drawing.SystemColors.ControlLightLight + Me.txtMessageHistory.Location = New System.Drawing.Point(128, 43) + Me.txtMessageHistory.Multiline = True + Me.txtMessageHistory.Name = "txtMessageHistory" + Me.txtMessageHistory.ReadOnly = True + Me.txtMessageHistory.ScrollBars = System.Windows.Forms.ScrollBars.Vertical + Me.txtMessageHistory.Size = New System.Drawing.Size(304, 186) + Me.txtMessageHistory.TabIndex = 0 + ' + 'txtMessage + ' + Me.txtMessage.Anchor = CType(((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.txtMessage.Location = New System.Drawing.Point(2, 240) + Me.txtMessage.Name = "txtMessage" + Me.txtMessage.Size = New System.Drawing.Size(271, 20) + Me.txtMessage.TabIndex = 1 + ' + 'btnSend + ' + Me.btnSend.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.btnSend.Enabled = False + Me.btnSend.Location = New System.Drawing.Point(276, 238) + Me.btnSend.Name = "btnSend" + Me.btnSend.Size = New System.Drawing.Size(75, 23) + Me.btnSend.TabIndex = 2 + Me.btnSend.Text = "Send" + ' + 'btnSignIn + ' + Me.btnSignIn.Location = New System.Drawing.Point(357, 2) + Me.btnSignIn.Name = "btnSignIn" + Me.btnSignIn.Size = New System.Drawing.Size(75, 23) + Me.btnSignIn.TabIndex = 3 + Me.btnSignIn.Text = "Sign In" + ' + 'txtNick + ' + Me.txtNick.Location = New System.Drawing.Point(34, 4) + Me.txtNick.Name = "txtNick" + Me.txtNick.Size = New System.Drawing.Size(317, 20) + Me.txtNick.TabIndex = 4 + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.Location = New System.Drawing.Point(-1, 7) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(29, 13) + Me.Label1.TabIndex = 5 + Me.Label1.Text = "Nick" + ' + 'lstUsers + ' + Me.lstUsers.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ + Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.lstUsers.FormattingEnabled = True + Me.lstUsers.Location = New System.Drawing.Point(2, 43) + Me.lstUsers.Name = "lstUsers" + Me.lstUsers.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended + Me.lstUsers.Size = New System.Drawing.Size(120, 186) + Me.lstUsers.TabIndex = 6 + ' + 'btnFTP + ' + Me.btnFTP.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.btnFTP.Location = New System.Drawing.Point(357, 238) + Me.btnFTP.Name = "btnFTP" + Me.btnFTP.Size = New System.Drawing.Size(75, 23) + Me.btnFTP.TabIndex = 7 + Me.btnFTP.Text = "Send File" + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Location = New System.Drawing.Point(-1, 27) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(65, 13) + Me.Label2.TabIndex = 8 + Me.Label2.Text = "Online users" + ' + 'StatusStrip1 + ' + Me.StatusStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.ToolStripStatusLabel1}) + Me.StatusStrip1.Location = New System.Drawing.Point(0, 263) + Me.StatusStrip1.Name = "StatusStrip1" + Me.StatusStrip1.Size = New System.Drawing.Size(436, 22) + Me.StatusStrip1.TabIndex = 9 + Me.StatusStrip1.Text = "StatusStrip1" + ' + 'ToolStripStatusLabel1 + ' + Me.ToolStripStatusLabel1.Name = "ToolStripStatusLabel1" + Me.ToolStripStatusLabel1.Size = New System.Drawing.Size(111, 17) + Me.ToolStripStatusLabel1.Text = "ToolStripStatusLabel1" + ' + 'Form1 + ' + Me.AcceptButton = Me.btnSend + Me.ClientSize = New System.Drawing.Size(436, 285) + Me.Controls.Add(Me.StatusStrip1) + Me.Controls.Add(Me.Label2) + Me.Controls.Add(Me.btnFTP) + Me.Controls.Add(Me.lstUsers) + Me.Controls.Add(Me.Label1) + Me.Controls.Add(Me.txtNick) + Me.Controls.Add(Me.btnSignIn) + Me.Controls.Add(Me.btnSend) + Me.Controls.Add(Me.txtMessage) + Me.Controls.Add(Me.txtMessageHistory) + Me.Name = "Form1" + Me.Text = "Chat Client" + Me.StatusStrip1.ResumeLayout(False) + Me.StatusStrip1.PerformLayout() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents txtMessageHistory As System.Windows.Forms.TextBox + Friend WithEvents txtMessage As System.Windows.Forms.TextBox + Friend WithEvents btnSend As System.Windows.Forms.Button + Friend WithEvents btnSignIn As System.Windows.Forms.Button + Friend WithEvents txtNick As System.Windows.Forms.TextBox + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents lstUsers As System.Windows.Forms.ListBox + Friend WithEvents btnFTP As System.Windows.Forms.Button + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents StatusStrip1 As System.Windows.Forms.StatusStrip + Friend WithEvents ToolStripStatusLabel1 As System.Windows.Forms.ToolStripStatusLabel + +End Class diff --git a/Chapter01(Socket)/Part 2/WinClient/WinClient/Form1.resx b/Chapter01(Socket)/Part 2/WinClient/WinClient/Form1.resx new file mode 100644 index 0000000..faac01d --- /dev/null +++ b/Chapter01(Socket)/Part 2/WinClient/WinClient/Form1.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 2/WinClient/WinClient/Form1.vb b/Chapter01(Socket)/Part 2/WinClient/WinClient/Form1.vb new file mode 100644 index 0000000..ec490ac --- /dev/null +++ b/Chapter01(Socket)/Part 2/WinClient/WinClient/Form1.vb @@ -0,0 +1,429 @@ +Imports System.Net.Sockets +Imports System.IO + +Public Class Form1 + + '*************************************************************************************************** + Private partialStr As String + '*************************************************************************************************** + + '---get own IP address + Private ips As Net.IPHostEntry = _ + Net.Dns.GetHostEntry(Net.Dns.GetHostName()) + + '---port nos and server IP address + Const PORTNO As Integer = 500 + Const FTPPORTNO As Integer = 501 + Const SERVERIP As String = "127.0.0.1" + 'Const SERVERIP As String = "10.0.1.2" + + Private client As TcpClient + '--used for sending and receiving data + Private data() As Byte + + '---for FTP use + Private fs As System.IO.FileStream + Private filename As String + Private fullfilename As String + + '---Send Button + Private Sub btnSend_Click( _ + ByVal sender As System.Object, _ + ByVal e As System.EventArgs) _ + Handles btnSend.Click + ' e.g. [Talk][User2,User3,etc]User1>Hello world! + + '---select users to chat + If lstUsers.SelectedItems.Count < 1 Then + MsgBox("You must select who to chat with.") + Exit Sub + End If + + '---formulate the message + Dim Message As String = "[Talk][" + + '---check who to chat with + Dim user As Object + For Each user In lstUsers.SelectedItems + Message += user & "," + Next + Message += "]" & txtNick.Text & ">" & txtMessage.Text + + '---update the message history + txtMessageHistory.Text += txtNick.Text & _ + ">" & txtMessage.Text & vbCrLf + + '---send message + SendMessage(Message) + txtMessage.Clear() + End Sub + + '---Sends the message to the server + Public Sub SendMessage(ByVal message As String) + '---adds a carriage return char--- + message += vbLf + Try + '---send the text + Dim ns As System.Net.Sockets.NetworkStream + SyncLock client.GetStream + ns = client.GetStream + Dim bytesToSend As Byte() = _ + System.Text.Encoding.ASCII.GetBytes(message) + + '---sends the text--- + ns.Write(bytesToSend, 0, bytesToSend.Length) + End SyncLock + Catch ex As Exception + MsgBox(ex.ToString) + End Try + End Sub + + '---Receives a message from the server + Public Sub ReceiveMessage(ByVal ar As IAsyncResult) + Try + Dim bytesRead As Integer + bytesRead = client.GetStream.EndRead(ar) + If bytesRead < 1 Then + Exit Sub + Else + '****************************************************************************** + 'Dim messageReceived As String = _ + ' System.Text.Encoding.ASCII.GetString( _ + ' data, 0, bytesRead) + ''---update the message history + 'Dim para() As Object = {messageReceived} + 'Me.Invoke(New delUpdateHistory(AddressOf Me.UpdateHistory), para) + '------------------------------------------------------------------------------ + + 'e.g. [Talk][user1,]user2>Hello*LF*[Talk][user2,]user1>Hello back*LF**0* + 'e.g. [Talk][user1,]user2>Hello*LF*[Talk]*0* + 'e.g. [user2,]user1>Hello back*LF**0* + + '*************************************************************************************************** + Dim messageReceived As String + Dim i As Integer = 0 + Dim start As Integer = 0 + '---loop until no more chars--- + While data(i) <> 0 + + '---do not scan more than what is read--- + If i + 1 > bytesRead Then Exit While + + '---if LF is detected--- + If data(i) = 10 Then + messageReceived = _ + partialStr & _ + System.Text.Encoding.ASCII.GetString(data, start, i - start) & _ + vbCrLf + '---update the message history + Dim para() As Object = {messageReceived} + Me.Invoke(New delUpdateHistory(AddressOf Me.UpdateHistory), para) + start = i + 1 + End If + i += 1 + End While + '---partial string--- + If start <> i Then + partialStr = System.Text.Encoding.ASCII.GetString(data, start, i - start) + End If + '*************************************************************************************************** + End If + + '---continue reading for more data + client.GetStream.BeginRead(data, 0, _ + CInt(client.ReceiveBufferSize), _ + AddressOf ReceiveMessage, Nothing) + Catch ex As Exception + MsgBox(ex.ToString) + End Try + End Sub + + '--Sign in to server--- + Private Sub btnSignIn_Click( _ + ByVal sender As System.Object, _ + ByVal e As System.EventArgs) _ + Handles btnSignIn.Click + If btnSignIn.Text = "Sign In" Then + + '---Sign in to the server + Try + client = New TcpClient + ' client.NoDelay = True + + '---connect to the server + client.Connect(SERVERIP, PORTNO) + ReDim data(client.ReceiveBufferSize - 1) + '---inform the server of your nick name--- + ' e.g. [Join][User1] + SendMessage("[Join][" & txtNick.Text & "]") + + '---begin reading data asynchronously from the server + client.GetStream.BeginRead( _ + data, 0, CInt(client.ReceiveBufferSize), _ + AddressOf ReceiveMessage, Nothing) + + '---change the button and textbox + btnSignIn.Text = "Sign Out" + btnSend.Enabled = True + txtNick.Enabled = False + + '---get all users connected + ' e.g. [Usrs] + System.Threading.Thread.Sleep(500) + SendMessage("[Usrs]") + + Catch ex As Exception + MsgBox(ex.ToString) + End Try + Else + '---Sign off from the server + Disconnect() + lstUsers.Items.Clear() + + '---change the button and textbox + btnSignIn.Text = "Sign In" + btnSend.Enabled = False + txtNick.Enabled = True + End If + End Sub + + '---disconnect from the server + Public Sub Disconnect() + Try + client.GetStream.Close() + client.Close() + Catch ex As Exception + MsgBox(ex.ToString) + End Try + End Sub + + '---delegate to update the textboxes in the main thread + Public Delegate Sub delUpdateHistory(ByVal str As String) + Public Sub UpdateHistory(ByVal str As String) + + If str.StartsWith("[Join]") Then + 'e.g. [Join][User1] + + '---extract user's name + Dim nameLength As Integer = str.IndexOf("]", 6) + + '---display in the ListBox + lstUsers.Items.Add(str.Substring(7, nameLength - 7)) + Exit Sub + + ElseIf str.StartsWith("[Left]") Then + 'e.g. [Left][User1] + + '---extract user's name + Dim nameLength As Integer = str.IndexOf("]", 6) + + '---remove the user from the listbox + Try + lstUsers.Items.RemoveAt( _ + lstUsers.Items.IndexOf( _ + str.Substring(7, nameLength - 7))) + Catch ex As Exception + End Try + Exit Sub + + ElseIf str.StartsWith("[Usrs]") Then + 'e.g. [Usrs][User1,User2,User3,etc] + + '---extract the user names + Dim users() As String = _ + str.Substring(7, str.Length - 8).Split(",") + + Dim user As String + lstUsers.Items.Clear() + '---add the user to ListBox + For Each user In users + lstUsers.Items.Add(user) + Next + '---remove the last empty user + lstUsers.Items.RemoveAt(lstUsers.Items.Count - 1) + Exit Sub + + ElseIf str.StartsWith("[File]") Then + 'e.g. [File][User1][Filename.ext] + + '---get user name + Dim users() As String = _ + str.Substring(7, str.IndexOf("]", 7) - 7).Split(",") + + '---extract file name + Dim index As Integer = str.IndexOf("]", 7) + 2 + Dim filename As String = str.Substring(index, str.Length - index - 3) + + '---prompt the user + Dim response As MsgBoxResult + response = MsgBox("Do you want to download the file " & filename, MsgBoxStyle.YesNo) + + '---proceed with download + If response = MsgBoxResult.Yes Then + '---tell the client that he can proceed to send the file + ' e.g. [Send_File][User1,User2] + SendMessage("[Send_File][" & users(0) & "," & txtNick.Text & "]") + + '---start the FTP process + FTP_Receive(filename) + End If + Exit Sub + + ElseIf str.StartsWith("[Send_File]") Then + 'e.g. [Send_File][1.2.3.4] + + '---extract the IP address of file recipient + Dim userIP As String = str.Substring(12, str.Length - 15) + '---start the FTP process + FTP_Send(fullfilename, userIP) + Exit Sub + + ElseIf str.StartsWith("[Talk]") Then + + ' Dim users() As String = str.Substring(7, str.IndexOf("]", 7) - 7).Split(",") + ' lstUsers.SelectedItem = lstUsers.Items.IndexOf(users(0)) + + '---display the message in the textbox + str = str.Substring(str.IndexOf("]", 7) + 1) + txtMessageHistory.AppendText(str) + End If + + End Sub + + Private Sub Form1_FormClosing( _ + ByVal sender As Object, _ + ByVal e As System.Windows.Forms.FormClosingEventArgs) _ + Handles Me.FormClosing + Disconnect() + End Sub + + '---Send File button + Private Sub btnFTP_Click( _ + ByVal sender As System.Object, _ + ByVal e As System.EventArgs) Handles btnFTP.Click + + '---formulate the message + '---e.g. [FILE][User1,User2,User3,][Filename.ext] + Dim Message As String = "[File][" & txtNick.Text & "," + Dim user As Object + If lstUsers.SelectedItems.Count < 1 Then + MsgBox("You must select who to send to.") + Exit Sub + End If + + '---check who to send to + For Each user In lstUsers.SelectedItems + Message += user & "," + Next + + '---select the file to send + Dim openFileDialog1 As New OpenFileDialog() + + openFileDialog1.InitialDirectory = "c:\" + openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*" + openFileDialog1.FilterIndex = 2 + openFileDialog1.RestoreDirectory = True + + If openFileDialog1.ShowDialog() = DialogResult.OK Then + fullfilename = openFileDialog1.FileName + filename = fullfilename.Substring(fullfilename.LastIndexOf("\") + 1) + + Message += "][" & filename & "]" + SendMessage(Message) + End If + '---------------------------- + End Sub + + '---FTP process - Send file + Public Sub FTP_Send( _ + ByVal filename As String, _ + ByVal recipientIP As String) + + '---connect to the recipient + Dim tcpClient As New System.Net.Sockets.TcpClient + tcpClient.Connect(recipientIP, FTPPORTNO) + Dim BufferSize As Integer = tcpClient.ReceiveBufferSize + Dim nws As NetworkStream = tcpClient.GetStream + + '---open the file + Dim fs As FileStream + fs = New FileStream(filename, FileMode.Open, _ + FileAccess.Read) + + Dim bytesToSend(fs.Length - 1) As Byte + Dim numBytesRead As Integer = fs.Read(bytesToSend, _ + 0, bytesToSend.Length) + + Dim totalBytes As Integer = 0 + For i As Integer = 0 To fs.Length \ BufferSize + '---send the file + If fs.Length - (i * BufferSize) > BufferSize Then + nws.Write(bytesToSend, i * BufferSize, BufferSize) + totalBytes += BufferSize + Else + nws.Write(bytesToSend, i * _ + BufferSize, fs.Length - (i * BufferSize)) + totalBytes += fs.Length - (i * BufferSize) + End If + '--update the status label + ToolStripStatusLabel1.Text = _ + "Sending " & totalBytes & " bytes...." + Application.DoEvents() + Next + ToolStripStatusLabel1.Text = _ + "Sending " & totalBytes & " bytes....Done." + fs.Close() + tcpClient.Close() + End Sub + + '---FTP Process = Receive Files + Public Sub FTP_Receive(ByVal filename As String) + + Try + '---get the local IP address + Dim localAdd As System.Net.IPAddress = _ + System.Net.IPAddress.Parse(ips.AddressList(0).ToString) + + '---start listening for incoming connection + Dim listener As New _ + System.Net.Sockets.TcpListener(localAdd, FTPPORTNO) + listener.Start() + + '---read incoming stream + Dim tcpClient As TcpClient = listener.AcceptTcpClient() + Dim nws As NetworkStream = tcpClient.GetStream + + '---delete the file if it exists + If File.Exists("c:\temp\" & filename) Then + File.Delete("c:\temp\" & filename) + End If + + '---create the file + fs = New System.IO.FileStream("c:\temp\" & filename, _ + FileMode.Append, FileAccess.Write) + + Dim counter As Integer = 0 + Dim totalBytes As Integer = 0 + Do + '---read the incoming data + Dim bytesRead As Integer = _ + nws.Read(data, 0, tcpClient.ReceiveBufferSize) + totalBytes += bytesRead + fs.Write(data, 0, bytesRead) + + '--update the status label + ToolStripStatusLabel1.Text = "Receiving " & totalBytes & " bytes...." + Application.DoEvents() + counter += 1 + Loop Until Not nws.DataAvailable + ToolStripStatusLabel1.Text = "Receiving " & totalBytes & " bytes....Done." + fs.Close() + tcpClient.Close() + listener.Stop() + Catch ex As Exception + MsgBox(ex.ToString) + End Try + End Sub + +End Class + diff --git a/Chapter01(Socket)/Part 2/WinClient/WinClient/My Project/AssemblyInfo.vb b/Chapter01(Socket)/Part 2/WinClient/WinClient/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..76041b3 --- /dev/null +++ b/Chapter01(Socket)/Part 2/WinClient/WinClient/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Chapter01(Socket)/Part 2/WinClient/WinClient/My Project/MyApplication.myapp b/Chapter01(Socket)/Part 2/WinClient/WinClient/My Project/MyApplication.myapp new file mode 100644 index 0000000..17c28e4 --- /dev/null +++ b/Chapter01(Socket)/Part 2/WinClient/WinClient/My Project/MyApplication.myapp @@ -0,0 +1,10 @@ + + + true + WinClient.Form1 + false + 0 + true + 0 + 0 + diff --git a/Chapter01(Socket)/Part 2/WinClient/WinClient/My Project/MyApplication.vb b/Chapter01(Socket)/Part 2/WinClient/WinClient/My Project/MyApplication.vb new file mode 100644 index 0000000..e9ad238 --- /dev/null +++ b/Chapter01(Socket)/Part 2/WinClient/WinClient/My Project/MyApplication.vb @@ -0,0 +1,23 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + Partial Class MyApplication + + + Protected Overrides Sub OnCreateMainForm() + Me.MainForm = My.Forms.Form1 + End Sub + End Class +End Namespace diff --git a/Chapter01(Socket)/Part 2/WinClient/WinClient/My Project/MyEvents.vb b/Chapter01(Socket)/Part 2/WinClient/WinClient/My Project/MyEvents.vb new file mode 100644 index 0000000..d67825f --- /dev/null +++ b/Chapter01(Socket)/Part 2/WinClient/WinClient/My Project/MyEvents.vb @@ -0,0 +1,15 @@ +Namespace My + + 'Use the editor window dropdowns in the Application pane of the Project Designer to handle MyApplication Events + ' + 'Startup: Raised when the application starts, before the startup form is created. + 'Shutdown: Raised after all application forms are closed. This event is not raised if the application is terminating abnormally. + 'UnhandledException: Raised if the application encounters an unhandled exception. + 'StartupNextInstance: Raised when launching a single-instance application and the application is already active. + 'NetworkAvailabilityChanged: Raised when the network connection is connected or disconnected. + + Partial Friend Class MyApplication + + End Class + +End Namespace diff --git a/Chapter01(Socket)/Part 2/WinClient/WinClient/My Project/MyResources.resx b/Chapter01(Socket)/Part 2/WinClient/WinClient/My Project/MyResources.resx new file mode 100644 index 0000000..3e18af9 --- /dev/null +++ b/Chapter01(Socket)/Part 2/WinClient/WinClient/My Project/MyResources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 2/WinClient/WinClient/My Project/MyResources.vb b/Chapter01(Socket)/Part 2/WinClient/WinClient/My Project/MyResources.vb new file mode 100644 index 0000000..250357e --- /dev/null +++ b/Chapter01(Socket)/Part 2/WinClient/WinClient/My Project/MyResources.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict Off +Option Explicit On + +Imports System +Imports System.IO +Imports System.Resources + +Namespace My.Resources + + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + 'This class was auto-generated by the Strongly Typed Resource Builder + 'class via a tool like ResGen or Visual Studio.NET. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + _ + Module MyResources + + Private _resMgr As System.Resources.ResourceManager + + Private _resCulture As System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Public ReadOnly Property ResourceManager() As System.Resources.ResourceManager + Get + If (_resMgr Is Nothing) Then + Dim temp As System.Resources.ResourceManager = New System.Resources.ResourceManager("WinClient.MyResources", GetType(MyResources).Assembly) + System.Threading.Thread.MemoryBarrier + _resMgr = temp + End If + Return _resMgr + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Public Property Culture() As System.Globalization.CultureInfo + Get + Return _resCulture + End Get + Set + _resCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Chapter01(Socket)/Part 2/WinClient/WinClient/My Project/MySettings.settings b/Chapter01(Socket)/Part 2/WinClient/WinClient/My Project/MySettings.settings new file mode 100644 index 0000000..0bcb11d --- /dev/null +++ b/Chapter01(Socket)/Part 2/WinClient/WinClient/My Project/MySettings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 2/WinClient/WinClient/My Project/MySettings.vb b/Chapter01(Socket)/Part 2/WinClient/WinClient/My Project/MySettings.vb new file mode 100644 index 0000000..3d12c6f --- /dev/null +++ b/Chapter01(Socket)/Part 2/WinClient/WinClient/My Project/MySettings.vb @@ -0,0 +1,38 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict Off +Option Explicit On + + + +Partial Friend NotInheritable Class MySettings + Inherits System.Configuration.ApplicationSettingsBase + + Private Shared m_Value As MySettings + + Private Shared m_SyncObject As Object = New Object + + _ + Public Shared ReadOnly Property Value() As MySettings + Get + If (MySettings.m_Value Is Nothing) Then + System.Threading.Monitor.Enter(MySettings.m_SyncObject) + If (MySettings.m_Value Is Nothing) Then + Try + MySettings.m_Value = New MySettings + Finally + System.Threading.Monitor.Exit(MySettings.m_SyncObject) + End Try + End If + End If + Return MySettings.m_Value + End Get + End Property +End Class diff --git a/Chapter01(Socket)/Part 2/WinClient/WinClient/WinClient.vbproj b/Chapter01(Socket)/Part 2/WinClient/WinClient/WinClient.vbproj new file mode 100644 index 0000000..82a36e3 --- /dev/null +++ b/Chapter01(Socket)/Part 2/WinClient/WinClient/WinClient.vbproj @@ -0,0 +1,95 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {18BAFD43-9363-4F34-80A2-F5CB6DE70617} + WinExe + WinClient.My.MyApplication + WinClient + WinClient + WindowsForms + + + true + full + true + true + bin\ + WinClient.xml + 42016,42017,42018,42019,42032 + + + pdbonly + false + true + true + bin\ + WinClient.xml + 42016,42017,42018,42019,42032 + + + + + + + + + + + + + + + + + + Form + + + Form1.vb + Form + + + + True + MyApplication.myapp + + + True + True + MyResources.resx + + + True + MySettings.settings + True + + + + + + Form1.vb + Designer + + + VbMyResourcesResXFileCodeGenerator + MyResources.vb + My.Resources + Designer + + + + + + MyApplicationCodeGenerator + MyApplication.vb + + + SettingsSingleFileGenerator + MySettings.vb + + + + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 2/WinClient/WinClient/WinClient.vbproj.user b/Chapter01(Socket)/Part 2/WinClient/WinClient/WinClient.vbproj.user new file mode 100644 index 0000000..f45750b --- /dev/null +++ b/Chapter01(Socket)/Part 2/WinClient/WinClient/WinClient.vbproj.user @@ -0,0 +1,7 @@ + + + 8.0.41115 + ShowAllFiles + 0 + + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 2/WinClient/WinClient/app.config b/Chapter01(Socket)/Part 2/WinClient/WinClient/app.config new file mode 100644 index 0000000..f636923 --- /dev/null +++ b/Chapter01(Socket)/Part 2/WinClient/WinClient/app.config @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 2/WinClient/WinClient/bin/WinClient.exe b/Chapter01(Socket)/Part 2/WinClient/WinClient/bin/WinClient.exe new file mode 100644 index 0000000000000000000000000000000000000000..ffbc585ae9e2f87472437ee85536ee75a2ec0cfc GIT binary patch literal 40960 zcmeHwdwd+#b^n>!-Pwn~ggbI(2J+;h);&0H;8-f{=|h{%uo_1B3$k0)R21impSAUoFd z#TeZmex&*H+U7@^2M(ok$uZj+u~VbTp;R_&<&y`@q&=QZrnAYOZT-nnYuId$Mk5Oy z(c628Hfw&${p((&)ODU>T7?!O+7Eo0qWw6BXA*Y-H(Qs)qgvUGl-SQtI*%K4zH}i2 z5!`(ivxVpPA$K>Y&JcYNDlfXu5mhp=K-9p`-}FindBuf*Z}OCF&zr~dz+dSHK%Ugq zu^X6NNl@E!!>N3V=u1o~;AWmN+@5P4(YbazXAglUbvT0r^A&J=u61x+yKQDHFiM@y zA(Q#;!0ox#5v}*2 zQ-JobC0cm}kp|pHWW4k{*lsfN8(uZbbh;Y6?L=|9sTn))Sr@d*P}^erV}2TYECMYp zO+*pv&jE600V-PV2c%$unN^WUD;bv&)hyGf0n(r5A~}C9?70>)mWhl7;D9|9!M3$GF}IX!Im*m8mGY95do!wDV9K)z@^Ie3 zoZo>s;daa<4V!5l$||p*1oE`yIXEm*01y-Du-<}K5m3PtJqNc&EI+_vlwtdlD5S2I z0LU!{Ge4_CQ43xn7`hc?0$rx`=oGDjI_TL6UxIE}&~I2^WhP`?26~l){bLRr{73=( z{#=|>(C*K{%t!$y_;WR!f>wWS7N?+E+04G@R|7B^?a0Ng*kGrssi*JXUJePtOAtd2EI?r}{gk6IUz5A9wnXoZc!W4T6%zkzi9MwVisF0Jgjxy$@igM4^1PWr7#&239m(S=%0 zS@Te4sjs$GtE=(H{hj{;WjBG7V+yis0`WlG3L!kk>?+WcC{ts^jka354|;2FgC4D= z8Pwc-F`>1Batn|uup}j~RD71T5LrYmaA<4f*^|%O<1Hw^XsLg3ZENkK%9h2*4q2B1 zDkEwy_%6g3+wXv?I#Cr3*Q$IA1tTA!u;{J`Dq?O4h&Qw#Y$DIrO;>KgRF3!70O^rd zjXR}=7SrffihPk)e*o3jkv4xyXk*g2@1t*1n0@EFPz#^Vwc1#OFF_Y(GippSgr7M^ zx#zOaxg2*KAn>_QbxL%46>Vx9;P+J+3y|M}t~@mkkr$`O5IJgSDaI(5iK;Rkr7}ua z>_5?k{xhR4^apt25d2;D3=t2?ni$xcL z7|4y>8lWwmOuLCoc*ifj8zDw`^s4(ArkY zuC=x+WFeaubIoHcLG{U(xYSf*ILrR7N5AlD$tq}Rnl()Y=he9?7PE?otAepwYlqU# z2x>ozE&cJuIyu{Z*`rhVwWe#D>ZU2=jC!v^+o!=*JCz!YW~|19n)+$g;w(GLypCIi zcP15_F~?OQ#hN`T5XVr_H2;!m@|kXTc;pMCmRviN+c@tMS4A6;I;&sRfRO~vZk#5a z$#$1Vy6|aDjZM*M4&sctUeWe8E;gXVV@+fq!h>K#A>GmFvW+u$B zc6mx^O~+>nKW1!jEx`coi4De_cA6<1INLtr(JA~hwH0SHdUeu4vQsJC zKc-T+A5Nu+rBihAU^JD72Udq-zgBXt9n|5Rl(L-NS8E+8A^a%}J)%exRLx&%?}3F) zTt88Xxl2u?i*?^g#=Jb3`oM#ghKGkSFAo;8;E5G^YL@v3uBS_i^y2z-j^g797;~?Y z8-|IN$#!C*Jjo&y!y6YkC%;pN#VhYYFd4pi*&E~%*XY`a$`Q9wCUk__SuJT07t0}Rq=FSMJ%wc3#wk`}=N05-Ec!d$P zbKq;qFlCfM79fJL&cc(WFMW)jO@_v?O4O8xL}jI-IE%dR%yqXT7$(DY_A!V=qF%R9 z1;ZMHD4=uf6N-L`&O4tXz2$AJQZ1i&?^P5Q_q#>wrb?=JCC!;C=@R>9r9nhmHsq3S zSg@TJd!jSPGbE@>|G`M8oQhf|nL) zIffjcbsP}>tPS4&fHi?M(X*j&%MG0R&a;h+WH(m{$DRPiZ7a1ogI@Sa_Fp&8x+#L4EtlG%pTKD7mzt=|a4`IgbrPb*r7brhRatkNAExkz zw>I<cbSR!4~S;&ip zE$-PXKw5B0r4MtYT`1TYTySy?G_$48pq^~jP z%DaPwo(7<2tK6}nI2x?cSy^$&l)2*GMscrG|Cx;rDJLq<`X_4)U))f2jT_I* zQPr&p*uR91ctFPIOVp&tBTEAY7;ep7x|%?0qVZ_0{X0IMisI3_c&PSnPSneU$0urCPAO|0btOGcXATP!?g4?Rq^ZIuF}!Ku=jVV47{KvEPd_?o>o;UV%o8ik?NrVHA(HE)16z43$P` z<^@AoEf^qI77StUf`OG)DvG;c$o&CCR|M^UV6S`-X$sok?TCv4i@}pu1~q=)oVwf@q$)$!J$Td| ze&zvZz^@3YRl!F@DN0IpW4)FZIa>YIv}|0&!@sf)nCK%ST~^y%A|O*X#pIE%!2{ zIOc5bN%0VmCRe91Q_oQL`l)3@YJ`RxWOR1oax46_lzoRK0H#~N^)YCuz1#W|JX$^u zP#F?m=01URMbNqr4>a>9@!&RAi!J*kRQaTzw|t6oLh(>r+)MpaE=IbC)KD*ta1t90 ze{G}|>wvH`eL^ZXnDu8Y$%qHyaArV1!Hh14VSSnfI+gxCc39vI9A?x#83|jTVR^7@ z=?7*gH_cf}o#QdT@>tONEGsRpT!Lta8K+;Kyu53d%Q!x9yK9&G5k`;x{ZGCE5@BYc zO#ehKZ;rO_G;`LtJ!IyJshwtO*tFY{qq!l=&ZG~tC3l&2E^TGkE^lAP|Jst>6TWzuKFZEpwQTkB)l3Oc25|o@q6HX*AI5VX zr~C7EIy-`02+Clw^8^;T3$E>_^XM$qpe@*VZC?+bF9Gif0biftcN%iRecJBEkA%bA z;Qy|z;1}tveGGR6?uEFo!HqDXbGUuDSrNwq&tJ1~&&SQYTrPl{n*=6EnxBjl{enM} z;lkG)?P-*Klh&q1=vFPO8T29TPNaVXdW^oVpVbZex!wl)rM^401l{So*%za~_MO#Z zw9e1)vjU$GcvXNY#{m=cRX}*pQd09}D<2m4aQObPLB9w;4_Fgn*cxFuS0f#vw@3D3 ze|vYN2H$SJ5&83oLH{JVp^9HbVl=;k^>$V;e;P1CV-za0Xw`co32Lim|6g0(Qw{%D4*`CnnkD=|;ESNIrhh|V8Wf3h8*PfS z&)*tndqxHRmB7CTH0U+q@h7_QdbBZ754a@3wH^e;pi_wj@X03=zkojw^#N6iz22G z=~^{y1BOi338tT`YfPGo89{qac>GXt$Q>XKSDJeSD z^PogEp^s{dz`4@F{!UvCY`cT~OnVcsjDuC{n}OZpV9WJA!0r{y2;HRL4D4YCyF5JPQfu-k zut=LlpLg=U61WW5Lz1V_gfXPernU~&V9*`LVZ`~v4)!_2!eNS)D>zT1uYz+9{pm`@ z`Awq^pZzOWDePI4n@dl~ib115a9nGk^A1)Q9Ma~|RoI5IhK0c!wIm(K3ophxgNHQ< zal|vX^chV;9M}fmFN1%Ap2Qbpmxe42?`9mVH*{EALfey!<0W3`0gO){aMH^3V;O_Q<$ z;{xX>DAHC6yh>n?z|8^&1g<0=4XzT{BXG080fEgTXNkZLz{6Unz&`D=iYN3gx~AeO zy_2r5_!yLGIjlWO(o9Na49rTUpBjEXN^e|fEUy$BG7oxrXryZVXY%@4(WBq^& zVvpb>&6TmkT8g@nP7$Z)==+dPQz3Spe~Es7Y|!7Ke|^+8B`Ghmt~s?PfN={hzBI1^gx8q`uPk1nAM~C-fauTYZ-HXie2mqrR*~(-&9Q z3FSrqDY~-yXa3Xr_0_NX@6wM~{|fN!)xN+f{k_%Uz-j$7=#v_^-6{P8)lGrB^gpg% z6kusf1ASU=Xl39OeXjbG^ac3*jCM-@TJ_pMTxX3F`s3BtA(z|w6n(FHFz`A3cN*&g^=xpLe<3VWrnejRO9OOSP{#kUMzA2E)zJtDv z^eN=p`WY#8M)*HU@7J#MeN@u-A@|SqbE5aFpx@>Ds?g61|MOC#=Y>KV>(#VB)LQhU zq?;w(tepjAolv?p*4VAF4f};s(AZ0p+Is`vGR{c)9;E-)I48LeBK>*eyriE)`aZl$ zV=bh!2Q>Y?fe#r;NjD>Xhp|r5T}Z#(*e~f6(npOn(o6M%P$oe+j5uM+8KImJnfHKx zopGPe_M8*?IiWuY`dZ_>q|XbTd}4!-ZAeOboxuGLWO_l;XB^0sb3T@QULg57o%C~y ztdsP9fdzqQ1fCOkULXa8U*I}{`vn#Ro)LIX;CX>$2*1E}0{06n2s|V3oWSz}*M*sX zkN#GDNI#^H>i?iWrbm5qeUIsjd`o=o#pnA$3;G|^C;hkM-}{l``*#0_{r3v?VgG&p zPy4^;j|ch!V}WCVy8~YjycB3L{@u`n!Qf}K^SIAykK_4#@CU&k27eNKIrz)qYr*sK zZ<+Qwu=Byynm@D*JnG4mUj`o{<_U$Op#<{2rPYUC3qA>2W2iB-SDPQYG{pR?wPm<3 z4b2BOAFwsFT6<08bKZQEd@aZvm!tGD@U9H8BrdsE8w9;Ev>R}>=vJ^ZbTu?6>im!& z>y7}{enI>T;a`Mms6yWA+^QYK`fI;_1n@^1zYogjexckQ`~WB)58|8@T_5@y;G?030q@qotLd=D zht*LCw&_>{1py;?>aY#p!LTEU!tN;k@kwt!-aa2IbBz`VT!cFCH*eleUW&Ttv{+yZ zjvZ^X1dvbP&q2BsP{;dt-XAXo)Tx~sk-i*I$G2PFb9M+^f%S$?%LT549_(}luEr?} zovskL0oruh2o2aV1L_z>TIqJ@-i%F<)2| z7B6lczNYe>6?7`?P7&^U%l;%9bkdylD{Q}m)zM9M`p zV&(^nS);||R0j%|$9fta1U8N5+8mmQ#YtjR9@AJjS2f(|pwomiaCn=P`8@bEZm&s7 zu7_7_VJg=5qP2r^j{XkXmCB5pq#QUn*q6=aQ`sSNaL{cAr`g(-RE9J_E*tfvb7NKx z>@Ecb(~b<7f06P1kzyscz%nS%cVw&-DL!xyqL=Vy_mW?oj=rj6#8?@Xb+22vQ$DE z$b+sQ&*w273?9g5`_1gIaJy;N<)$T(9?AA)i!2IrnH0u~x2A`VxLPIc*evPIsRMA( zpgcN+%SkemljL3~PRZo*9O*gXD*RO)N>G$B~6zHe_Y9JPA#mKyq*fj}zS)D~HZkvPFg<8GxKD zmI0-$QCny$QmZ`VRtH%Igo%Up9KeE#re&zcDAsP+?6F4MSs6N;jrj>P23l*Fr>v3;hrK7A8p)#fr-yQA z@&n@|XpyZ}mIuhG{BGu^^zg8m^~f3MQqxP`X9^#to$8bWF9tZqmX19Vqam66}7=GY)iP;m5R7ARqOzztm)&uY8jhS z!^2Ys{2nakVL4Ba9Byt}O_hDB)n&!#nAc;cj&XZ#x6;`>^m_Cp?(1%I+xFEe*uKX~m z6L{_A_86AJ{!hu4%oWj(xk`3Vyw+6~OraE~x~UE=1&|79_!!%- z;o+UB?1)Ky$}q3yt|9L2&ia&1QHvL`(&3vX)1l^g-ok+4G~IU7K8Q*&>D#`Z4brrEcc1>Jrlwx|tj>YLVJ)p_gH$kC;!1lW0qB1Z!Eg2#X(u zNEkV34pfgi?%LhsHs-24sj)-_Ru-cgmScHm+s%%1COTC5s5%3N?K3+5R&G)jBW;UZ zlq4A?2rEbotVf(R9uzw%r%R~r%$;J3g{=xIkKTi6$<1cLz1bmam|0juSATb3A6H=g zL>}E@x1Hu0?|7QohB;h0&lw-xHHj2-)?Mqz4`N!D29@=U6ydQTW%ELm)xdsP2(kv} z){hZ@%5gG%XVB0}-=mR+=RE>~b%1xWi>to#U#eHakEH8^O_h#^?IG!X2q_d&xNn>3JcTGrV01rD&`i>+^oe)6)HVAY1 zQP)u`>j+m5Cs6tiS;rhYdzux?K(HB$MYlpsls?D_?kzcve0aUbQhPyO@pFIXWd*hl zh#8xCr0G;z-gj)rNaA>mRHrNL6j(GjX%71bZbGyI7w0*v>u4&SQA27TN3oRw=CHGj zz?6j9BtKCa$-8nnbMyelFVXKJThImV2@Ga-8b+%1$kZj2q9GW#t~|){YDwnUon|I= zTvEA`8fP|>Fv8*v1L;ggaJ`(Plck~?$J5?bhhyS^ofiG5+E# z)PHzGhp?+??_<4e{fg8AV&GlqX*{O8B`^ zHwW(zH*O~zFH6R-ce5!^6O_a^niOU6v;Z?gIe=XJ0t;Xs&pdLHv=uOqFIQ=BjSzM2 zmedANZ5jpdAngSI5dJy~y#aYgfw{TepqbE;2c%UOm+S`}lL91X@x(wx$05mtm3c^F zyJ$fkG>oXAVjhI75u`RDHwP-)FoA=UGx1Q>0dQpTrON~y#!q7uQ#Ec*8q%_&pQ`#H zld+_OE16qC9m4lBif)E(_D=?Hu_;`n$1`HdwSZg$oac-x=^OBxYdeljxmuI(N*bl% z36HGhM02)5YX*7jgCzV|lr*OwHDK>Cjng)`##n#r0P1d`REg^4onmW++ZrfW*Nv8B ziAm}fo$Q-DQTHB58wYh%ba6gg!PX85_c4^?XizaRRFrZI7IAdoSWnen)HsDQNATCR zdkMchf%|&gSL20vl;6PnaMyI;&HrlfFLQ2Kg_3WEboPLhjF;MC8|;C7(Y^R3p`7>^ z5`mTY8QTmy4}wqSxqb%L-6K{{IJG+l`?$VtJ%&L)21*9c6k>$wholt_!Wyo96793M z7(;`_HWWMSX3k-YN}k}_l`Mi^-t=GdHMaxDud*3_4i3?kIG;hgRfHx{b7gA|JT3Sd z(~eqjpIJgTdaxU*3pL7s=VJcLioBPhl^{Fdwu92G`aXOyJBdCp0omLe+ns;ZG!vCQ z&k+ran1*_)Aw`CCvz=A{z65!Kx6j+3N z3G*%yu}gq1Wpt^aOM!MU+97BM&{d4C5_A>NPDVQg?F71((Y1oE)r}Y^UAhtSzoOwI z*3SVF7k5wa^!kj(0G@sLo~|_{wy<$A5wb&3t_>g~CRJI&^;ycGgTX2WoeZEAh3i8} zUt&iraeV{irEr_<-4p|pTL^fFaR3v!ZMxCGd2LK+W4#Rkp$0Up?gzWhRx~PG=5RVb z5pqu#*Wt6@mWcs#bPVeVGq^_m=>#f@dJ?$sIS!W-3hEJ3kJ;)mOFimwsu4{N5MnT! z!7K*#QH?_Qu*K6YLb6h$ATar8L-@nw3Lv};kS}ih%T_TEJa4x!7%H0gQw#pc9KplV zlfED#AW3?Vv_x~fz{eY6F|I4z*bsn%dCWWyUmD@I!h?Y%0S37t@Qen7^9YH18e_Vy zLmrq3~ zL?jB|MYO~aT#2q26XJ!R2QVlVex;CKu|q>4g}fk-$$-Ls!~v&rCgbei$vHt#8WV+| zGDBjrQHafg6h2lN^u-G=#0x)S25!P743;X^MV#(nu!=z^19S<LCXwS5IZWL=F z3|gMA5`-VWi=8i@vOu7Cd&)vz$(H>f+1&?arw=_~?)Kw{ng^ozpPQ z_Tdcwof-ZQAB!ltPEuu1_CVPKWe=1+Q1(FC17#1CJy7;Q*#rN7dcggE@9C&Me)WbL z3b^qH0z3PA`fslE-}C;!GwaV@^|x2P`-O);&HK3SEBEzSLvltsca$>_}?!!l>BludkuWJk+fpYu!cv5a3zI~42n`QENk`EFkThxKUCHwGUFrQq$ zuecZUq^tvnAq$6)O0@Q|;R7(Fe3d;=_CVPKWe=1+Q1(FC17#1CJy7;Q*#l({ls!=P zz;EFJAO6yt_;<|aU^WGc)bK7vF7Hwf5^(_j5KlerBiQ3vtdiqmx4g!8ZbKe?dnafPern;bcQJl!0JL_I>= zh0}ic8$;*Z9G^cuh|^_!EhH{AfLuN)n8SHFJ}v2-MHPEG}xrhWAdrkizO9= zXBkd8s(&kSZf+UM?~~s|=!P~v3CB7nP@@zuQ>6Fcc@#IFNK|KalXAL|?adZX%Jm~R zBPS!3W$L5#RXAg*6>VWjIh>YLXGXnsxcHPE|F(X}Q+5~1s?)r31{aof;2fWOVw3A} z6@Je^lasQ1s*i2slb@xUT&$xVe8+Kf0JftnpV=IdQtXW}_<=1Q!TC#^_r&Sc>9i!R zqa@nzxARXDr%t&gaP9yy*!FFXK0e#Xw!3Y}m}-qTs>4e0wK`KhjF#Y2vZdPNaHh1C z_ar0!-=5;*sb!{ndb*$2NSQ9QB%cEvMHH!%+W%QORFlUNc#PmTj#rLr_#SaN^Ht!6 z!Cg=fKqPS&=-jz;$ar1;qt{>O6mI-u5`+Klb!^Ht=I@zujrpOZbiGo>OU^(F{6xzrf*Lu9Yk2@7`Cp3jpcAf+*EVhwV_yBOpPN+kZQQJyW#dCi@HtpH<>IbZm_qpt z5KMropE56>c}*s(#Y;RxXD?18ce${r|t;J5O?nEL-x wytLxCDqSvA_CVPKWe=1+Q1(FC17#1CJy7;Q*#l({ls!=PK-mNT13d7504LJfrvLx| literal 0 HcmV?d00001 diff --git a/Chapter01(Socket)/Part 2/WinClient/WinClient/bin/WinClient.exe.config b/Chapter01(Socket)/Part 2/WinClient/WinClient/bin/WinClient.exe.config new file mode 100644 index 0000000..f636923 --- /dev/null +++ b/Chapter01(Socket)/Part 2/WinClient/WinClient/bin/WinClient.exe.config @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 2/WinClient/WinClient/bin/WinClient.pdb b/Chapter01(Socket)/Part 2/WinClient/WinClient/bin/WinClient.pdb new file mode 100644 index 0000000000000000000000000000000000000000..5941b094b331628592804c299fa976747bc2606d GIT binary patch literal 67072 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 TBcLY!&!}P9UAq3eeA)j4ZC9R* literal 0 HcmV?d00001 diff --git a/Chapter01(Socket)/Part 2/WinClient/WinClient/bin/WinClient.vshost.exe.config b/Chapter01(Socket)/Part 2/WinClient/WinClient/bin/WinClient.vshost.exe.config new file mode 100644 index 0000000..f636923 --- /dev/null +++ b/Chapter01(Socket)/Part 2/WinClient/WinClient/bin/WinClient.vshost.exe.config @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 2/WinClient/WinClient/bin/WinClient.xml b/Chapter01(Socket)/Part 2/WinClient/WinClient/bin/WinClient.xml new file mode 100644 index 0000000..3a4f94d --- /dev/null +++ b/Chapter01(Socket)/Part 2/WinClient/WinClient/bin/WinClient.xml @@ -0,0 +1,11 @@ + + + + +WinClient + + + + + + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 2/WinClient/WinClient/obj/Debug/WinClient.Form1.resources b/Chapter01(Socket)/Part 2/WinClient/WinClient/obj/Debug/WinClient.Form1.resources new file mode 100644 index 0000000000000000000000000000000000000000..06c24d06c1cab750788146ce052b37770f3fa530 GIT binary patch literal 180 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 literal 0 HcmV?d00001 diff --git a/Chapter01(Socket)/Part 2/WinClient/WinClient/obj/Debug/WinClient.pdb b/Chapter01(Socket)/Part 2/WinClient/WinClient/obj/Debug/WinClient.pdb new file mode 100644 index 0000000000000000000000000000000000000000..5941b094b331628592804c299fa976747bc2606d GIT binary patch literal 67072 zcmeI54}4X{nfFf+0#u?z!OB0q0s<-t2?P=lm5_j-q@Y2uH5M*67r2t#8*^`jsBb-3 z{MTxWt!=f{U0rRft?O%BTHO}krLFC{t-iIcZEe@OwxzrJzP=S(+uE(G`~A(CIXU-| zU_X9%LzOe|fwf%|K11rxsKm*R|OFNeFxOQ?l)q0DAzzki4MPdC|AZISoXueS6gOuU^I##!cFwv zcw;Ddm@i-K-pMs^*gLs!aoOIq25zpdEz3WD;gT{quN*b>&W{iK+2XG({LX@FUwG_( zC#*P8?B01b(4YNRHyE}5@~h;f_|B`1L$5>+J#o~6j&D6txpT31$JDbXJ^9Fzvu}Oj z-=D19afY{hff2$ob zcweeLd&kzp@7_4%2Yx%=%| z8;4%557hnN-8SNv_dc`cyXDW`)V%7tk3V_n)#Tf=#0TpBzdrij#~VMl^WllZ|Mjwy zCiy*Y&)PWja($rgf9;av7SH|FnR};<{m-Xn{c%(Cp;wb{&k`S~``?w@d*TE4&-(NW zU*GuW?n$@*`t4a8hhDA^)ct>L(&Znz?)+;OG=FUCC!c@#%1<47HTm`|@qxPkTduz5 z@-KfkH|aNPZn=C<$H&{>p0#o4=6e0upzID0-I_SGO8)vwufL?Z-Jaq6X4G9(=N)zX_-)t$RIohr07=JV;! z^&P#-vm0{Nm#+7`)PlD5qO9ayR<@88a=0?m^I=w@?ckp zQ%B{aw!Xc#Zo}MERdUXp`l`D5^$k@Gvm0uw=FX{`Pe?$FT#TpRRR{c2R^rcL)$K{Bf!|5!rE((ramOI=w*#!mW{{b|M!g51 z4aKJ4x!g@BKVkKk}c-21qp`QT%fR-XkE%ou;zjbg3DT z(%wGy+uyr@--=gu6qkmaQ*j;dgBwQ75wEI2yo!tRsz{FaPnDV5#H*r;S8-8Z71{Cn z>qlQNUR8y76&K}I)jMAAg+Xtj+-+ke>XT_^9@d~571RXF(6?@g*$(2g*7V1zgswT@luY4t8x_@4E zDpkmJd&hW(RZ8w=_{HnukMO2ehT}ZK$K#(822{87^4|{lymt}T+M6$=JE_0$cXd;) zql57vCMzGvx48YO)#qpOJ;{#6$$Tb7+S8PFzmcSo%@>k1a@gL4@6vR4o@?!&uQ^#r zH)h*cXF9nF`?>DYOh?)kY5#oLWHyyab|`<72QJ5%9l7<%4ob0~YihjQ-Dzz6oA5C< zPnwF|?={a~+>$J8+JC-U3*CAq2<}f%;A-x2du~g8(ZvPg(sZd}$%R-wg`C}ouF`nm-@#+ol9{hnWmxb*>8F*TZ zIAnaujsxEX{^q6E{R)sS*`EYX0H@jTlfa4i+0x+==hxYA^6edmzaBguJky3R0~7e^ z3%nD+v%tw9ZP1$nwt|$!AL)(qD!e+{Zy#|Cd@Y@qQ%bOg~|0wVrkpA2|7aYkrqJrLZw0AXaVhF#-gjnI7 zX!>5|Wg!%_g)-AF)ECnScr}n5ZN=n8V-sD2Cgz{Y(`kiwQrLehFM4K`(=)f6!hGmv z=sxH%D0To+j*ep2Kuv| z?iq~dl2BExYKCKjd3J2D)7qcIBTelXbo!@Gr_W3mmL>C>v}h?7jSHS8?g8W^& zdhKlX*%7^tsAo7Paq|^hwP1>i&a*LZTmHJ!?O?WI?b_vLAuE+$yVmG<2g+SQR&tIv z*6~=!2SdlF*>MST5uxqwM@_>u5auc@-@t1ir`s`lyX6cMM!#9ND4)a}f_d(2&g8pt zd743_LBJ!se+BJf9fFc|{BfIz+r(hB39a{`cAAf~s%vz;uy$jb{b!j}biL25u}oy* zOiuHA&apOEUhQ(~Ef(l~=OPA*C#cxEjN zpLe5aykXOz)9^LKVlx~0&^mN=Q5wPXLI3$U3>oz~LqX+Zm`USQ(wH8mp?UdW{M9#K zugCBXNN$8pVRQ@E{SOIPw{Mlp4Ft@r-gj>SuNS!o$S?~ zQ#|yE-Wdb()S7hI-tR3MkY~2(Ly7kuBU7`$G1wcmF{LkT3}roUF|R(RyIXkIGPzL; zImf^w^Rzg^lV(ur#_U2jx3XIq!D)Qy9BV)2o9*?y{miXAP2P4PFImSQx9hlF4@SFI zJCMFMg*yJ`b1Pfzz%@F4<@u-ldZ+7=@#`b#bpb~4y7*YPW8EGM-F9}`%?Yj;B~1?% z-Tf~AnA6+HzN;%x*k$mmak%(cZ)3e3483*h_stPi9cbUxOuHdP^Iy&#g)P3z>2!2c z3k-UWScP8CKu$7_FV^i?w+BPF-5UOqh;Bz!)Y)ve?`kN@EN9i+{AO=-`TY_7j_$jv z5hF4J#}n&ztlNX3+s7<>>cfDeH^;6H#L2EPv80Dc4f7^v&q3+}=XukjP- zJ&gb7;Qs<&2LBOMId+4?$+P5GXY{^_pY=rVTOjL+-nYTg;3J?WlD-30@Wrl5*8hSv z#nTLq?j+{-*Mg=a00Xl(mT7;t<2U4ZwGODhxc?FH<7gWU87t^UV}NK zvT*K6^Tf>48TTmpB75FHgIXK?9;mg@@0eCQVF0q9XEc5mMrP@8mf#rN5Jd0M16 zj2X)1Ra^Boa?XZ3lCCA0Wj4B7!EO!c9^{>@_|3T`(U*6top7F$V8Y+~Jtrn|j!2&X zY3qG*d-llkmH4CQ$;9uP$M2fIm3PfGZtY)PgLN6y%&U!zHJn1arl2`%OeW{nxb9`& zy{~F3%%6C7(^jT|dXHCaMPqc~oKTke>2zloLE$(?&!FzTwiivSl-~C_#zEz3e_>l~ z>gg!-bZg1Tv{BjX=aG|)gCzL;Wz?PR)rzR>fi`m!1L3F9;f&#wYc2I1>kVvP7TwTYVzTpmvq*n+_BJeBruc#^hBruS_O4LZzrehy8T}xR3SLcdpI`{ zn^;eHIHq7y+`WY(9yj*abE4!NZ#)MW&jAkR93antZc4|Cs;JvfwJMC?cTDc=o?DOK zJuJ|E*%Id_(GJ>NJBaKf8AaGG_{HnuW8IH+e=v04>8<+fbx>e?%R>9DN5s{T+`!Qg40X8hgp#tk7^BLH8SFNJf+vz zUmqQvOODJx$7hp=2e4NkvS*XKeaYwi1>;G#uF|275Z9{?*}46r z&s>&n%5`?-vV5UJY|`a6^mr5Ul6CyCF2{EEK-gKQ%jXvBa$#-0(A|?Nn3rPQ^Hb|U zJS>QaM?(k3n)VrN-*;=AO?UIJk7>gY?rhTlg5S*Bl(#UyYJ%1mvaRWC`&zylmf9S& zg)Z8`qsU3d@x^T+ZVLyZEx5IV^Fkd)$Lt$dZf)-TNL)`oSo_uX@m~k;UT7-uyDY!1BmKT8!oR+^kj}F)5RDJl(%tp+zJd0i{XTL% zwdeOo2IndzE!T(1T>$vD2ajm2&3 zK(sN9!}N%;Hq_mH$6?~p`qsK)o}#`)dfI`WzRCpQc=YrLtIuj%((+^|>v^VaotsX! z6E3+i$h-pW#y`)>sST?=tdGcL@VjwiDiYoq^tra>w3~e~vKypt$CjSQigUO6C|z#_ z*V+r6gMXd9p8D&d_|p*?zWqwJi}%vFa?YeZQe1Bi3z*8M@~i%KLqxvR2Dmk|nqy$Z z>D&Y7SUW5~+ot7d9Lwh*muKBbHpq7a*PMy0uIO_Y3IY z40KTa-%|cK-IpG33T0_WTZ`L`o0ntJ-nc~pn7^#;m)~vE(%Ay3TsF%G{Y+b}<65t= za4vqw6YG4e^9MrbrO%ttuUFA8>GR_y`b>Wl_8+DC?8bBMMTIYD0B9ZiPRjQmMos9j}?dG;AME~GtdXF<6d-apuO_&ZTRC5<Q&*xmh|(U1ba1+lZ@kw^)uGb1EHU?u~I{Z zgQ1Oe^L^@9rKXof;&NT-tUjd3N3lC{8*7b?R{wQ*gva$o>ig7BT@l9FzB{tEpm~n} zQ5;{?C%g9Jp4s+JM*vqHX+Mi-KTk1-VuI9o%uH!8zI~o{^CB|hcRX?1iQCSBXgh9P z_<>M=In%Ib!-jNsD_bG@#(q~u;-hoT*%k@U_H-`RGJu_`G;@4v zJ6A<{w&cxNY#8AmjD#0bU93U}n=+JVjpMdQ<8y^%hev)c8c1Dba3Vj&ecE% zXP|>at**L$_(P$r=cRHzdX+JJhWv0Ou7gP&eWgQstv0Pb_=aeFE|u(PY;RY*+LY|c zjgk1QwH2}0MH*=N36LR+e*%c<^G^baBY$U+zhLirg?9qKkAx{vs zxF0Wx>@B*HI3A(RHF>0E-@5tMmd~_=m%x7_$o2eMa58urI0ak|QdXb6BYOV!mEJUv z`4sbh9AiWCUfk6n`SiIj=DoOEK;}uV`W#4_{)6Cb@Lxb`(SHuC178N`g0F+~K%MuZ zcim0~8^C&ydG~Egz|--s19>L$F98>UH-e4er@`R_!PJd{542f{MW&= zz{9zTXM+>Lm0&%{)PcVYJO@mI=Ym}*Xihl~o_}kYze2leyy~oFx+E0QX051a>gZS5iKL4dF z+re*u+*AL@;5FcXfY*YD4Kw|(uSLY`@lOVC1m}R*3V#KNP4F)QKMr0D-VAOBKLLIc zWWLJ32mBQHbr4{0xtpY2DgHr1Bao#BfUk?d}uCI56y$-*xz;b_Zi?h&Z zg_c4mL*iL%f1eIcfo`+d2u_6-KnY0gS7AzjAv76M-Xtf!Qz7vw{4|To^YM_vQ;@E& zd`j*-NPJ57Gmy$CStq0Kpv$lHqv5)K2hV2@2WEJMDE!!pzPy#a2o#UAmmqp zbeBGMCVU51eApA6JMPo&jofMwyYJJkj4hIF79aX$Y|^tJGTY{H!TIo=4lV%C0#5~p znR3;7>K7`w?-iz>I1)VBgpDNiAWrpKVZ&6<(uqk$<=)A)g8gS@W-pq`T>;$#$(_#i zRPIIK5nv-oU!i?N{#0-YNLgg#wqX~IEmJvV%dl6bTy5YA{1<^OAofDv@$#`3#?}qP z@{Xiu8%bYPL5)^IIv1-F{n580R2KDR6`tYV#(?C9~D{Wm@Q1fHa z^s%%p)%{r7k8l>+=)%S!GYM@NM{hIE+%KJFHUY`;&=i|qfMe;2f^RAv&9!Emxc=_v zD)JWW&nPo{HFQ69pPC7m+hN<_&E$UqewFhCP|7YO+;IBb=%s4>l|0n)0;r}!EWl-n6eFfw@Pv$&2eShg|_$Po5 zf-}LdgQ{=tp=qg<1 z9}PYNx^^)G|99}KeS8?=e+v9JupNAkd;U>S@#u&5 zE5h#p_keeT+;9Ir@ISzR0L8Z(q&;o>ckm^`{|GWJ^eL2yF9&~%pYL@U|8d~&@E>pe zRp9UOOP~J$UI@MlZnE(?@HNu^3`m;(7r`=cH#iLZ5jX;T22_5Y0~v?TElH=Rug(vyu*x)t;=#r)00=o@h7 z5}t&DzD$1Ue+5q<0e@geD(QJD=xw8ERM3VhOrPJ^1{PA)!FpMl(S7ONVUX;(9Cq?5 zs@Xe*ax0E@O!+l_85_1E-Opf6gL69gExz%Pvrn^Z8gr4INI1_5=J`c+O@Hn+;9m^R z2bX~hz~!Lg&jLx)*em%n__5W#53+yN-v%oD0dO&XY>uvL`iCVT?ZsOP(k{F+!Dqqc z;0vJS{vXKr!T%F@HmH7rc_n`i_#W_7a3#19JO`A0sxV_YH_n)6>-b1>-})P4RG5Ce zmO5JrX^d3^onh~D9rEWuRglJnefLK78q9Z>nYr)MdR=YnmHm6>-nnZmDnZpZ%~a3g-6p>!^(p9U`mw}7gb%fZd~uLnE8o4`)+V_+6}*@iCs z{|NGoXKX{B@L%HZ!T&sXDTtjg>CvveEyT+v^b$@x@-72q6D|jXdeyjfHubOw(s*BW zG7HjpN8{FdFgWwGlCN@9(gxLDG#*mh2-<+|hwQu?-zlA=q4A-<-oiD5dBZX@hp2i@ zKsOLB_W|;wpZxKMfHZ(@(&uZyY2bCrH~3*t`iq=@8u(FgC8+vq1$W?=t-T3U{oaf` zV;S#L_^$-Xhkq4#EBHb1GsNEt-j4qc@NdAcf_H*H0sjvCId~WN3-E3*s>h$jkNxvL z2TlM#4`R3U%|r8?u6)(uzZXAk(fb03&U;@3SAh3{!x;CdztUN)s^j3j`M~z*o&+{; zj;-t2@TecwxuQp65p++~Cs#q|LyFTo_kmrkU_@DAz9FeG>qL`Q>3HWA$~77~XDEMg zNf{&DCg^#>UW3LA!wx~s&?bmXd$&P5p(mi{p%LYtmw*;Q7eEE*2IwAWH}o9zDl}#| zX+h0U8?+UQ-Qd=MZnb;=-+ljaP9zK5rt*KqkBY*WG9Q4{yrblFPONxc{Qlmlj@Jm{ zHG;RYMsQTgnVeEXH;3)kv2MZU$Q>Dg`HLwjXIvWStjBBPSWh z7wd0)ZqHzx+jAW2NmA1K$ofn~JwyF=`|_^PAPE=MZ-UAvMfJO}tBW_KlZ8w!D_+@X z^~+mfl$_&@bv)Mb!PN1Fh>k~9)Y)*iFKPAR(%NDjABm37jOzG#!AsZDZ9R0YLPomn zcw*g-b$c*$d%U&Z^CP-#RWr2RPOoQb!Vnj=-S0xLPmSuec2wsBn|%Q~Jp&o>JDymt zW4#_sy=E@kj8CMuRy9Mtc4Ly!mLsaysBXE|1Nk3(D`HK0eQUb=(o8Cib_e=hgKm#P zR&tIv*6&!q2SdNzxck(Ien(Z*jY(KX(OE`zUZc#+ao}YR)9jPcPqQxsJ8t%Oi~+U& zr*+#s;0%ztY=1oSspFY{8_x`j=H|vT;#b<5_Ya;q`~Ut=ubKV~)@0RvFdys(>v39_ z=sOcT7}NKk#?>~BYe1!OZJ37EA^Oq?#!mgGvBRculTCy9XPb`&MQH^6RR3vw-llPn zP2=7$4b3a}%WE>xYUz!Q$^N|CelftZM}F zHof=S>-X65%(Z+Yt$fDvjdc06>D_DbrD#X)MwdBQAlRap{|QLbW~;b!9~Kr9V21Uu2og^?mCB_mL;6Pu}uHAd>#jAXh{t zA`E}&Pss#@G-Zo=lt(#5C-fuY#O&g^mHWg;Sc9Jlf1jX6g}6jqtjWu0FX7wlxbR>J zyU$nh%P;Xe?Vd;D0>^c1f>3uHF2|k zt~FrRam}|Q3!o3(0BH@A^*`?cXczP-^c3_W^eQw|dID+R>n^v}*vUW+f(A~RsRW8FRq!q__Cz^QOt|4v#h~LL}Cq=?* z=GEZpFb0nQHu62hd@%0(WJgar`VVJuO*qu7N>of7x31w&~%*T-9_4m zc`LI`-D!?vkc^&E`s9LmD_7T-CzWBi=e}6p#~*|T{Ix79kGI!(n(GYL*94X&^P8G- z?deFlgE%WQukRWU(MXJp{rI!1ry$(&Gx6){X$Q7zxYzg9QpX>JTYe_dCfhu9@Q^j! z3rfCrt@{$k+O=dYtmA;k%5qPf>=g_IhwD(5u3SECg(VleL$?MJ=(zO1Kj+4V>Rv~{ zhiNm^AMZOfOhtc3yKD+eKnb1Q32cP59mziXya{VR9Q)77Hz98jW_j25@k*bDmhc8) z0dEa9*4ZS5m%oWU3wW$7M%c-!Pb)96XQkx{c&zM(zC1ocZ&zND#~{p>he3q1(N}08 zqMv>v2)F#Tef`EN1|#JI^cz8(m6_dl4V~9&WJ>ytAl&lP2f94zyX)os^cz9A<)`m+ zb)`Bi8{h-3?%oGHfovUpn(GH2pq>NSz7OI#nIO)}(62ceeJiibEB=U{lL_Li41JsH z*LD37CXdlC`1I*!5O2$t>bsX38;vNrmqD22ZSUh%8oYZ^q{l&+#X*XUjK)=JK2E8%0_fXXIqanhXwW>dhKL_xIktO_2ueV=k@Y# zP0>NVP9})6GK>LS9qatjkzUEcq>-`(@m7xZ@8on|VUWM#!wlW^f_N*3EpU0%nQx{J z-9d2CYneDJ!~JwJI#Y{xb&3w#a@PsstPJsx&F8Vxp!~8i7OY8M;iF0Z9f34BpR&-WwhP~Ev!HT8{i=h0k^+kg6%X1}W#pND92yu8qV`dlK~sOHXTT-vyF&SFWtNg0mz z)L!K@ccF^%2db}@-mtOHTRMNvyoTB)$;s`%9LIWN7|+S=w)OPDz}HySox4~^c+P2D zTswQ|Tm~Vy{ii?1+cU9*o)@yERXl!h%!zRn^zpU@}UOgq?o5|QuDstVo`)fz05A^0O zX{w#uu+->7)z_CJpU14m7a%xm9vnQ)75zocc-U6sNVaf#NjhH&C3` zwg!sRn$t2F*AwT;UK;l?;%u|sNA51-=w^*8mAjuf zm(S9;hxa4*Xykef=R>D5Xnn+8uQYB?%=*oD3#NCfh&7yTs3j7&PwC- zO~eyz&RKd0oywr^7&^JqIGu~J#BxV`QH1Bp9SDNO^vE~d96Nd_fZU|Pc!pM|i8w2aO9$w8w$+l z5tKn+uO4Fl>X&{mw0XD=`7c4jQu+=&OSwkVg0|*ds;85apYn-hwmsnn4Q*@EnW`2} zFHNjSr`wv-`OSq~S6gEjhj!-Mmb7OI`L?D_$u4%AC$=Uuah#aZnoDg?7fxzh#nJVN z*==E05&6~9o3LGBTi^Jk`qK4YZGC%f-G;fTs^pwG^;LEA>l>;XW;fJU&7D&>pOA)B zZB2cx7!PKKBcq*zot1Ob`CLyon~n}bMojNpjY{yCobEno89*64@Aa2ne@W_Yn-IUO zQ-cZIk){y^zg=vMhfodNTwPn1fBwQH(vd4i4ZZW@!+y5-D+|A~;Mx}+yMGyjs97sA z+0Dzd8*<((9c7&NX63t6vo=K(punMdKX}yOaVXJonsL6z*2v@q3A&uW3grZ|hys>+e8kk7@vCz}ldZu{2!&T9^m#NU5)c*zi z-XF~%ekV8Y3TQi%gA=(o%_OMzd2S|b$LZV?)(&)5*&^=OBitZZbgq#0(CQo^bMG$& zw?JE=Ug$E2eXlx)$jmQDM|ix@S${^4biZ}4r61B4>4CB?y^xORd6!28=Bz#5dJoE| zc}txoFac7zCqa4+*E44VIsuX{O@XFDdTyKsO@~y@lc1BKQ=pkp6;ut)f;4|v3(bZ! zKT!v<%&GJG^q!xoTg_myw_fLEnf*zcbD?_7%*-ON5n2p2LCuh!KbJyhLd&4#&{@#g z&tD*Ct^Px46?%{i(_dypzZO}!~`=PbaIw%RPhf+{Gl!i7y x8=*~52D%v940S-AP!_rb>Vk4mH*;4+kh zs}W`tu>X%+%(gB6VpQ8YFENKjJT_WWds+s@M*=_OVy3}0sMDP~yMLChP(gHJgq#Q- zV&!48jj>tW2n)8upkpK9)S6F9f^Bf(T-`yPmW$z~&;_99)oNZ4v>H{tj{ji2tl)h7 z1pnvz{WnZIidy8G0lSb~ha;XWbet!~E(S4)avL@%xj8MnMDZi-;(A(=gr=|wpeyL` zb+?ly1q#K)Od>#+Ke*W?O-uIcZ + + + +WinClient + + + + + + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 2/WinClient/WinClient/obj/WinClient.vbproj.FileList.txt b/Chapter01(Socket)/Part 2/WinClient/WinClient/obj/WinClient.vbproj.FileList.txt new file mode 100644 index 0000000..58fdc52 --- /dev/null +++ b/Chapter01(Socket)/Part 2/WinClient/WinClient/obj/WinClient.vbproj.FileList.txt @@ -0,0 +1,11 @@ +bin\WinClient.exe.config +bin\WinClient.exe +bin\WinClient.pdb +bin\WinClient.xml +obj\Debug\ResolveAssemblyReference.cache +obj\Debug\WinClient.Form1.resources +obj\Debug\WinClient.MyResources.resources +obj\Debug\WinClient.vbproj.GenerateResource.Cache +obj\Debug\WinClient.exe +obj\Debug\WinClient.xml +obj\Debug\WinClient.pdb diff --git a/Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS.sln b/Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS.sln new file mode 100644 index 0000000..0674a17 --- /dev/null +++ b/Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WinClient_CS", "WinClient_CS\WinClient_CS.csproj", "{437052DC-F92B-4786-BCC7-ED672309B9BA}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {437052DC-F92B-4786-BCC7-ED672309B9BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {437052DC-F92B-4786-BCC7-ED672309B9BA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {437052DC-F92B-4786-BCC7-ED672309B9BA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {437052DC-F92B-4786-BCC7-ED672309B9BA}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS.suo b/Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS.suo new file mode 100644 index 0000000000000000000000000000000000000000..a0859e58e069c0a1b5fde3ad2085b721a40ee2c5 GIT binary patch literal 19968 zcmeI4ZE&1b702(kP(a=aEfo-9X$!PKVv?q%rM$S=Y)c@J&~1|{tC%KF(ruF6%=iYPAIrrRi@8+GiFZ<&+UcLHHrYzlM)|=Ba7nlu!=Mk<2KW#K-9T&ps znVA{;&=@Y)(kkM>`_%OuI&T{|7pT9_1LuPaz(wFg;6iXQxCGGk=2CDSxC~qlHi3_V zE5H`;VQ?k53S1370!^=4$fGO6Q9y->`W6Q&F5!(1iIw0#lsxCIO3=<6KvGhc?4 z_pli-c{6IdO`3DT9O39uC-*#Gr@-xIT||1|>QE=U|2o1^`lZwdy~BPVjG1Gcr%lqQ zf0FtPa#b&Fg}!uAdKR|*vf0vkC8uvX>zVqnz4+YO0O`NW=WKvz$_@nee{(UP^k4Za z>A!4*^j|#NQ_Ls*m;I3qkWIJ|+yr)jo#1Am@@_4jn>l|Bw1AI;7;yF5&GqNOZD23h z2W|)Z!5!dEa2L26xNkbRj)P8+00+Q9a1ZDL_k#OCH@F`>0D3?#cn}-{NpKjb%s$S8 z;3)V6_#}7;q`;?u@;uD>GhhH51A3O`tR5c*Bj7mD^Ap80mklLplC=4=;L&0kDo^P# z?jHyHc0BpQ#M2i)@T~d5_;v4@pYf=n^!K<%iL;v|w_lCKZ%=h*2Pen9Od%f~$P7i3 zUZIfAjO0`OUb^XiFEbMD_PkW5mme);CsGHpx#;2CKqf!z5Di6n#b8mWc*$FRKNPGFzAupeu z%nf?^W(rn6m<@MiCdbAkdd56fs;g|lVv@f93y34-DI_?H)%d5thE{DqE#gPQL@&?@@UUbRCxqox(aDQAfLD7HPxwPa3G zxs&{o!5r67)5cxD&-*yCnI?y1`C-0J@@8(5?k`1BIT>K}$a*Cs)Mo(wh|>NvHBl>5 za7!bzyp}u|_G{e7vpiBfKrU%ofopLh%iUhS>7(3~|5br=p05Wv8*^%zDN2{dXu+^g z&(U@FqF*k5YN_mndS}wFr$(ge3Hggio;3=Dm4E5VhAR4BqW=i>mPa&Joj7k6BL5l# zU7_XemoAJ$RerFQ!6ELZ=(Eb{)&=OF?3H{4CF#4>kc=-qB}sFhu}9w(e9e&-IJ<7Y zmT%Lz{~K)o@=APV`Lj>Yy!=bD2azY~rmWmjrJ^X$DQ+>(<`h)tW`l`D$TH+-+hhjT ze{CJ^`pisZor$DgnzfEUeCVZfe!;!+6133>Y*V?%5R~~|BtMTmkk3%f7idBM6%&x| zE4gxOofR8+s#vvJ^xa&n6U``qN~w7P@*kxjK}mK_65-mY5lS=BG~=P{pD5eb+x+E6 z^gjZ_{n$v@_Fqr_lSKjP!N#3nOwm|lX_s`o&!54RQ=EIR`QIiUDFzdk{w?Iy93_zc z8F`dx-!7(2EoL_Za3_^%V%Xcqbq81NyxGfyt%QeZiL!(fGoDu~* z<~lTTSxOF#$Cu8bkyBdk&0;i(_X*7V*cAbJa6M({j{5F^;$dqMB0G< z$b#$#cL0s!zy4nPxn!c+vrKy=teNjx~;|8 z4_VDcmrm50VgHoxah2%W`Ad+hq7{|vW=B`$J>QQzEM?vH`&?Vf5}S!Nc)n08YULpg zF@)+7BhR{**i|!@tAie}GpG)7YG5dF|L!H{e#w7ov@WumF%(Aj^(1YHQ+Gu@)Dwy_ zRWErzVjRcVv>@zBv;D&NW4Ap2(|cb1{VQ*8`cD6)-R7Ow|8ex0t*<4%fBSC-U;Nj! zLQbTl**m=Xjni*j+x_jAhko#tYv0{hEvGT_zwb7=U)~$r`QnNDzWckcKXK^vk6y8* zJ{U!ZBCFR}X@(_P$}=L!FipW(jew<5$hNcEQSnddw&v4e$Dg48>1>4j;0fv?v#j}| z)mGJ_b`pKXAr*5BOTUS{o3V9DM`)|44)|t#Xx3&~yHL&Rx8Lf>_&e+Sgry&B|2=Sh z$fup5&12L?b8YFZxUl^6-RygzgOy?_CbH1zQ<|7>2kp%g2N?H9j#1hiMHXB5)3B#w zt#tHl*^z~(P_e>_;lb%f!-GT|$6M#c1H=04#St{v(sfHPwDkDCuc9m&A0q+H>*Pr; zNU*{+`q!}ht4BAVYYQvy{jhrPs&WnbFIATADY@sh&TYKhQOw}hdEEL>5+_eKNF%6b z1@$y=A?@Dac4B)q)IKWl-ea zMfUBq+W2GZmdL`rm@r&eNoy$8`D1HY3OU#v0q@W&c73sjt0T<#6Rfhg61?c=s*ACz z^rV~h!#Lv8jVEFA9LAE5l^TxkZ9=Do+; zG!Y1eX%v&+&Rnt0_Y0c|WwiL=r`sqw$vcgUqSQ={dN{gRx<)O{Dzuj4dR*bROP0CE zSCZTZ`&BdR;27(8qLA!=XM4JO;H~mXa=4YmmC6&@KxYB%%6Pc;oNcSISk3H+Cwu>J zXd-^gzn?z%<2V00vh9M`UcU(6>|jSS{$)7g^nQ7yVRhKVYSz-~&4fRqoG@3vHNBtfx9Nqm@`&AKBZ|EW!VfgWlV4vq!vTZfr$fY}Q|m&^{8kE2H{Kd^351Wy~*o zcJ;}T=X|iEyX$$*YjRcD7ZHD6UgHnrx#Q0Sa;EvXqLW%KiE&iyTe}0s81=jG6^4;q ztBvB{b8Gzb`4=4XHNJ^A-&*5M4cXG_ik9)*&X+t=RoPn-FTb?L%XxBEom<~r<5msH zEBC3Z$z5lnyGycn=PWn-v49UCr9I5WWHsmSPiy9V0xv@Q`0S20t@9|#Im)vz^C`Pa zRBNsBPZT;5RFBRxS`SH=T_w`)FuND3QmwSj)_NFcf;(=1N~M};|M{7#$^8B~ct+`4 zPucC5(+pfvHjYiL#GBX|ty`xr`_}s%nO7gDS7%ppZe*{JKG^Zr3*Xr?n-N4 zwbq}tPoZ97{drakqz(1*>-`XL`>$%zZx2zJ*1x5_Q4p5?6nVGGypUSi4BJkmwUv0P zHZW_0a~sz!v->Yv0{bs2?|+bWl0^wi{}g%kjgsw?6U=3_6S92vZ1dDQs{OKDvUXwV z2lt<`6QR$0UA9$UE7hVl|6L=$+^QBwcfT(St~y@v*3UPVS%%fR*L=Va$vZ<;Ye%`3 zzn6DMxm_HXyZpWMyUOS9OPDV>Wl!9m^RmZvZ>#+{pgf+^$eP|tve|A1?S2B_)+ilg z*4D7?J~6k3{hMb`j> + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.StatusStrip1 = new System.Windows.Forms.StatusStrip(); + this.ToolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel(); + this.Label2 = new System.Windows.Forms.Label(); + this.btnFTP = new System.Windows.Forms.Button(); + this.lstUsers = new System.Windows.Forms.ListBox(); + this.Label1 = new System.Windows.Forms.Label(); + this.txtNick = new System.Windows.Forms.TextBox(); + this.btnSignIn = new System.Windows.Forms.Button(); + this.btnSend = new System.Windows.Forms.Button(); + this.txtMessage = new System.Windows.Forms.TextBox(); + this.txtMessageHistory = new System.Windows.Forms.TextBox(); + this.StatusStrip1.SuspendLayout(); + this.SuspendLayout(); + // + // StatusStrip1 + // + this.StatusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.ToolStripStatusLabel1}); + this.StatusStrip1.Location = new System.Drawing.Point(0, 263); + this.StatusStrip1.Name = "StatusStrip1"; + this.StatusStrip1.Size = new System.Drawing.Size(436, 22); + this.StatusStrip1.TabIndex = 19; + this.StatusStrip1.Text = "StatusStrip1"; + // + // ToolStripStatusLabel1 + // + this.ToolStripStatusLabel1.Name = "ToolStripStatusLabel1"; + this.ToolStripStatusLabel1.Size = new System.Drawing.Size(111, 17); + this.ToolStripStatusLabel1.Text = "ToolStripStatusLabel1"; + // + // Label2 + // + this.Label2.AutoSize = true; + this.Label2.Location = new System.Drawing.Point(0, 26); + this.Label2.Name = "Label2"; + this.Label2.Size = new System.Drawing.Size(65, 13); + this.Label2.TabIndex = 18; + this.Label2.Text = "Online users"; + // + // btnFTP + // + this.btnFTP.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.btnFTP.Location = new System.Drawing.Point(358, 237); + this.btnFTP.Name = "btnFTP"; + this.btnFTP.Size = new System.Drawing.Size(75, 23); + this.btnFTP.TabIndex = 17; + this.btnFTP.Text = "Send File"; + this.btnFTP.Click += new System.EventHandler(this.btnFTP_Click); + // + // lstUsers + // + this.lstUsers.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.lstUsers.FormattingEnabled = true; + this.lstUsers.Location = new System.Drawing.Point(3, 42); + this.lstUsers.Name = "lstUsers"; + this.lstUsers.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended; + this.lstUsers.Size = new System.Drawing.Size(120, 186); + this.lstUsers.TabIndex = 16; + // + // Label1 + // + this.Label1.AutoSize = true; + this.Label1.Location = new System.Drawing.Point(0, 6); + this.Label1.Name = "Label1"; + this.Label1.Size = new System.Drawing.Size(29, 13); + this.Label1.TabIndex = 15; + this.Label1.Text = "Nick"; + // + // txtNick + // + this.txtNick.Location = new System.Drawing.Point(35, 3); + this.txtNick.Name = "txtNick"; + this.txtNick.Size = new System.Drawing.Size(317, 20); + this.txtNick.TabIndex = 14; + // + // btnSignIn + // + this.btnSignIn.Location = new System.Drawing.Point(358, 1); + this.btnSignIn.Name = "btnSignIn"; + this.btnSignIn.Size = new System.Drawing.Size(75, 23); + this.btnSignIn.TabIndex = 13; + this.btnSignIn.Text = "Sign In"; + this.btnSignIn.Click += new System.EventHandler(this.btnSignIn_Click); + // + // btnSend + // + this.btnSend.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.btnSend.Enabled = false; + this.btnSend.Location = new System.Drawing.Point(277, 237); + this.btnSend.Name = "btnSend"; + this.btnSend.Size = new System.Drawing.Size(75, 23); + this.btnSend.TabIndex = 12; + this.btnSend.Text = "Send"; + this.btnSend.Click += new System.EventHandler(this.btnSend_Click); + // + // txtMessage + // + this.txtMessage.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.txtMessage.Location = new System.Drawing.Point(3, 239); + this.txtMessage.Name = "txtMessage"; + this.txtMessage.Size = new System.Drawing.Size(271, 20); + this.txtMessage.TabIndex = 11; + // + // txtMessageHistory + // + this.txtMessageHistory.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.txtMessageHistory.BackColor = System.Drawing.SystemColors.ControlLightLight; + this.txtMessageHistory.Location = new System.Drawing.Point(129, 42); + this.txtMessageHistory.Multiline = true; + this.txtMessageHistory.Name = "txtMessageHistory"; + this.txtMessageHistory.ReadOnly = true; + this.txtMessageHistory.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.txtMessageHistory.Size = new System.Drawing.Size(304, 186); + this.txtMessageHistory.TabIndex = 10; + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(436, 285); + this.Controls.Add(this.StatusStrip1); + this.Controls.Add(this.Label2); + this.Controls.Add(this.btnFTP); + this.Controls.Add(this.lstUsers); + this.Controls.Add(this.Label1); + this.Controls.Add(this.txtNick); + this.Controls.Add(this.btnSignIn); + this.Controls.Add(this.btnSend); + this.Controls.Add(this.txtMessage); + this.Controls.Add(this.txtMessageHistory); + this.Name = "Form1"; + this.Text = "Chat Client"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form_Closing); + this.StatusStrip1.ResumeLayout(false); + this.StatusStrip1.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + internal System.Windows.Forms.StatusStrip StatusStrip1; + internal System.Windows.Forms.ToolStripStatusLabel ToolStripStatusLabel1; + internal System.Windows.Forms.Label Label2; + internal System.Windows.Forms.Button btnFTP; + internal System.Windows.Forms.ListBox lstUsers; + internal System.Windows.Forms.Label Label1; + internal System.Windows.Forms.TextBox txtNick; + internal System.Windows.Forms.Button btnSignIn; + internal System.Windows.Forms.Button btnSend; + internal System.Windows.Forms.TextBox txtMessage; + internal System.Windows.Forms.TextBox txtMessageHistory; + } +} + diff --git a/Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS/Form1.cs b/Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS/Form1.cs new file mode 100644 index 0000000..b6047c8 --- /dev/null +++ b/Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS/Form1.cs @@ -0,0 +1,319 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +using System.Net.Sockets; +using System.IO; + +namespace WinClient_CS +{ + public partial class Form1 : Form + { + private string partialStr; + private System.Net.IPHostEntry ips = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()); + const int PORTNO = 500; + const int FTPPORTNO = 501; + const string SERVERIP = "10.0.1.2"; + private TcpClient client; + private byte[] data; + private System.IO.FileStream fs; + private string filename; + private string fullfilename; + + public Form1() + { + InitializeComponent(); + } + + public void ReceiveMessage(IAsyncResult ar) + { + try + { + int bytesRead; + bytesRead = client.GetStream().EndRead(ar); + if (bytesRead < 1) + { + return; + } + else + { + string messageReceived; + int i = 0; + int start = 0; + while (data[i] != 0) + { + if (i + 1 > bytesRead) + { + break; + } + if (data[i] == 10) + { + messageReceived = partialStr + System.Text.Encoding.ASCII.GetString(data, start, i - start) + Environment.NewLine; + object[] para = { messageReceived }; + this.Invoke(new delUpdateHistory((this.UpdateHistory)), para); + start = i + 1; + } + i += 1; + } + + if (start != i) + { + partialStr = System.Text.Encoding.ASCII.GetString(data, start, i - start); + } + } + client.GetStream().BeginRead(data, 0, System.Convert.ToInt32(client.ReceiveBufferSize), ReceiveMessage, null); + } + catch (Exception ex) + { + MessageBox.Show(ex.ToString()); + } + } + + public void Disconnect() + { + try + { + client.GetStream().Close(); + client.Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.ToString()); + } + } + + public void SendMessage(string message) + { + message += "\n"; + try + { + System.Net.Sockets.NetworkStream ns; + lock (client.GetStream()) + { + ns = client.GetStream(); + byte[] bytesToSend = System.Text.Encoding.ASCII.GetBytes(message); + ns.Write(bytesToSend, 0, bytesToSend.Length); + } + } + catch (Exception ex) + { + MessageBox.Show(ex.ToString()); + } + } + + public delegate void delUpdateHistory(string str); + public void UpdateHistory(string str) + { + if (str.StartsWith("[Join]")) + { + int nameLength = str.IndexOf("]", 6); + lstUsers.Items.Add(str.Substring(7, nameLength - 7)); + return; + } + else if (str.StartsWith("[Left]")) + { + int nameLength = str.IndexOf("]", 6); + try + { + lstUsers.Items.RemoveAt(lstUsers.Items.IndexOf(str.Substring(7, nameLength - 7))); + } + catch (Exception ex) + { + } + return; + } + else if (str.StartsWith("[Usrs]")) + { + string[] users = str.Substring(7, str.Length - 8).Split(','); + lstUsers.Items.Clear(); + foreach (string user in users) + { + lstUsers.Items.Add(user); + } + lstUsers.Items.RemoveAt(lstUsers.Items.Count - 1); + return; + } + else if (str.StartsWith("[File]")) + { + string[] users = str.Substring(7, str.IndexOf("]", 7) - 7).Split(','); + int index = str.IndexOf("]", 7) + 2; + string filename = str.Substring(index, str.Length - index - 3); + DialogResult response; + response = MessageBox.Show("Do you want to download the file " + filename, "Download", MessageBoxButtons.YesNo); + if (response == DialogResult.Yes) + { + SendMessage("[Send_File][" + users[0] + "," + txtNick.Text + "]"); + FTP_Receive(filename); + } + return; + } + else if (str.StartsWith("[Send_File]")) + { + string userIP = str.Substring(12, str.Length - 15); + FTP_Send(fullfilename, userIP); + return; + } + else if (str.StartsWith("[Talk]")) + { + str = str.Substring(str.IndexOf("]", 7) + 1); + txtMessageHistory.AppendText(str); + } + } + + private void btnSignIn_Click(object sender, EventArgs e) + { + if (btnSignIn.Text == "Sign In") + { + try + { + client = new TcpClient(); + client.Connect(SERVERIP, PORTNO); + + data = new byte[client.ReceiveBufferSize]; + SendMessage("[Join][" + txtNick.Text + "]"); + client.GetStream().BeginRead(data, 0, System.Convert.ToInt32(client.ReceiveBufferSize), ReceiveMessage, null); + btnSignIn.Text = "Sign Out"; + btnSend.Enabled = true; + txtNick.Enabled = false; + System.Threading.Thread.Sleep(500); + SendMessage("[Usrs]"); + } + catch (Exception ex) + { + MessageBox.Show(ex.ToString()); + } + } + else + { + Disconnect(); + lstUsers.Items.Clear(); + btnSignIn.Text = "Sign In"; + btnSend.Enabled = false; + txtNick.Enabled = true; + } + } + + private void btnSend_Click(object sender, EventArgs e) + { + if (lstUsers.SelectedItems.Count < 1) + { + MessageBox.Show("You must select who to chat with."); + return; + } + string Message = "[Talk]["; + + foreach (object user in lstUsers.SelectedItems) + { + Message += user + ","; + } + Message += "]" + txtNick.Text + ">" + txtMessage.Text; + txtMessageHistory.Text += txtNick.Text + ">" + txtMessage.Text + Environment.NewLine; + SendMessage(Message); + txtMessage.Clear(); + } + + private void btnFTP_Click(object sender, EventArgs e) + { + string Message = "[File][" + txtNick.Text + ","; + + if (lstUsers.SelectedItems.Count < 1) + { + MessageBox.Show("You must select who to send to."); + return; + } + foreach (object user in lstUsers.SelectedItems) + { + Message += user + ","; + } + OpenFileDialog openFileDialog1 = new OpenFileDialog(); + openFileDialog1.InitialDirectory = "c:\\"; + openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"; + openFileDialog1.FilterIndex = 2; + openFileDialog1.RestoreDirectory = true; + if (openFileDialog1.ShowDialog() == DialogResult.OK) + { + fullfilename = openFileDialog1.FileName; + filename = fullfilename.Substring(fullfilename.LastIndexOf("\\") + 1); + Message += "][" + filename + "]"; + SendMessage(Message); + } + + } + + public void FTP_Send(string filename, string recipientIP) + { + System.Net.Sockets.TcpClient tcpClient = new System.Net.Sockets.TcpClient(); + tcpClient.Connect(recipientIP, FTPPORTNO); + int BufferSize = tcpClient.ReceiveBufferSize; + NetworkStream nws = tcpClient.GetStream(); + FileStream fs; + fs = new FileStream(filename, FileMode.Open, FileAccess.Read); + byte[] bytesToSend = new byte[fs.Length]; + int numBytesRead = fs.Read(bytesToSend, 0, bytesToSend.Length); + int totalBytes = 0; + for (int i = 0; i <= fs.Length / BufferSize; i++) + { + if (fs.Length - (i * BufferSize) > BufferSize) + { + nws.Write(bytesToSend, i * BufferSize, BufferSize); + totalBytes += BufferSize; + } + else + { + nws.Write(bytesToSend, i * BufferSize, (int)fs.Length - (i * BufferSize)); + totalBytes += (int)fs.Length - (i * BufferSize); + } + ToolStripStatusLabel1.Text = "Sending " + totalBytes + " bytes...."; + Application.DoEvents(); + } + ToolStripStatusLabel1.Text = "Sending " + totalBytes + " bytes....Done."; + fs.Close(); + tcpClient.Close(); + } + + public void FTP_Receive(string filename) + { + try + { + System.Net.IPAddress localAdd = System.Net.IPAddress.Parse(ips.AddressList[0].ToString()); + System.Net.Sockets.TcpListener listener = new System.Net.Sockets.TcpListener(localAdd, FTPPORTNO); + listener.Start(); + TcpClient tcpClient = listener.AcceptTcpClient(); + NetworkStream nws = tcpClient.GetStream(); + if (File.Exists("c:\\temp\\" + filename)) + { + File.Delete("c:\\temp\\" + filename); + } + fs = new System.IO.FileStream("c:\\temp\\" + filename, FileMode.Append, FileAccess.Write); + int counter = 0; + int totalBytes = 0; + do + { + int bytesRead = nws.Read(data, 0, tcpClient.ReceiveBufferSize); + totalBytes += bytesRead; + fs.Write(data, 0, bytesRead); + ToolStripStatusLabel1.Text = "Receiving " + totalBytes + " bytes...."; + Application.DoEvents(); + counter += 1; + } while (!(!(nws.DataAvailable))); + ToolStripStatusLabel1.Text = "Receiving " + totalBytes + " bytes....Done."; + fs.Close(); + tcpClient.Close(); + listener.Stop(); + } + catch (Exception ex) + { + MessageBox.Show(ex.ToString()); + } + } + + private void Form_Closing(object sender, FormClosingEventArgs e) + { + Disconnect(); + } + } +} \ No newline at end of file diff --git a/Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS/Form1.resx b/Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS/Form1.resx new file mode 100644 index 0000000..faac01d --- /dev/null +++ b/Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS/Form1.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS/Program.cs b/Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS/Program.cs new file mode 100644 index 0000000..f2b9ee7 --- /dev/null +++ b/Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS/Program.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace WinClient_CS +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form1()); + } + } +} \ No newline at end of file diff --git a/Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS/Properties/AssemblyInfo.cs b/Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..66feddb --- /dev/null +++ b/Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("WinClient_CS")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("WinClient_CS")] +[assembly: AssemblyCopyright("Copyright © 2006")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("72f0bf7f-77aa-48f8-8b5f-1931b5155c4d")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS/Properties/Resources.Designer.cs b/Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS/Properties/Resources.Designer.cs new file mode 100644 index 0000000..a54b167 --- /dev/null +++ b/Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace WinClient_CS.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("WinClient_CS.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS/Properties/Resources.resx b/Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS/Properties/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS/Properties/Settings.Designer.cs b/Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS/Properties/Settings.Designer.cs new file mode 100644 index 0000000..76414ec --- /dev/null +++ b/Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace WinClient_CS.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS/Properties/Settings.settings b/Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS/WinClient_CS.csproj b/Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS/WinClient_CS.csproj new file mode 100644 index 0000000..d6a6450 --- /dev/null +++ b/Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS/WinClient_CS.csproj @@ -0,0 +1,78 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {437052DC-F92B-4786-BCC7-ED672309B9BA} + WinExe + Properties + WinClient_CS + WinClient_CS + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + Form + + + Form1.cs + + + + + Designer + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS/bin/Debug/WinClient_CS.exe b/Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS/bin/Debug/WinClient_CS.exe new file mode 100644 index 0000000000000000000000000000000000000000..7cfccc3a9032fd67ec0b5ab362ad71c3c2ba0fa1 GIT binary patch literal 28672 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 literal 0 HcmV?d00001 diff --git a/Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS/bin/Debug/WinClient_CS.vshost.exe b/Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS/bin/Debug/WinClient_CS.vshost.exe new file mode 100644 index 0000000000000000000000000000000000000000..ce3f102c36be07551ba7c7fad64c8b24709bdb91 GIT binary patch literal 5632 zcmeHLX>3&26+Umg;MiccvX$*QEU{T$9osBr9ou8T!CO4GX{f1rGjlzDVoO|!Prgq~qltDz9r~?B;$Ix=|OT07mVmN>1Z}RE2drlP`Q)*5X zG<6uR8guNZqj#!d-Lh;?4GGnWTdHBHf%>4@X-9-MYENnj=gbf*dm1jLN#cftptQL=|aWNfvWlQP?*hWf2t+?Lo}%k$q{6hp9nL zgjRO$01v%$;r&I$YdXI8&)FG$2N&cn{PM~EIUlboSblZ6|HQ<{cD(w-H$Pi{GB!Q7 z|H6B@KUnhF)GHNJoBn(6mQTf)Ia@0-J4*9+&;GPbIdCa>RcoH#{Qln`m|0=hKQWNC z!#y@@!#j(1Un%|Q)aTD`kDfW+w4v>(rqa#M$bmyo{cgLmeRW{M$FpYm3da-W&f8x& z0nLKxvau(Eo?AGHIeD_NCo>0YuLwR+p^ze1#Ifrt(TcT2#Y;+-Fe_7rvIeo7wS(yA zX#bP}I_Nou6?Iv{Lq2$0&05=B9YEWMekRLTn0AN-P|#J@A{QJ}x~7y8++mAT5@Rw| z@Q22sG9U6Nxk<0GsfFs1h&|K+JVrkSo|br>`a#cB7|RvrMHFKBr(Uw zl5-@k@UiBtzD8d*9q>KoTQAp`O~3WAt@psmrLqha^n)4xjBMH^@f9F@n1~ujPf^Cu z1X8hoxc8RIqmNGBB-e08_V!a4+g72m#M~*saoB2`Xc84k`hJPumRK&aTH=EeACjm` zG$d}7*dy^#;3Rrn;NPL;}jK9&ZX=lbcdYSfRoToq2>!3ASPn#8u z^5_H5<0%vLR4N9}qQ$`Zh^$7XR0mux@nJd(I!OC~-=*IJ!;-UI&T=Kai#`PZNxBT& zOIH;?y#RZey+d~b$L>D*2U4BLHo7PZt&wf=(v$RGXdorBqSlVYO|go)+z#9IG|?@n z%JQ6^2HUVasx`un?b_|0)?&DE-3)s1h+%8%Ad2nU;Mif|y42~0ZO1f16zp+5(Mk28 zEh6lZ7WQn1YIVa(4rq;W%QHHKR%v&}3{yBk;dB{LLCFE;>z)xZOvCFb_i!dcaZe1+ z7VReV8n#8{t}8l2X3u)jvj&QWL{kF+Vd_0WBWeu|C7jb5g=@zhHd-g*o}-(Cj2hjF z#`S2LwxI3_6TXN_8!^$tUW;&C*dJ1wvR7@j+fFBZw=LZqR*HQcc5v8%N;}r$7|{;z zRXI0nx6BteC@kn? zx7}3wC`~t$^_JixeXZ}r;oYm_b%)++Tlw0>+HX%C`+@-Ake_bp%{*%iWKZ&%~jNE(TX9o*6g%-Rh7EHhP*OlHTd*KJ4?D*a4-;jvD#}$T zOIQn=@p>DHr7y*I8$Y743XSBB{D^C1B}AnPX@5AP4(=bd(sp9DBln=DmYb$353H*? z$g9&OB6vF%DKvX%LSbW(nz&Qd#HFe-r=+-e5z#jlnlL1prkZH9Lb+*IH9O7$Qj&K* zi1dqo@D0qF`iTGURq zl$y==AvIxC2iL{8P9EfJ^b+N0<`}+a;gbg`1N`W1H1*>kDp+;uS4JU@0csxjmC)CT zpTKMnR`9n2umfBdeGU9>R4z4m@TcTs(x)CoK$mlQycQmW;RnyOu?i1|k+nM%lbG(k zU)oNsIsglXDI;B4QqNAHkZxdK@%Jm&3M+mh+d;;>sRJgjdxC zjKDHcB4+hTNzOL=or(eXIE%yQ&!joDM74@5pgblnV%bN-JGR6=O_ohmcu4Tp%XjSM5Nh|8#A5K!MWx={dKuZ TBcLY!&!}P9UAq3eeA)j4ZC9R* literal 0 HcmV?d00001 diff --git a/Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS/obj/Debug/WinClient_CS.Form1.resources b/Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS/obj/Debug/WinClient_CS.Form1.resources new file mode 100644 index 0000000000000000000000000000000000000000..06c24d06c1cab750788146ce052b37770f3fa530 GIT binary patch literal 180 zcmX?i>is@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYis@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYmi8fVF@_|T!!6A1yp-QYlle&1P zP+G<(0w>t*oPtGV^16`@H_LCTntZzE&x5RR`Y_O)u^hqcaQb5 zg7e-J{9hm5Zimb&YLRaS?0DVgh&v0J^D6O~f_0?MClbsQHUW%Dqw}yq>1bqZ)-Ts> zzFbbENkKCr7jV?C7VD|{8?;p_&%N+~L>tZ@;g8{(2zbzS9m~^woXIyMOR@p5J=lsXjfm#YSOH< z#Pqk%xpzKfB`aO;udFv??!M>jv(G;J{LVi6e9VZUTRut}5e4wP{Wj5)c=Kncpud{T zp*Y_D)i^y7ety-H%HZ>>#*XD&bH=f!oXoVD%@hiD(Hyr-r&KU=1+#BBZBE-0R!2ia zfQcez-|j6pA}X1yr}V&P|wC?G=`%GQ&0 z1nLOX5vU_jN1%>C9f3Lmbp+}N)Dfs7@c$749~FmRc{WukNF!Tum|R7q0D~4H{ngDx zGo1M~KaHI#t%oeCBuLv3RnOpNA+Yq4vR-M9=o{lC88(im5uDJqRDu)hsIfCZAJ)a0 zJwd9Q1ovzZHC4BflPE!QDJMfBxr~!IV1wJl$#6vgdckdGZnPqcgE6?GT0=!3UP)fT z$ur!hy&QE(P05#J0gFiU{cF*&h~A{0VSCQ&_6i{=B$~_+`s}U*$Hqkg>I=35=8WA| zVVF;V)86D>$%5?_etV;BR&ui1D#_r+94MZ#uc|QG?e>IJvbw^QQn*{;<{7AFdrc+N z)V`v|J{E9xSJ}sm_U`tE8sh{r=^H2N?B_b3aXbd?5&Ih14Cl;A^w9hlI6+NoT;$kQ zt%;g9w>Q_cCYTAoHBsm6g4WbaI)+$x-+?CWlx&xWzs)y-GtD-}ic#Q9OZ&PSQ<&$R zt1?9h+3PAb+E1HbXsVC%ya&vN-;Cc9qd(0YwQ)3~eM};R^#Wy(DWUrSXbH-e@sH1R^^W!R$gqnpW31-YUNz}phW!Wv60h2Ih zwI;>EZ;$()!nqa`ZPmIevz@R~nYhd_uecmyp)G2A6PF`M`xU-!&ZRb>xAsQaWoDT3 zXlsEtGQZjGs0cajRZYv%Yb&M8?aoTZ>|_Wpb5*Vc;H6y%8qe$m8R>SrP&2hjRBuip zvSWgXcx1Lgjc}gS7Qszn8Hjk%@SW8hp8s|Yhv#T5hbKxchuyrE!_HaDVJE8P@EF!| z81GsR_tfJ!y?`wxL#;E+5UvuI!wsNGcX87iNo^A>8L{o_D;aycNH?VPdmw zptR~LN=Tgn%7KHmAA1&Oirr`k8kQ)&J|4(54XM3CZPnmLQai!Y>|xNT4zM4{*&{;e z6(gJ)<*@1qlbQPiZm_+=E)1CvqO*);I&c!yJV0YdJeLOry!r0gW<}8@4 zb{br`f|zt;NNa6++hH3^bi~GY7LjYV-3B$9b9SMIJ+&Ip)v}7JWR*7T6eIQ_5cDXB z`TGjdHdW~U$O7HlKf#^R+BEwx#IKarG~W+TP#VLDa8vt+-${h+TTm9OYRbM<=r$T7 zO^wm@W+IY^KHN}kR#rvfXGFNX4GO?tAq+(#brg&g z!jDcWnnD0YdcC7LD^ah;Th@@)9+O74U*VY;Qq?m}m`I6G3fgsAf4$~xUZi4mcbgB{ zx1-G^ih70vuV!bE6LVJ1DT}WCI0faL3K3#3A?RQ~e+IS%Y_?zQ8&cy)!IPt*?Qbyn z*zjk;Im>fb&Mv1LmY6?*0(*j+fUV_-azEmSa+YJG>ZBo7g^oZ*gg_6LN*w<6Ba^h& z$ubtJMB`_8C2ID!E<6_AK1NuWvV@Ssvp_bxXyl>w{fMH7F&M4NRFh8cHCer<;wHMJY4r8VrffdrrJz%mj6d8YdT>5W0p zsp0HRiQxH!-t4)ozPxI%z;AIb!UQB%sAt65E?ry~o{gZ!PPRt)%_2H$RW0{bVYXDO zS|OH2G$C|)1FHM(AtdwY6|Xytt4e)z^)Xt(Ubzxy()GXzfC9YdVQE#95*WC8IruJs zydlhxzg&U*?}VpU4G)9e7+Bv7=oW(;Y{naUUU_9@A|L?|CV~JQJOfK7?BxZ;@xcDA>OuwSF;F0&@)1+VY}d*n2o`vM!l&qwC#S@F9j2!&@IOg zhmOmA6i3(P1g~UvNG{3=J#?rMrfl%}vSN-!4*Me2JeHPcediwZIicT&C0%hILRw4- z`)b%isad9!2w_#ij_bJ85ITNq*^=#tv6)&#(I3_-3d=o=ZV$3T-ctr?7f{0N7keF$ zfc;*SH9ahM6K9Z)=mJUieMm<`HV(@X3fb?+D`p5l8=P;W8BMH2sXM{H@rEixMt;EKtdvyA_E0lcXx^*{LKYApLvPO|Cr1fIY8=8vC7H|ZRne0tU`TGJi-EY~hMS<5Y__F0(; z%h_N~yII@G=f*df2Q0_U*@YdOIy(8^2D7)6FP0o@N5Lu;olJg%IZ_(W=dw3jvt#xN ztFUAIy6ZAqvs>TUb^YcoR_C_sS6|*(sZh*KTYl?ltB4I``7_ep$N#a-zo~Zjq~G16 z@a-o)@E1DC;BD=^Zqs$l2~r+(3ntoX%+N>hegV#~I$d;fg((DKq9Q!u26)rz{b_m( z=L3XzTD^P!Kp)=EAV0@tJ$V~DDDeS&%E7ktN*Lo#|DkLqL~(8%TSII##2qf*;}Tqm z;1zs6B}8tVGLiWph@K|w9%(Hpzjg% zLxMgi=%a%E322;_s6jPOn^jYdP+A=TJ*%>|r$KcxG}hmxF=tZSuSMvS+6O?d3M>gk z=q5o=1r8y7x1bLR&L0W-yr8cOssveng`n39dO*;*;B@dF`Z(rJg#I-6XfQ&5CumgX z)|+*vf<2BYzLgVFe!!Dzf_e9MT?PYp((AmjzYa(2lLpnl*2$!CLcSY!_$QL3yy^d0yekSPdC`u z(BFx&hDX7V)00uQ?ZqhD_8%yX(=D-{ScL9~O#`@95g{EwFf{S)jkIL zkJ@82VxkN5b=*{33z-jz+&pzETQHxldS5f|)|+F^d%XF#KMjZwNXFFIOoIs?aY>XAsm>I*p~5M{%L#)dQ<)o7ikoF-oSq5 zZvDrgAJZr4u*Z2s|95aM=odl%82kZII-oFrKybR0|E*t((wFpKP!6^3MEXrVpxmK^ zLf6tLtq(<&E@cPO^U9G>5@{#2Tsf!Q2hKU=VbH_$N1=A*bEtcbazS}9v;p)|XtNTg zB?h>_bYEIOT)9!uuhv(a&&e0UPV!R!uKoZQ1?!HNqKkpV@eB+ zg+Hr=)l&F8^!!$sbu#6;Pb;g`FNVJkosWkvqV%ibZ-es;IBzN!!~X#KLinGQQ5x3& z73qHo|GTnQz0r6J^o20fpM@_%4@K@p>5_<|u2q{N7)P}g9B$E2yOeE_&!Ti`xKU*d zE$TU?J2Ht{`y=mEb6y`aksGigmLfgsD1AJ#R~;1^M%8ab#?-^=_anEU?$YpWNdGWm zK?ApvQ3XD#8l9w^+AQc*(ThlLie5{1sAJL7YEC^G<<|4j_X`bosdu2oht-#0^XEZ7 z6}_OIQ~xmfG-B;@(dX2M)bB+vs-J`A?|}Y&bPIh>{io=Q>IL=f=*ysb>__T%m4=vw z()QREdK{7tJtZu8R?rsFql@Y@u^#QB`nR#0wTHkN)m}sCr1qxT+3thKRqG(t&BMgH}^}po2CGdWJGc-z?HD9YT5~ z{S-3qqBThO(hkrly$()V$lNMuR`5^Ia9}{_yo*)`c4&9e%D`LdU9=wQM?JbSa8fh1 z6X5(6?S&sdsr-#{rMer4enfp-{YUk%meIbg1rQg4h!BK5%NIa@sC^Ms3p|C`(Fndu zOT}8Z3{*wb3{hZ?V@dUA6*9cz@;?f8TKuWy-M0u&uCCQ`uhI-}_{4`>xfeUjC-LU= z7m#L)@VQ~go+#z58|h%K(3{U$h2qiPbcc1?qFuH#-BrV;2`j&UW+GFx_T=26?aY$D zad&IvIz}9O#&U`|%Oz~-i()ei9{(8td1nALH({T0JGd2Bv_<|&!xNz)94~U&j9cup z^41hurQz}8R<`J?=(P)zxv7$qDdJQ@-7_;ddx*5(W>3boXk>Wb*xq5L8H3>QnB&<9QKy5LTD_9O?ZLh?ozMMN_L)$7lEWm0S1lBz`Tj$;4eiuhDDGTlR zivi{rPZ#&*vL{$Potr8Qh>B^eFu^55mg{Dwtg56xbTb(YP=@XEf!J#mX<%fJ?H2nB zMGS6k2E!+hhbZbu+u0LV(WSBMjC2&r3V$IuM8+2!0Mfa<1+5mwdeWsyw+N!iO->aHXu3J8Ag_1MsX}D2U-kUwn40`}Lp1uys2)DwR8b6t;O_ zpjssdB)tr$1U#JZS``l1o3~xKYDFpgCMpRoM*buYwIodL&E)gr88p*lP33^NDCsXu zc&UZQ-10OT$`mjd4msXw8+jkN-8jRsUrA^7PSyj3NxLlU@o35_!fbh5_Z2eFFL$fb zK5xRB%mCzpf?LcKvX;=%Cwb(*hv4+SHT$f|JfIiz%5|;j@%$_gt9Jv?U4*ZXmoOo_ zy~4{1do|$!WQ^$&z7aDSluTNl)hYM zs(@LR%Ob8=b3K}v#=jB3sJ(4 zeVnE4iHUug0^*Plfs;AKZI0NvLXp^G2W=U5sOuSfkBwS+U50& z2SS>18K*2O0wtiZ5uwFPOfs*5LH0&Lgqj}24k_aWaj{ad5n|2DWAzbodcXKYntUpSC3>DB}=TpHsGT!dp~O>ZQCF z0xtvQ`<8Hw{zBHCU=L%D>`wO%3~&pmz`Xv#$(&;s07_Am@3l@1GUQ${x(8px)bw^8 ztioF-dPkYuY}EXe+uuXceYVt@jw9PGb{Qghdw8-0xl+VTURm zky{g2lnJ1*?LvU?CL5`4xyKOIZzD4N?yU_IEX!pm*n~6?dtk+ z4i-J$*NS+M%QN7WWF_`s93ci}zC42Kv|aEt^6+{|wuPG&ZatWBu>#AnLB-q*@3yfI zWdSiAInkZP`siYS;Ly^ssy4RNXNzEl?vG&ZIV{OdcxjGkG=d-jq_Z=evv?aTT!UEg zOtG?g&h{EdSI#@nCJ$xOb4?oRMb>Tz)Js9kaw6!3oCqK>TCrKY_TjEK=`Y*>#Wb|3;E z;EZ)kkFJ<0mjmo(;Qro9g!=y4o40tP?8AhycpCaUFLbN+{KRpy3xC4veJ4{}SUFsk zzpHVpWO1fzNmCK0_#%}E+XuWI+;hwjuKw1Kk&S;?*vs5%*+JAA#{|x^Y(pit2|9$wD0Qb%J_W4saU}l-zaz$%)qMH`_k zZKosnBY)`y6*OH~mBN>#9k7Oda4o&BD)&C>Mql!f@zJlyuPe*0gU!$#6nFz8**1H} z6l&5k6SHd;y4fE)ynocb7?;PDXBsR{NQ=4FG-fgMFWZN77Eg{&3f~jjdk>0qwT~W! z$EKlU1RiLkF3-Lqq-6W7#Rb0vE^EVFrUzdB_-#LZ<`V;-9D45cvpXN@BIAF(_sD^k zEwA3I>PCQnfEC~$YN&dA$wDX5^yIRDiCb6ABn6okJZ*SZ;aP)cEuM{dy6|k(^tK@0 z*9TD{xr3|4byHPZlifkQ;$EhoGp)-FQ%mlMCkI+lV+hYEzL`u8F&V|TM+)+|ARJ;c ziqfTAu#|I4aT}-T(4CmOmzyxOkfH`nO3r;Qglt=K?(@cDHyyn*@z;^<+>&8P;S2Kh z2lDkezmjubk-4woYs19cH)O_pJFV4whg%Op5EIB<92M zc*ro~hSAoVoNrLuT7w}43EVV72dXKpXrnC{hjzRSqahSX&b`qVgbd!mMujOV6tF?_ z%aDdHu#Hw&-WG2|tkXm*iTO5I9&d}IFm5!58VsmtgPn0MR@=0;xY35rsc4u{iL=p) zp@&qqOK4v!=tkJy%AIU&eFUZoW(w}E z(V&%>&xvkNvjOqs{B$U!C5MtjY5)T@DqLp1WZ-*H)F3*f(9J_RocUaPve@D8CQ1`I zyF>0&V1c(Q!Tkd+{Vb=w|IBw?V@Zav`zkE0~VpRrNW}wxkeU@r zmhW85=PsD$rq0fHVxA}ztG-qS7-&XRK?2|1;d3Q_`#YvK9dt4?*b|mdMc7zjmnLNW z{}&8n^Lu!H{{Ws{MElZx>Br7}_?vfHOM34a`nmd(FMsEGd{sxi+mH0wS)2|EMc2f! z-}JFMa?r|c9KvbG9JH(>K<)&#w@12Xu+eglFtF|s9D-)B>o-rEyfZaZ^3rqd5$vjq z=B6Xny{XM$lMIcx%&B2_%uI~a`wqe=@AFwsn|`kL?f>mvEf+^Hr~kAiZs)`exn*@s zIl>ks3TBEppHNtfjR>JPYCdD^oW0PHCL;K_iTjwfy?@z8lMl6Sfeb#{&4@6rd&lR*cW< z{;fkrQ%uNoqTll07M$k!$8~-9jfzs1?-M8KEL!6`x9WC&+4-Dp=;U)kS;qnB;5(y= zjeHN|-^s`}6Od=y_+G%ln{RLSf=(mP{|`gHby(~!z{2eYOYk@)p@VO$rbO*taYryK zET6)S3~qIxf$t5fc_v-J2G+!_5Tk%yJ~Xf`!(KgZmu>O!Il>k zs3TBEppHNtfjRTK6ipcC?kY*4im9)z-1KtyrDbX|1)L+SYY!YdhA??|+u}ZXO_@*s$d2$N!$? zJIi;z^PT0M`%=@=*q%%!m#5>E<15FEiPzLs$0rw;l=M1qP*q)k%QOE6l{{9(6c7Zn z%)ed#>5u#ppPS2yo$id1n^BGs~@HPK$&mYPSrOyH?*Y_?eTT-#$;0>J~EYTT$xCZ zs&8v(PshvZ*S54au4*CUC5@?$p5@8*)unqvMcUevE7}`Yt13NFgWizVKzANub>dHW z4&-qtbO5C19*~>{&`HD>fQ3*#vfu=&!py`lAEa@uWfsn*1ksS<4 zjQyYi&|%OZ=x}H-bOdxHbQBbahCu3;VNek?92x-~4UL3GK{P2C1C52oLB-H`s01p7 z%Ag6*BxoX34o!w+FZ)CLg4>q;SKmeLzx--zF76BM-{0Ht&m8~KpIx;9|3U}Jq{@u; zg8D*-LR~fhA?yaXyZZm+#JLY2x#@(&@iVU;fGDul%C@m219JuujYFF1Hs*V0YR7-2T`4OtwJ#w1Inp9QM~Leo+0tzshrO zYxg^^zVj;6e6UQLtjekNRUHod>fGsI{V5#w)#$KqK8Jl(?yzsRJ?xuf4*M!Ihkcdi zu&>S?_SM?MzEfISEA3%lWnFy-PqjJhBhSq7W6+6*j?rV#P7z0Kd$KLjo^DB`>Q79h zl55%<6RF~;bUH;i9EAE>alq?pwI|8SYw8{)Dt}hq;c&fEw8{=Ljxg-*=Pk&?(FBBhTxxv;wsH`h0Eh@ngu6WccH@;l)rGzWr z`#{}w8VcU!>M;mDyb-=2NGDdeDNOAV6$jnBe}CrhAHDaqpU!(=ctPH`zO-qn;%kB` z^De17d3KL2Tq`+nj&0;H$;qKemBK|wHt)LfpLOL2l0)U1Rp~YDMjchpko;bQ#N*Sc zeaeTkH-mc97HxlSJ$G0CuRQq88;*Oie8te$dNkL}DBa}ixpOkHy5VK=2K85;e%iD> zW?rkRP0}Uxpl*dJo)r(k0zw{nKdLuU$9>k}2f1%DQ zUwQSNun)+4z)-^DU0|s9gOnMTf>2lnLZRMS@@^2m-UwQ$B=Ekx7rYl5X`Tyt^Qd^= z9@|H;Odm(vGlRTT7v7K34s*xOv=U}JL(RcEkJLUh`j1?+V+}M~-w(q2Uwzi1+ zn=<^^{ev5Kl7U=w+)DWWNWJUxCD2%S{k_%6OCWpmTcvMRShRHt29Qlaa9fJ2GvD< zR6?1HADT99V!>lEjrUz~dqe*Zx#61oc31yn|77lr+ZWbr(&&*=B5>)l)yohMj#<^Rmr zlQYlgK6U5ze^xhqS#O{x+W%R-dw=^ss~3C5{?GQ&``iCnImgVpTw^r44z0j0F~0Pz z)=uyL;-oK!=0k1JrO<8A1JJXO#w%dgDOD}0wqzHcIzc!86KlsoHIdlGC z&R0tCNteoYWItf`_QR>0;qx}*R5cQJxv80bCSAVjVWQ@>wxnAcR<(RQQJHj0Af-~B z?*g@U7Ozk5>r5WeI+yq}queu-9gP{X-)q)?lCvM%_en@NzsJ$D_CYWBu`OF%l~~@u zF_ew7Iv|gDd^#^r_J~n=X3pRw&-XTm?AreCWnb@I+W%Qwl)L}4ZQJ(P-P!%0t}WE=sI3V?DaBDaazP?pY+wDS zI3vpLH|H(1wtrW~y==esBi-}PT^wCIdV94&%8Q#}l+!*Fl>gsotO+_X(U@rYSfYkc zl6Y@m^nVkXE+vt8d^*`HDS39xbeyvkud}e6cr!ng60ULeNAev>zQf7)7p{Eqsa9D& z-h-W)PNYsuG&DKBDk6*E`#%2e6ry?$g-;meTW#CmTGT|D_B}>4&3hUDDn~YhDs(81 zZ?qZ+GV`wNwaB-#p2Ye_=KvOg;#Xa?4~*6&u`bKIb8A3r+sVVso!%zRSH`%B7R6|7p!7bC>iq=a{Rr2&<%~$Zl_60X8~T3h?RE1SV>PW! zRvB^x<=6Up*Ckq;ykZikI@VIZCK9P1eLCq7GSQi=tE17)GQTzv-=##3g>Me&&d6z7 zmM;ie8LUdbnZS{xA3^$dmtN(lFQe&=t}aTdrWrl(F@vb-Zwp2lmGe|O1pql^IV z78T$eLnZ&4UX~}dH8rFYb6ZkuPtUY%yq@}{;S-Nfr#8Z(eu&C4vo=+{ipq)4jB~|n zZ=4f9Nqtd9xZ<@A%88$>_z5mvb}T2}WV?mPM`&Cz{vSsA25*FqzHC^Xn9qf* zbh902p0^yHxuoqwL)4$D)4TDC?|YP20-waY!0~BJi$7ae-h)TRv@h>A_&!Uzq~nt< zQ9e<=HK|0qohP~#P9gnG&?M5_5#f=J=kgHLLGL7+Deyc&_+UCh^?SGSyj_dt%haW2 z7`dRU9m>=fuaYalCLX>H@!WjkJk{=hyggK%+NjfT(!L$36C&-vD;dnI&9>*g*u<%B zopz}^pjjvZIEP5{Pe=Jo(6V%E9k=P`wJzb#UE@k6QGeYJF3as?f4~ZI?ZYVf)~SwH zP`@A1e)0HpYMXQs*=)0IikIHy#81?CEhSv>%niBmX1x0GE*;9@H}QVFONX`h~OVQ+l69vZep^-fg?GRT`k&1iUIa!o70yh_m^IWem<}(ge%MV@Ifi}8WykttdW3A10@cx4ecaPa~BtN&k0iV_# zaxwlJV;^P5gH`UC_J(RJO;^$8EScbdK=(6r zCuxMiUaU;~eW>T@RF$jp{n_bq{9Dx7IDS9Dl+SM{gy?w?2lWjPWt#FRGaQG17&rwi z0xQAc-~w<2cp7*#*aVIQli(=u;~;enF9E4T_(^a)cew5bOYuJnmVwWJ%$?z@Aai8+ zcaXhY*c-td10Dr(_bMz0`OS!M4yZd*CxWxU<=|{^Em#3w0aC~Cb6^$tC2%hIO>iE# z1^f{B8}NAWZ{U2eXP)lu1>s>JZ3|1m6RGbEa1s9F!IQux;K^VccnWw9cq;fA5Ltw` zf*%HT2jC3wVQ>k!1zZZg1U7(w0hfV2yKzqe91Nms;W)4voC9Ll!a8s@_z|!bJPSm| z;d-zQyaD_ucsJM%J_ddad>UK}z5t?!;om{FN?~vMp1ui(foFlG;MrgWcn-K2JfHuY z!3*)92VMlO2QLOUg7j(lb@1{axZn|xz73xSKLx%FUJ3pUTn`?E@wf`q9{tncaPVqy z7PtXi0A2$&f!Bhoz|VmffY*T=!0W-=!Ow&Dfj5AUgExZDfj5D#fH#9$gx>=81#bn5 zz}vt{;1|FO@OE$kcn8=3ZUkGwJHd~GUj#1zzXV7@Ui%7pgB-ER1GQ5ddTOY z^p#MQPkD-G45T{hu9DiLa+Fr}R6cdkjn1!lrJoHcy=Wn%GUq|1kk3k))ZU$m$p#t6u+Dsk z*wgf1m9f33iPQ?0Wn=FGWn?XYb?=c6bzXr48@TisCS} z0(TfIo+Ai9Ow!KyuOw_XbUHM~q&X~z!#@BTWzzL`xA$ybjV4az6$a;_kG)MAtFNk) z^w)-&2>$W&@+O|`S!GQ9Wc0EZsD6;Ep=~sgk!E$L7CaRH383`zL@*9Y7DK^0{A%SQ zun5#VRRU_BlFlgI1c&9I=B=#k#!}aKrmowozpr~wDrV0rW9HnlC;9b*-iG8Bleg-A zI;hs8bKxQ25>Rzr3aYLRpn78&h|UF#p!7BYq64PRw9_E%Gjk;EGk)4-=1SUO=1S># z3w%xBM?ms0=~g&w23Hbp+kAv+Ya#Z|>dH9!@f4`S_(^J<@4Fqzqo|udZ;Y9~w)B;`sTZD1j&zUU8r6#oFQ9h5v$;0!PgR)QY`)o!I%JJ;e@JJ*3~pXTu8;91~R z;Mw4(L8adSo`e50;JM&u!Sld>bMefxCLQx^5c2~w}i#xx0FOUB?{QnBh2R{kwPNdQ| zf}g_Q1YQYV39bik1Zi`)3A`Ho0Z5y}XF&1&9Hi~xb0BRGhvfwUZ4bwS*MQ?dtu@Aj z*MT!Z@l}G?RL46Xx}{%r6T{8|Iv3SJG~2HpgI0lXQ!9khBk z8maiT`XqF%8XAc8&?tz8>zjfV8C@)7=CC%VuSutWw&q(vn7%<6h@~nv=>|Ez{`kc& zH^R-1h0OO`=Wz;Q6QNq@e5lOu*fFB>kDtH=rFUYvi z&+Zvr{u;O$Kl&X007Rd|pMm#*zX87qN{8Pb;QR&PgZK{w9|Cpo@-R3Qd<2{TeixhtJ_^==kAVxo?}1iV)H<&d(uZPb z5;PN<4P6M8LSrG>uPKo2AMtse=}$lTzW4cgEM#?Kbw>7olzEQ!mBy$&SB;r7R`t~Y zs2|~S|4Ci-_yjl*luQl>k#jg0{2_QW_#~+H%a1{6)KlODhgG2Xs-3?E+(P^U@M-XL z@TXwCi*E##{sM;=g3l079fD^;tuOuy90$_RX8rJU(8|>6v(;HU_UwALA0uTNIjDVF zYijP+db4*h)Xn#bvuosKpw{&9j81F6Y0p5}l|JW{+{?-z(0VD zqu`GqdLO(DJ_No3J`TPLB2&YU4E6m%hztY9Nl2Ocw#n%B|AIqkFXJT~1u|aDI_@u^ zmACdsQJKq53?yt<3Fo1HiYzejxLf(cyQ%q4%M=9_>skPsUeFprwGIP+-u6n<<< zh@J<1LG_X9@w`L&#pFjDgF^`)OhXy7;V`g2sI@lpu5xr>D4lP9{t`a8zdeJWqY>xoOOt zp=$h$fOJkHcNlfmyJhL&kP69{df+w-q5{ z)F5NZl+Tz6N(q!6f{eD<*@a3D^^bvqAPmVFjpm zRXLmkP9@xqJK3+5Pzo9fXeJbkc-{_AIi1XZ3S8s05N@PiOjh2B^51nf44ay7DGreIS}@ zoWAXmYlapPxC*)m+6Zliwm^S`4n}E;pjptVP#U@d+6Zlio`>Fo`jOvQXfCuAS_kQj z?JnpM==q%I@8T!>Al6;)9=7jx6fe$rls%Fe;i357&8ZHKg_M#|N2mB8bYY;f^Y{Om zGmRVMP{3TCpV!yPxu&5-c1vgU;@bczt&e}N-znwZC)2xtUA-rU__-(6@f!n;GmUjy zznG~jUfogAxq@-MB~zXb0cHD zLG6#4p){n%TmflryA8SrdI0(!q%n}|^m~7U3dX-ai@2LmoI61!JJad&M4sh;+J%4F zg@4qA|JC^)bn!!6_{+{eoIH69Ry+SZmwt^4@8!Z-PndN2$!w*+)5ZVQ;e$TC!(X|4 zzTo&~yKv2e;{T-cYYi#?Y0j@Tq5Qvc{$BK#{QX^iI!luOD(Ao0`E?Gj@CJwMV~wA^ zfWf_W{8Rl7Zb$Y>GRTv%Thn14g1CiU{ukNjI=aQkGdJA(qw%WCdvUYGl*{bu5)bmW zQL9}qWltUd2Vu~>eMgnq_4UToncwNl=S|tdnlVe}w5Hq7TvD5CX-&)i4L9);N**6l z>jSU>!Kg@B$t14Jl$4g~o{CK?+m>g3uwv^U?(n=ejpJo0!TE&AGo)WEZ}wv+&tu~p zPkEL{XY6@F#}AJ@kBxIY7&Bjv+SAR{G5bM-=dp2)hfUc4SGNZYkNcQ_XP@4NyYy@f ze0t>*(*;%c(Tq=T!)>fLKod*f5tC86WA|p*zsA zz+POS$oJ)Zy>#z37Pzt^a@L*JSkUpZtLL$Cjt4pWzR}&ySkUoOr{}S8j)#r1ZtNjer+Ig z-_z)f^53tVo$2=BCTBj5pp9NvtbK6060x&(j7KiqM|ir%znv5Jw(+mA-#xG!JKz5{ z%=UjNw(?ZcM5!77NGMLi%@~BaN83I3Yb+>cVJC_R*V;nonV4vHbLM@tIWa(;%sWo) zu`qFFhpLHRdoK+(odsZ$bx$nwTQe+Kw)xvK0}0n2P3xJ%p~27*(2>wlP#hWp4TXk5 zMbL0)1Voih8%BYnp)t@{XgpL5=?qExHm2u&+R4VREhvpi?)1Z@eS@PPJrs#-pkH;T zK{9z3^lktTk~t?%n+@=f{p&E<-;Vcw8-Ga9tPaLC_t!d&K7a6J7s9*e$nV0M56Vh| zipq&4$COo98y=sR>Zt(lH<9edH@LcK|I7cukJddPRWhza-r3((E%vL@R8U!7T2@^? zr^2T9d2hR{-e&KulvhA1YiZ+Y+ipjsEdRTt!R(5X(u&IJQe}X9_pMTKCCi$Atbilupp{u<_mbH)j4* znomGI$m2Sw1inuBwO1{FOFR4ua3@xy5fjrHzp0%yK->8d>CUc|H;bL$QO>@n z@$*|+SI%o)o(#t8(>V9HA)EPtInln1j}cbxA%83~`dj3k{pTy&cJyQEdr$>AHS7BO zpWFRIr1Yf!>2OWN+O)_x>_dP5Q~RZ6=zPXHTfJbKTRp$q-+vlOI=}au&PHkxGKuc} tyn);vsywZgj)i7GEGfJG4k$9{3^%hg3hgShO9EXI=#oH}1Ug*;{|}|=LTvy5 literal 0 HcmV?d00001 diff --git a/Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS/obj/WinClient_CS.csproj.FileList.txt b/Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS/obj/WinClient_CS.csproj.FileList.txt new file mode 100644 index 0000000..8f7db2b --- /dev/null +++ b/Chapter01(Socket)/Part 2/WinClient_CS/WinClient_CS/obj/WinClient_CS.csproj.FileList.txt @@ -0,0 +1,8 @@ +obj\Debug\ResolveAssemblyReference.cache +obj\Debug\WinClient_CS.Form1.resources +obj\Debug\WinClient_CS.Properties.Resources.resources +obj\Debug\WinClient_CS.csproj.GenerateResource.Cache +bin\Debug\WinClient_CS.exe +bin\Debug\WinClient_CS.pdb +obj\Debug\WinClient_CS.exe +obj\Debug\WinClient_CS.pdb diff --git a/Chapter01(Socket)/Part 2/server/server.sln b/Chapter01(Socket)/Part 2/server/server.sln new file mode 100644 index 0000000..c397be3 --- /dev/null +++ b/Chapter01(Socket)/Part 2/server/server.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "server", "server\server.vbproj", "{02784E52-3E62-4C83-A989-2C63C2368170}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {02784E52-3E62-4C83-A989-2C63C2368170}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {02784E52-3E62-4C83-A989-2C63C2368170}.Debug|Any CPU.Build.0 = Debug|Any CPU + {02784E52-3E62-4C83-A989-2C63C2368170}.Release|Any CPU.ActiveCfg = Release|Any CPU + {02784E52-3E62-4C83-A989-2C63C2368170}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Chapter01(Socket)/Part 2/server/server.suo b/Chapter01(Socket)/Part 2/server/server.suo new file mode 100644 index 0000000000000000000000000000000000000000..95dc293c6bd5a03a7aaf21a2ab5b46e0faa8d8bd GIT binary patch literal 29696 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 Z%h2jv&`BDxaoh^l%n5LK+}F73FAiz03Q} zJ4Ih^4Uga4VAMrYzA?LWuGo@_l%A&}li3p5W$u>f_Al&c`eToCfJx5-_iAAyQT%(a zeC*vel&52GWZ`xEEQ>Uv$DTUzkG1euJsyJEt(#8@@rPrFb`ou2ZOAf;mjM2%X>-Z~ z;U4|T`=q>%Rr{uCf_naQ&UKjX^)`{}sr<$oH`I4J;*oa<=Bl`5--LIojivqAFsnQftyEqwHD;9i>v%yW6vnx-I9P7kf(g)$OBB;y^ss zi#0z@03Fbqy}lOjRS;KU+-q}J-<_yC_O03L*3R00YyYPD?+!~tdd}zmFTaR6htjEC zxAt#UkCW2zNDj8>Sa0V3t&`pVbMn6NAP(J%-`5_Ox%!fSD}LVz8dd)xs1?88ir-hC z)9#nv&7dzyYF=g7YY&xQ^JvBIb9U*^o>$+a(2C!0#qZNY-THEp`sziqt-!5VQ&PJq lxaajQtYV$)H 0 + + '---do not scan more than what is read--- + If i + 1 > bytesRead Then Exit While + + '---if LF is detected--- + If data(i) = LF Then + messageReceived = _ + partialStr & _ + System.Text.Encoding.ASCII.GetString(data, start, i - start) + '------------------------------------------------------------------------ + Console.WriteLine("received <----- " & messageReceived) + If messageReceived.StartsWith("[Join]") Then + '====client is sending its nickname==== + 'e.g. [Join][User1] + '---extract user's name--- + Dim nameLength As Integer = messageReceived.IndexOf("]", 6) + _clientNick = messageReceived.Substring(7, nameLength - 7) + '---tell everyone client has entered the chat--- + Broadcast(messageReceived, Nothing) + + ElseIf messageReceived.StartsWith("[Usrs]") Then + '===client is requesting for all users names=== + ' e.g. [Usrs] + '---get all the users--- + Dim allUsers As String = "[Usrs][" + Dim c As DictionaryEntry + For Each c In AllClients + '---get all the users' name--- + allUsers += _ + CType(c.Value, ChatClient)._clientNick & "," + Next + allUsers += "]" + 'e.g. [Usrs][User1,User2,etc] + Broadcast(allUsers, Nothing) + + ElseIf messageReceived.StartsWith("[Talk]") Then + '===Chatting with someone=== + 'e.g. [Talk][User2,User3]User1>Hello everyone! + '---get all users--- + Dim users() As String = _ + messageReceived.Substring(7, _ + messageReceived.IndexOf("]", 7) - 8).Split(",") + '---send to specified users--- + Broadcast(messageReceived, users) + + ElseIf messageReceived.StartsWith("[File]") Then + '===FTP request=== + 'e.g. [File][User1,User2][Filename.txt] + '---get all users--- + Dim users() As String = _ + messageReceived.Substring(7, _ + messageReceived.IndexOf("]", 7) - 8).Split(",") + Dim index As Integer = _ + messageReceived.IndexOf("]", 7) + 2 + Dim filename As String = _ + messageReceived.Substring(index, _ + messageReceived.Length - index - 1) + '---see who initiated the request--- + Dim from As String = users(0) + '---remove the first user (initiator)--- + For j As Integer = 1 To users.Length - 1 + users(j - 1) = users(j) + Next + users(users.Length - 1) = String.Empty + '---send to user--- + 'e.g. [File][User1][Filename.txt] + Broadcast("[File][" & from & "][" & filename & "]", users) + + ElseIf messageReceived.StartsWith("[Send_File]") Then + '===send file via FTP=== + ' e.g. [Send_File][User1,User2] + '---send file from User1 to User2--- + '---check send to who--- + Dim users() As String = _ + messageReceived.Substring(12, _ + messageReceived.IndexOf("]", 12) - 12).Split(",") + + Dim RecipientIP As String = String.Empty + '---find out the recipient's IP address--- + Dim c As DictionaryEntry + For Each c In AllClients + If CType(c.Value, ChatClient)._clientNick = users(1) Then + '---send message to user--- + RecipientIP = CType(c.Value, ChatClient). _ + _clientIP.Substring(0, _clientIP.IndexOf(":")) + Exit For + End If + Next + users(1) = String.Empty + 'e.g. [Send_File][1.2.3.4] + Broadcast("[Send_File][" & RecipientIP & "]", users) + End If + '------------------------------------------------------------------------ + start = i + 1 + End If + i += 1 + End While + '---partial string--- + If start <> i Then + partialStr = System.Text.Encoding.ASCII.GetString(data, start, i - start) + End If + '*************************************************************************************************** + End If + '---continue reading from client + SyncLock _client.GetStream + _client.GetStream.BeginRead(data, 0, _ + CInt(_client.ReceiveBufferSize), _ + AddressOf ReceiveMessage, Nothing) + End SyncLock + Catch ex As Exception + AllClients.Remove(_clientIP) + Broadcast("[Left][" & _clientNick & _ + "] has left the chat.", Nothing) + End Try + End Sub + + '---broadcast message to selected users + Public Sub Broadcast(ByVal message As String, ByVal users() As String) + + If users Is Nothing Then + '---broadcasting to everyone + Dim c As DictionaryEntry + For Each c In AllClients + '---broadcast message to all users + CType(c.Value, ChatClient).SendMessage(message & vbLf) + Next + Else + '---broadcasting to selected ones + Dim c As DictionaryEntry + For Each c In AllClients + Dim user As String + For Each user In users + If CType(c.Value, ChatClient)._clientNick = user Then + '---send message to user + CType(c.Value, ChatClient).SendMessage(message & vbLf) + '---log it locally + Console.WriteLine("sending -----> " & message) + Exit For + End If + Next + Next + End If + End Sub +End Class diff --git a/Chapter01(Socket)/Part 2/server/server/Module1.vb b/Chapter01(Socket)/Part 2/server/server/Module1.vb new file mode 100644 index 0000000..3a6113d --- /dev/null +++ b/Chapter01(Socket)/Part 2/server/server/Module1.vb @@ -0,0 +1,15 @@ +Imports System.Net.Sockets + +Module Module1 + Const portNo As Integer = 500 + + Sub Main() + Dim localAdd As System.Net.IPAddress = _ + System.Net.IPAddress.Parse("127.0.0.1") + Dim listener As New System.Net.Sockets.TcpListener(localAdd, portNo) + listener.Start() + While True + Dim user As New ChatClient(listener.AcceptTcpClient) + End While + End Sub +End Module diff --git a/Chapter01(Socket)/Part 2/server/server/My Project/AssemblyInfo.vb b/Chapter01(Socket)/Part 2/server/server/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..30e1c1e --- /dev/null +++ b/Chapter01(Socket)/Part 2/server/server/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Chapter01(Socket)/Part 2/server/server/My Project/MyApplication.myapp b/Chapter01(Socket)/Part 2/server/server/My Project/MyApplication.myapp new file mode 100644 index 0000000..76de46d --- /dev/null +++ b/Chapter01(Socket)/Part 2/server/server/My Project/MyApplication.myapp @@ -0,0 +1,9 @@ + + + false + false + 0 + true + 0 + 3 + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 2/server/server/My Project/MyApplication.vb b/Chapter01(Socket)/Part 2/server/server/My Project/MyApplication.vb new file mode 100644 index 0000000..0154603 --- /dev/null +++ b/Chapter01(Socket)/Part 2/server/server/My Project/MyApplication.vb @@ -0,0 +1,12 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Chapter01(Socket)/Part 2/server/server/My Project/MyResources.resx b/Chapter01(Socket)/Part 2/server/server/My Project/MyResources.resx new file mode 100644 index 0000000..3e18af9 --- /dev/null +++ b/Chapter01(Socket)/Part 2/server/server/My Project/MyResources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 2/server/server/My Project/MyResources.vb b/Chapter01(Socket)/Part 2/server/server/My Project/MyResources.vb new file mode 100644 index 0000000..a8884f3 --- /dev/null +++ b/Chapter01(Socket)/Part 2/server/server/My Project/MyResources.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict Off +Option Explicit On + +Imports System +Imports System.IO +Imports System.Resources + +Namespace My.Resources + + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + 'This class was auto-generated by the Strongly Typed Resource Builder + 'class via a tool like ResGen or Visual Studio.NET. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + _ + Module MyResources + + Private _resMgr As System.Resources.ResourceManager + + Private _resCulture As System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Public ReadOnly Property ResourceManager() As System.Resources.ResourceManager + Get + If (_resMgr Is Nothing) Then + Dim temp As System.Resources.ResourceManager = New System.Resources.ResourceManager("$safeprojectname$.MyResources", GetType(MyResources).Assembly) + System.Threading.Thread.MemoryBarrier + _resMgr = temp + End If + Return _resMgr + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Public Property Culture() As System.Globalization.CultureInfo + Get + Return _resCulture + End Get + Set + _resCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Chapter01(Socket)/Part 2/server/server/My Project/MySettings.settings b/Chapter01(Socket)/Part 2/server/server/My Project/MySettings.settings new file mode 100644 index 0000000..0bcb11d --- /dev/null +++ b/Chapter01(Socket)/Part 2/server/server/My Project/MySettings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 2/server/server/My Project/MySettings.vb b/Chapter01(Socket)/Part 2/server/server/My Project/MySettings.vb new file mode 100644 index 0000000..3d12c6f --- /dev/null +++ b/Chapter01(Socket)/Part 2/server/server/My Project/MySettings.vb @@ -0,0 +1,38 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict Off +Option Explicit On + + + +Partial Friend NotInheritable Class MySettings + Inherits System.Configuration.ApplicationSettingsBase + + Private Shared m_Value As MySettings + + Private Shared m_SyncObject As Object = New Object + + _ + Public Shared ReadOnly Property Value() As MySettings + Get + If (MySettings.m_Value Is Nothing) Then + System.Threading.Monitor.Enter(MySettings.m_SyncObject) + If (MySettings.m_Value Is Nothing) Then + Try + MySettings.m_Value = New MySettings + Finally + System.Threading.Monitor.Exit(MySettings.m_SyncObject) + End Try + End If + End If + Return MySettings.m_Value + End Get + End Property +End Class diff --git a/Chapter01(Socket)/Part 2/server/server/app.config b/Chapter01(Socket)/Part 2/server/server/app.config new file mode 100644 index 0000000..f636923 --- /dev/null +++ b/Chapter01(Socket)/Part 2/server/server/app.config @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 2/server/server/bin/server.exe b/Chapter01(Socket)/Part 2/server/server/bin/server.exe new file mode 100644 index 0000000000000000000000000000000000000000..1f61e5c0483de552663ec5863343a4b434adfaab GIT binary patch literal 28672 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 literal 0 HcmV?d00001 diff --git a/Chapter01(Socket)/Part 2/server/server/bin/server.exe.config b/Chapter01(Socket)/Part 2/server/server/bin/server.exe.config new file mode 100644 index 0000000..f636923 --- /dev/null +++ b/Chapter01(Socket)/Part 2/server/server/bin/server.exe.config @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 2/server/server/bin/server.pdb b/Chapter01(Socket)/Part 2/server/server/bin/server.pdb new file mode 100644 index 0000000000000000000000000000000000000000..e3580baea2d03dfccb8e363b0e56592d2a867364 GIT binary patch literal 46592 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 TBcLY!&!}P9UAq3eeA)j4ZC9R* literal 0 HcmV?d00001 diff --git a/Chapter01(Socket)/Part 2/server/server/bin/server.vshost.exe.config b/Chapter01(Socket)/Part 2/server/server/bin/server.vshost.exe.config new file mode 100644 index 0000000..f636923 --- /dev/null +++ b/Chapter01(Socket)/Part 2/server/server/bin/server.vshost.exe.config @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 2/server/server/bin/server.xml b/Chapter01(Socket)/Part 2/server/server/bin/server.xml new file mode 100644 index 0000000..83af37a --- /dev/null +++ b/Chapter01(Socket)/Part 2/server/server/bin/server.xml @@ -0,0 +1,11 @@ + + + + +server + + + + + + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 2/server/server/obj/Debug/server.MyResources.resources b/Chapter01(Socket)/Part 2/server/server/obj/Debug/server.MyResources.resources new file mode 100644 index 0000000000000000000000000000000000000000..06c24d06c1cab750788146ce052b37770f3fa530 GIT binary patch literal 180 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 literal 0 HcmV?d00001 diff --git a/Chapter01(Socket)/Part 2/server/server/obj/Debug/server.pdb b/Chapter01(Socket)/Part 2/server/server/obj/Debug/server.pdb new file mode 100644 index 0000000000000000000000000000000000000000..e3580baea2d03dfccb8e363b0e56592d2a867364 GIT binary patch literal 46592 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 HQykS#5{2ov literal 0 HcmV?d00001 diff --git a/Chapter01(Socket)/Part 2/server/server/obj/Debug/server.xml b/Chapter01(Socket)/Part 2/server/server/obj/Debug/server.xml new file mode 100644 index 0000000..83af37a --- /dev/null +++ b/Chapter01(Socket)/Part 2/server/server/obj/Debug/server.xml @@ -0,0 +1,11 @@ + + + + +server + + + + + + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 2/server/server/obj/server.vbproj.FileList.txt b/Chapter01(Socket)/Part 2/server/server/obj/server.vbproj.FileList.txt new file mode 100644 index 0000000..c15a50b --- /dev/null +++ b/Chapter01(Socket)/Part 2/server/server/obj/server.vbproj.FileList.txt @@ -0,0 +1,10 @@ +bin\server.exe.config +bin\server.exe +bin\server.pdb +bin\server.xml +obj\Debug\ResolveAssemblyReference.cache +obj\Debug\server.MyResources.resources +obj\Debug\server.vbproj.GenerateResource.Cache +obj\Debug\server.exe +obj\Debug\server.xml +obj\Debug\server.pdb diff --git a/Chapter01(Socket)/Part 2/server/server/server.vbproj b/Chapter01(Socket)/Part 2/server/server/server.vbproj new file mode 100644 index 0000000..e0d1e5e --- /dev/null +++ b/Chapter01(Socket)/Part 2/server/server/server.vbproj @@ -0,0 +1,84 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {02784E52-3E62-4C83-A989-2C63C2368170} + Exe + server.Module1 + server + server + Windows + + + true + full + true + true + bin\ + server.xml + 42016,42017,42018,42019,42032 + + + pdbonly + false + true + true + bin\ + server.xml + 42016,42017,42018,42019,42032 + + + + + + + + + + + + + + + + + + + + True + MyApplication.myapp + + + True + True + MyResources.resx + + + True + MySettings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + MyResources.vb + My.Resources + Designer + + + + + + MyApplicationCodeGenerator + MyApplication.vb + + + SettingsSingleFileGenerator + MySettings.vb + + + + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 2/server/server/server.vbproj.user b/Chapter01(Socket)/Part 2/server/server/server.vbproj.user new file mode 100644 index 0000000..e1d33e3 --- /dev/null +++ b/Chapter01(Socket)/Part 2/server/server/server.vbproj.user @@ -0,0 +1,7 @@ + + + 8.0.41115 + ProjectFiles + 0 + + \ No newline at end of file diff --git a/Chapter01(Socket)/Part 2/server_CS/server_CS.sln b/Chapter01(Socket)/Part 2/server_CS/server_CS.sln new file mode 100644 index 0000000..d0aa25d --- /dev/null +++ b/Chapter01(Socket)/Part 2/server_CS/server_CS.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "server_CS", "server_CS\server_CS.csproj", "{CC62E1D7-8563-4AA9-A114-7D06FE082B32}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {CC62E1D7-8563-4AA9-A114-7D06FE082B32}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CC62E1D7-8563-4AA9-A114-7D06FE082B32}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CC62E1D7-8563-4AA9-A114-7D06FE082B32}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CC62E1D7-8563-4AA9-A114-7D06FE082B32}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Chapter01(Socket)/Part 2/server_CS/server_CS.suo b/Chapter01(Socket)/Part 2/server_CS/server_CS.suo new file mode 100644 index 0000000000000000000000000000000000000000..dc93316f7ca5e6161fffa58f637f698f1efb735c GIT binary patch literal 15360 zcmeI2U2v3F8OP6t7E;?%TO!qpbVaNnP27Y40hF3-0t8Z^ECjTxHRP)yn-8-g0Sop+ zYinn!jyI(jj&??8+WIlpEA>viXq~ar8>chgXm1>^Y;~N`VI=YQKW9(&d-vUJAVfGj z|M&B}=Q-~=&&U5f@4j{M&cD3$+CA@>oU+R-Gc&WdnB^JQLmUgXyx*7_4uqN6*;#kd z7!GfgB{Tw;>FZ5Q-aX)Ep!r?_YQZhwHt;@hD_99`2X_Fb-+U0<3GM=`Kppr1SPkw5 z9|CK@hkhS>^UR--k3kfcMU%6BfTd+$=`>!D>- zdg7z5<{>1GnUkgy=>r^fnA4@2$h)^159H-*pI4#C1?jKK5z}LmX4rI@A@-BzDBFJe zj@^<@9rd;6DvP`{)X@&WP%9|6A2Fvn7Zb>L%Q zJ@`1d4}1b_0IK`R)c$_<^`HT0UN!^YRx8KNU<=p^wt*I~9qa%*!KcAzz%K9r_$-(N zZ6FHTK?m3k_JF;h6YK-~K^J%s8~_KwA@C453}WC2I10MKF>oAw4tyRw4C3Gm;EUi9 z@Fma#PJmwU6`&a(0E1ux41tqi7$kt+ca;4Y7zbZYUGw8`it{Nj4P;4YfWLQ^LaniQffutcTH%^ZprS3Rqsu?zoAWA!ZoQJWknCfgI4kcW70#9d+EF0seB2~!~e_o z$ycf5%5Sry*~3_j^ZuGE&0_JgVIJ~trn!Hnn#`52_$R-wc?&WF_aR^JBP-M-q?#?c zQ(Zs)!^oO68_^``zy!x()5MvJf>Yd`z*j}l7J0AyBH0U3)Q}q#fA*TG|oUn$P=RP5qZ<^)jEbO+~qdDk)XUYOb1VSq+sr zS#Clhs`S}vt4zI zOQy~rLg$j$K&eO+nMeFnj$qrI{bw_#O!EF@W*#K`nX#JlgyEvSBAZLgDTe*_0l5@M@>AhT?O1=LOu;7R zE^7U!_LPGODt{w&wMMZe3Ds~*@Us}FNNgWNQjEk(hq6iRG*?7o9px2?RiKu6%g8fH ztd{p8qDnG|6sJk7Xlk0o_Vc7Cu_A)GB(|4!)V4^hD1eBoCo$vHE=FQ{shvw~+%+df zv@?NZ=VGx9>YwHJ7&f<+$=Qb0$qrk1+XyzNV_D{IYqzr27V7Dmtg;zPY{4EQ*l;uF zdioqA-q^IcdCS%};@@_@0RLe<$jjXNDG)b%^T*A1y*u;wS$P(5LZ9&y=q6R;AXZ9>1rC7ifPNZ(sJGUAycZd1%>PN@!=rV8p z`X9%iUH7YwpX~T!@A-e9R?3GGGc5yk7iKQ3?fT*O`hNDp+IP1Xt7%OB^Ic}*cl%m5 zoq+*lqY`w&G(rOQbof?VG;Gh3Kx zy7A84YW*+YqV;sp_>;-My^j(P9;Yt~5n6LPZy~;0x=6lqxvMLXzlplF_*Rvp*srAa z*pSjU=QEvOD#rTVv)U4WD~|t}@4uH(@3XQ;dFKSZQLaaRL!)rz9W)>7`Z&ne?)Fjx3j0x{O)=l1q6u z(QTjGax~L@SHD#DZL7;77aE7k^e^8!rGHNI+%||NG*KxcqDwhut!)_YAul{_S%=n~ zgZLwPz;dNp|69uc$xh1^^3NfyXYU3|DQt~xU<%;B2I{qUxx+W!G9xne| z!TjyO=ZXtye$+1Jl*`IpX1R4vZ52Fb>G^?DqoL$L-4z~0SE6|Y(0~xr%ZzySga0PuNet)1)W4TrNW#(Y0RFv?#C>f4QWiCyN<`Ccw}hr=<3wy=wB?(%8sE= z2e9LVFsT^Ymj89Mf%_eJ75$6AeNWXYUu&FUu1%4q6w7ZQO&P(@G=VrRok3@{`X1qq z`;UM!eF=Ud4ublz>#Fv{e+MYk6aCNU>WxVDNcdS<+|ke%knDN$`?!| z(|>#Qktb;WqmQ~PQxjK8zP?qKD?a}breaX}=cw!R|Bd!jZ5u1A2rDrC!J-Wgr0l29 zzeY0huZ8np`dU_r)_zQk!gR!R2D7`?y#%djfd2X bytesRead) + { + break; + } + if (data[i] == LF) + { + messageReceived = partialStr + System.Text.Encoding.ASCII.GetString(data, start, i - start); + Console.WriteLine("received <----- " + messageReceived); + if (messageReceived.StartsWith("[Join]")) + { + int nameLength = messageReceived.IndexOf("]", 6); + _clientNick = messageReceived.Substring(7, nameLength - 7); + Broadcast(messageReceived, null); + } + else if (messageReceived.StartsWith("[Usrs]")) + { + string allUsers = "[Usrs]["; + + foreach (DictionaryEntry c in AllClients) + { + allUsers += ((ChatClient)(c.Value))._clientNick + ","; + } + allUsers += "]"; + Broadcast(allUsers, null); + } + else if (messageReceived.StartsWith("[Talk]")) + { + string[] users = messageReceived.Substring(7, messageReceived.IndexOf("]", 7) - 8).Split(','); + Broadcast(messageReceived, users); + } + else if (messageReceived.StartsWith("[File]")) + { + string[] users = messageReceived.Substring(7, messageReceived.IndexOf("]", 7) - 8).Split(','); + int index = messageReceived.IndexOf("]", 7) + 2; + string filename = messageReceived.Substring(index, messageReceived.Length - index - 1); + string from = users[0]; + for (int j = 1; j <= users.Length - 1; j++) + { + users[j - 1] = users[j]; + } + users[users.Length - 1] = string.Empty; + Broadcast("[File][" + from + "][" + filename + "]", users); + } + else if (messageReceived.StartsWith("[Send_File]")) + { + string[] users = messageReceived.Substring(12, messageReceived.IndexOf("]", 12) - 12).Split(','); + string RecipientIP = string.Empty; + + foreach (DictionaryEntry c in AllClients) + { + if (((ChatClient)(c.Value))._clientNick == users[1]) + { + RecipientIP = ((ChatClient)(c.Value))._clientIP.Substring(0, _clientIP.IndexOf(":")); + break; + } + } + users[1] = string.Empty; + Broadcast("[Send_File][" + RecipientIP + "]", users); + } + start = i + 1; + } + i += 1; + } + if (start != i) + { + partialStr = System.Text.Encoding.ASCII.GetString(data, start, i - start); + } + } + lock (_client.GetStream()) + { + _client.GetStream().BeginRead(data, 0, System.Convert.ToInt32(_client.ReceiveBufferSize), ReceiveMessage, null); + } + } + catch (Exception ex) + { + AllClients.Remove(_clientIP); + Broadcast("[Left][" + _clientNick + "] has left the chat.", null); + } + } + + public void Broadcast(string message, string[] users) + { + if (users == null) + { + foreach (DictionaryEntry c in AllClients) + { + ((ChatClient)(c.Value)).SendMessage(message + "\n"); + } + } + else + { + foreach (DictionaryEntry c in AllClients) + { + foreach (string user in users) + { + if (((ChatClient)(c.Value))._clientNick == user) + { + ((ChatClient)(c.Value)).SendMessage(message + "\n"); + Console.WriteLine("sending -----> " + message ); + break; + } + } + } + } + } + } +} diff --git a/Chapter01(Socket)/Part 2/server_CS/server_CS/Program.cs b/Chapter01(Socket)/Part 2/server_CS/server_CS/Program.cs new file mode 100644 index 0000000..c965aa1 --- /dev/null +++ b/Chapter01(Socket)/Part 2/server_CS/server_CS/Program.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Text; + +using System.Net.Sockets; + +namespace server_CS +{ + class Program + { + const int portNo = 500; + static void Main(string[] args) + { +// System.Net.IPAddress localAdd = System.Net.IPAddress.Parse("10.0.1.2"); + System.Net.IPAddress localAdd = System.Net.IPAddress.Parse("127.0.0.1"); + System.Net.Sockets.TcpListener listener = new System.Net.Sockets.TcpListener(localAdd, portNo); + listener.Start(); + while (true) + { + ChatClient user = new ChatClient(listener.AcceptTcpClient()); + } + } + } +} diff --git a/Chapter01(Socket)/Part 2/server_CS/server_CS/Properties/AssemblyInfo.cs b/Chapter01(Socket)/Part 2/server_CS/server_CS/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..6f75278 --- /dev/null +++ b/Chapter01(Socket)/Part 2/server_CS/server_CS/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("server_CS")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("server_CS")] +[assembly: AssemblyCopyright("Copyright © 2006")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("e21dde01-b60c-48a4-9d81-290c349b3239")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Chapter01(Socket)/Part 2/server_CS/server_CS/bin/Debug/server_CS.exe b/Chapter01(Socket)/Part 2/server_CS/server_CS/bin/Debug/server_CS.exe new file mode 100644 index 0000000000000000000000000000000000000000..3ab0c46030ae45a8b1424b7f3dafeb46dcb77b19 GIT binary patch literal 20480 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 literal 0 HcmV?d00001 diff --git a/Chapter01(Socket)/Part 2/server_CS/server_CS/bin/Debug/server_CS.pdb b/Chapter01(Socket)/Part 2/server_CS/server_CS/bin/Debug/server_CS.pdb new file mode 100644 index 0000000000000000000000000000000000000000..c51aae668e2aae0fa90f4d86f17e7a0d5bde5d73 GIT binary patch literal 19968 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 TBcLY!&!}P9UAq3eeA)j4ZC9R* literal 0 HcmV?d00001 diff --git a/Chapter01(Socket)/Part 2/server_CS/server_CS/obj/Debug/server_CS.exe b/Chapter01(Socket)/Part 2/server_CS/server_CS/obj/Debug/server_CS.exe new file mode 100644 index 0000000000000000000000000000000000000000..3ab0c46030ae45a8b1424b7f3dafeb46dcb77b19 GIT binary patch literal 20480 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 literal 0 HcmV?d00001 diff --git a/Chapter01(Socket)/Part 2/server_CS/server_CS/obj/Debug/server_CS.pdb b/Chapter01(Socket)/Part 2/server_CS/server_CS/obj/Debug/server_CS.pdb new file mode 100644 index 0000000000000000000000000000000000000000..c51aae668e2aae0fa90f4d86f17e7a0d5bde5d73 GIT binary patch literal 19968 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 + + Debug + AnyCPU + 8.0.50727 + 2.0 + {CC62E1D7-8563-4AA9-A114-7D06FE082B32} + Exe + Properties + server_CS + server_CS + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Chapter02(Serial)/SerialCommChat/SerialCommChat.sln b/Chapter02(Serial)/SerialCommChat/SerialCommChat.sln new file mode 100644 index 0000000..ed60653 --- /dev/null +++ b/Chapter02(Serial)/SerialCommChat/SerialCommChat.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "SerialCommChat", "SerialCommChat\SerialCommChat.vbproj", "{9E28C593-15C0-4D31-81E4-7CA1C0E39529}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {9E28C593-15C0-4D31-81E4-7CA1C0E39529}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9E28C593-15C0-4D31-81E4-7CA1C0E39529}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9E28C593-15C0-4D31-81E4-7CA1C0E39529}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9E28C593-15C0-4D31-81E4-7CA1C0E39529}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Chapter02(Serial)/SerialCommChat/SerialCommChat.suo b/Chapter02(Serial)/SerialCommChat/SerialCommChat.suo new file mode 100644 index 0000000000000000000000000000000000000000..b5cbc7c27f0f4927aa6957fe44361facc88290b8 GIT binary patch literal 20992 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 H9sczHwpmJi literal 0 HcmV?d00001 diff --git a/Chapter02(Serial)/SerialCommChat/SerialCommChat/Form1.Designer.vb b/Chapter02(Serial)/SerialCommChat/SerialCommChat/Form1.Designer.vb new file mode 100644 index 0000000..77dfe5e --- /dev/null +++ b/Chapter02(Serial)/SerialCommChat/SerialCommChat/Form1.Designer.vb @@ -0,0 +1,192 @@ + _ +Partial Class Form1 + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.Label1 = New System.Windows.Forms.Label + Me.cbbCOMPorts = New System.Windows.Forms.ComboBox + Me.txtDataToSend = New System.Windows.Forms.TextBox + Me.btnSend = New System.Windows.Forms.Button + Me.lblMessage = New System.Windows.Forms.Label + Me.btnConnect = New System.Windows.Forms.Button + Me.btnDisconnect = New System.Windows.Forms.Button + Me.txtDataReceived = New System.Windows.Forms.RichTextBox + Me.txtPhoneNumber = New System.Windows.Forms.TextBox + Me.Label2 = New System.Windows.Forms.Label + Me.btnDialNumber = New System.Windows.Forms.Button + Me.btnAnswerCall = New System.Windows.Forms.Button + Me.GroupBox1 = New System.Windows.Forms.GroupBox + Me.GroupBox1.SuspendLayout() + Me.SuspendLayout() + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.Location = New System.Drawing.Point(12, 9) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(104, 13) + Me.Label1.TabIndex = 0 + Me.Label1.Text = "Available COM Ports" + ' + 'cbbCOMPorts + ' + Me.cbbCOMPorts.FormattingEnabled = True + Me.cbbCOMPorts.Location = New System.Drawing.Point(122, 6) + Me.cbbCOMPorts.Name = "cbbCOMPorts" + Me.cbbCOMPorts.Size = New System.Drawing.Size(80, 21) + Me.cbbCOMPorts.TabIndex = 1 + ' + 'txtDataToSend + ' + Me.txtDataToSend.Location = New System.Drawing.Point(12, 236) + Me.txtDataToSend.Multiline = True + Me.txtDataToSend.Name = "txtDataToSend" + Me.txtDataToSend.Size = New System.Drawing.Size(273, 47) + Me.txtDataToSend.TabIndex = 2 + ' + 'btnSend + ' + Me.btnSend.Location = New System.Drawing.Point(289, 260) + Me.btnSend.Name = "btnSend" + Me.btnSend.Size = New System.Drawing.Size(75, 23) + Me.btnSend.TabIndex = 3 + Me.btnSend.Text = "Send" + Me.btnSend.UseVisualStyleBackColor = True + ' + 'lblMessage + ' + Me.lblMessage.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.lblMessage.Location = New System.Drawing.Point(12, 36) + Me.lblMessage.Name = "lblMessage" + Me.lblMessage.Size = New System.Drawing.Size(352, 23) + Me.lblMessage.TabIndex = 5 + ' + 'btnConnect + ' + Me.btnConnect.Location = New System.Drawing.Point(210, 4) + Me.btnConnect.Name = "btnConnect" + Me.btnConnect.Size = New System.Drawing.Size(75, 23) + Me.btnConnect.TabIndex = 6 + Me.btnConnect.Text = "Connect" + Me.btnConnect.UseVisualStyleBackColor = True + ' + 'btnDisconnect + ' + Me.btnDisconnect.Location = New System.Drawing.Point(291, 4) + Me.btnDisconnect.Name = "btnDisconnect" + Me.btnDisconnect.Size = New System.Drawing.Size(75, 23) + Me.btnDisconnect.TabIndex = 7 + Me.btnDisconnect.Text = "Disconnect" + Me.btnDisconnect.UseVisualStyleBackColor = True + ' + 'txtDataReceived + ' + Me.txtDataReceived.Location = New System.Drawing.Point(12, 62) + Me.txtDataReceived.Name = "txtDataReceived" + Me.txtDataReceived.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.Vertical + Me.txtDataReceived.Size = New System.Drawing.Size(352, 168) + Me.txtDataReceived.TabIndex = 8 + Me.txtDataReceived.Text = "" + ' + 'txtPhoneNumber + ' + Me.txtPhoneNumber.Location = New System.Drawing.Point(85, 19) + Me.txtPhoneNumber.Name = "txtPhoneNumber" + Me.txtPhoneNumber.Size = New System.Drawing.Size(99, 20) + Me.txtPhoneNumber.TabIndex = 9 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Location = New System.Drawing.Point(6, 22) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(78, 13) + Me.Label2.TabIndex = 10 + Me.Label2.Text = "Phone Number" + ' + 'btnDialNumber + ' + Me.btnDialNumber.Location = New System.Drawing.Point(190, 17) + Me.btnDialNumber.Name = "btnDialNumber" + Me.btnDialNumber.Size = New System.Drawing.Size(75, 23) + Me.btnDialNumber.TabIndex = 11 + Me.btnDialNumber.Text = "Dial Number" + Me.btnDialNumber.UseVisualStyleBackColor = True + ' + 'btnAnswerCall + ' + Me.btnAnswerCall.Location = New System.Drawing.Point(271, 17) + Me.btnAnswerCall.Name = "btnAnswerCall" + Me.btnAnswerCall.Size = New System.Drawing.Size(75, 23) + Me.btnAnswerCall.TabIndex = 12 + Me.btnAnswerCall.Text = "Answer Call" + Me.btnAnswerCall.UseVisualStyleBackColor = True + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.Label2) + Me.GroupBox1.Controls.Add(Me.btnAnswerCall) + Me.GroupBox1.Controls.Add(Me.txtPhoneNumber) + Me.GroupBox1.Controls.Add(Me.btnDialNumber) + Me.GroupBox1.Location = New System.Drawing.Point(12, 289) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(352, 50) + Me.GroupBox1.TabIndex = 13 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Bluetooth Handset" + ' + 'Form1 + ' + Me.AcceptButton = Me.btnSend + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.BackColor = System.Drawing.SystemColors.Control + Me.ClientSize = New System.Drawing.Size(379, 351) + Me.Controls.Add(Me.GroupBox1) + Me.Controls.Add(Me.txtDataReceived) + Me.Controls.Add(Me.btnDisconnect) + Me.Controls.Add(Me.btnConnect) + Me.Controls.Add(Me.lblMessage) + Me.Controls.Add(Me.btnSend) + Me.Controls.Add(Me.txtDataToSend) + Me.Controls.Add(Me.cbbCOMPorts) + Me.Controls.Add(Me.Label1) + Me.Name = "Form1" + Me.Text = "Serial Chat" + Me.GroupBox1.ResumeLayout(False) + Me.GroupBox1.PerformLayout() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents cbbCOMPorts As System.Windows.Forms.ComboBox + Friend WithEvents txtDataToSend As System.Windows.Forms.TextBox + Friend WithEvents btnSend As System.Windows.Forms.Button + Friend WithEvents lblMessage As System.Windows.Forms.Label + Friend WithEvents btnConnect As System.Windows.Forms.Button + Friend WithEvents btnDisconnect As System.Windows.Forms.Button + Friend WithEvents txtDataReceived As System.Windows.Forms.RichTextBox + Friend WithEvents txtPhoneNumber As System.Windows.Forms.TextBox + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents btnDialNumber As System.Windows.Forms.Button + Friend WithEvents btnAnswerCall As System.Windows.Forms.Button + Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox + +End Class diff --git a/Chapter02(Serial)/SerialCommChat/SerialCommChat/Form1.resx b/Chapter02(Serial)/SerialCommChat/SerialCommChat/Form1.resx new file mode 100644 index 0000000..19dc0dd --- /dev/null +++ b/Chapter02(Serial)/SerialCommChat/SerialCommChat/Form1.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter02(Serial)/SerialCommChat/SerialCommChat/Form1.vb b/Chapter02(Serial)/SerialCommChat/SerialCommChat/Form1.vb new file mode 100644 index 0000000..3870b3c --- /dev/null +++ b/Chapter02(Serial)/SerialCommChat/SerialCommChat/Form1.vb @@ -0,0 +1,118 @@ +Public Class Form1 + Private WithEvents serialPort As New IO.Ports.SerialPort + + Private Sub Form1_Load( _ + ByVal sender As System.Object, _ + ByVal e As System.EventArgs) _ + Handles MyBase.Load + + For i As Integer = 0 To _ + My.Computer.Ports.SerialPortNames.Count - 1 + cbbCOMPorts.Items.Add( _ + My.Computer.Ports.SerialPortNames(i)) + Next + btnDisconnect.Enabled = False + End Sub + + Private Sub DataReceived( _ + ByVal sender As Object, _ + ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) _ + Handles serialPort.DataReceived + + txtDataReceived.BeginInvoke(New _ + myDelegate(AddressOf updateTextBox), _ + New Object() {}) + End Sub + + Private Sub btnSend_Click( _ + ByVal sender As System.Object, _ + ByVal e As System.EventArgs) _ + Handles btnSend.Click + Try + serialPort.Write(txtDataToSend.Text & vbCrLf) + 'serialPort.Write(txtDataToSend.Text) + + + With txtDataReceived + .AppendText(">" & txtDataToSend.Text & vbCrLf) + .ScrollToCaret() + End With + txtDataToSend.Text = String.Empty + Catch ex As Exception + MsgBox(ex.ToString) + End Try + End Sub + + Public Delegate Sub myDelegate() + Public Sub updateTextBox() + '---for receiving plan ASCII text--- + 'With txtDataReceived + ' .AppendText(serialPort.ReadExisting) + ' .ScrollToCaret() + 'End With + + '---UNICODE work-around--- + With txtDataReceived + '---find out the number of bytes to read--- + Dim bytesToRead As Integer = serialPort.BytesToRead + '---declare a char array--- + Dim ch(bytesToRead) As Char + '---read the bytes into the ch array--- + Dim bytesRead As Integer = 0 + bytesRead = serialPort.Read(ch, 0, bytesToRead) + '---convert the ch array into a string--- + Dim str As String = New String(ch, 0, bytesRead) + .AppendText(str) + .ScrollToCaret() + End With + End Sub + + Private Sub btnConnect_Click( _ + ByVal sender As System.Object, _ + ByVal e As System.EventArgs) _ + Handles btnConnect.Click + If serialPort.IsOpen Then + serialPort.Close() + End If + Try + With serialPort + .PortName = cbbCOMPorts.Text + .BaudRate = 2400 ' 9600 + .Parity = IO.Ports.Parity.None + .DataBits = 8 + .StopBits = IO.Ports.StopBits.One + .Handshake = IO.Ports.Handshake.None + ' .Encoding = System.Text.Encoding.Unicode + End With + serialPort.Open() + + lblMessage.Text = cbbCOMPorts.Text & " connected." + btnConnect.Enabled = False + btnDisconnect.Enabled = True + Catch ex As Exception + MsgBox(ex.ToString) + End Try + End Sub + + Private Sub btnDisconnect_Click( _ + ByVal sender As System.Object, _ + ByVal e As System.EventArgs) _ + Handles btnDisconnect.Click + Try + serialPort.Close() + lblMessage.Text = serialPort.PortName & " disconnected." + btnConnect.Enabled = True + btnDisconnect.Enabled = False + Catch ex As Exception + MsgBox(ex.ToString) + End Try + End Sub + + Private Sub btnDialNumber_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDialNumber.Click + serialPort.Write("ATDT " & txtPhoneNumber.Text & vbCrLf) + End Sub + + Private Sub btnAnswerCall_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAnswerCall.Click + serialPort.Write("AT*EVA" & vbCrLf) + End Sub +End Class diff --git a/Chapter02(Serial)/SerialCommChat/SerialCommChat/My Project/Application.Designer.vb b/Chapter02(Serial)/SerialCommChat/SerialCommChat/My Project/Application.Designer.vb new file mode 100644 index 0000000..8911b53 --- /dev/null +++ b/Chapter02(Serial)/SerialCommChat/SerialCommChat/My Project/Application.Designer.vb @@ -0,0 +1,38 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.42 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + 'NOTE: This file is auto-generated; do not modify it directly. To make changes, + ' or if you encounter build errors in this file, go to the Project Designer + ' (go to Project Properties or double-click the My Project node in + ' Solution Explorer), and make changes on the Application tab. + ' + Partial Friend Class MyApplication + + _ + Public Sub New() + MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) + Me.IsSingleInstance = false + Me.EnableVisualStyles = true + Me.SaveMySettingsOnExit = true + Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses + End Sub + + _ + Protected Overrides Sub OnCreateMainForm() + Me.MainForm = Global.SerialCommChat.Form1 + End Sub + End Class +End Namespace diff --git a/Chapter02(Serial)/SerialCommChat/SerialCommChat/My Project/Application.myapp b/Chapter02(Serial)/SerialCommChat/SerialCommChat/My Project/Application.myapp new file mode 100644 index 0000000..0f12f32 --- /dev/null +++ b/Chapter02(Serial)/SerialCommChat/SerialCommChat/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + true + Form1 + false + 0 + true + 0 + true + \ No newline at end of file diff --git a/Chapter02(Serial)/SerialCommChat/SerialCommChat/My Project/AssemblyInfo.vb b/Chapter02(Serial)/SerialCommChat/SerialCommChat/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..ff58fff --- /dev/null +++ b/Chapter02(Serial)/SerialCommChat/SerialCommChat/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Chapter02(Serial)/SerialCommChat/SerialCommChat/My Project/Resources.Designer.vb b/Chapter02(Serial)/SerialCommChat/SerialCommChat/My Project/Resources.Designer.vb new file mode 100644 index 0000000..7eaacf5 --- /dev/null +++ b/Chapter02(Serial)/SerialCommChat/SerialCommChat/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.42 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("SerialCommChat.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Chapter02(Serial)/SerialCommChat/SerialCommChat/My Project/Resources.resx b/Chapter02(Serial)/SerialCommChat/SerialCommChat/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Chapter02(Serial)/SerialCommChat/SerialCommChat/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter02(Serial)/SerialCommChat/SerialCommChat/My Project/Settings.Designer.vb b/Chapter02(Serial)/SerialCommChat/SerialCommChat/My Project/Settings.Designer.vb new file mode 100644 index 0000000..bb9a123 --- /dev/null +++ b/Chapter02(Serial)/SerialCommChat/SerialCommChat/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.42 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.SerialCommChat.My.MySettings + Get + Return Global.SerialCommChat.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Chapter02(Serial)/SerialCommChat/SerialCommChat/My Project/Settings.settings b/Chapter02(Serial)/SerialCommChat/SerialCommChat/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Chapter02(Serial)/SerialCommChat/SerialCommChat/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Chapter02(Serial)/SerialCommChat/SerialCommChat/SerialCommChat.vbproj b/Chapter02(Serial)/SerialCommChat/SerialCommChat/SerialCommChat.vbproj new file mode 100644 index 0000000..e033007 --- /dev/null +++ b/Chapter02(Serial)/SerialCommChat/SerialCommChat/SerialCommChat.vbproj @@ -0,0 +1,106 @@ + + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {9E28C593-15C0-4D31-81E4-7CA1C0E39529} + WinExe + SerialCommChat.My.MyApplication + SerialCommChat + SerialCommChat + WindowsForms + + + true + full + true + true + bin\Debug\ + SerialCommChat.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + SerialCommChat.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + + + + + + + + + + + + + + + Form + + + Form1.vb + Form + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + Designer + Form1.vb + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Chapter02(Serial)/SerialCommChat/SerialCommChat/SerialCommChat.vbproj.user b/Chapter02(Serial)/SerialCommChat/SerialCommChat/SerialCommChat.vbproj.user new file mode 100644 index 0000000..c85bd53 --- /dev/null +++ b/Chapter02(Serial)/SerialCommChat/SerialCommChat/SerialCommChat.vbproj.user @@ -0,0 +1,18 @@ + + + + + + + + + + + + + 0 + en-US + true + ProjectFiles + + \ No newline at end of file diff --git a/Chapter02(Serial)/SerialCommChat/SerialCommChat/bin/Debug/SerialCommChat.exe b/Chapter02(Serial)/SerialCommChat/SerialCommChat/bin/Debug/SerialCommChat.exe new file mode 100644 index 0000000000000000000000000000000000000000..2f388ab9fd699b63d3706eefda82242e1cc32a14 GIT binary patch literal 36864 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 literal 0 HcmV?d00001 diff --git a/Chapter02(Serial)/SerialCommChat/SerialCommChat/bin/Debug/SerialCommChat.pdb b/Chapter02(Serial)/SerialCommChat/SerialCommChat/bin/Debug/SerialCommChat.pdb new file mode 100644 index 0000000000000000000000000000000000000000..41321f17af3a93cea4ce914bddfb7b28e0603724 GIT binary patch literal 71168 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 literal 0 HcmV?d00001 diff --git a/Chapter02(Serial)/SerialCommChat/SerialCommChat/bin/Debug/SerialCommChat.vshost.exe b/Chapter02(Serial)/SerialCommChat/SerialCommChat/bin/Debug/SerialCommChat.vshost.exe new file mode 100644 index 0000000000000000000000000000000000000000..ce3f102c36be07551ba7c7fad64c8b24709bdb91 GIT binary patch literal 5632 zcmeHLX>3&26+Umg;MiccvX$*QEU{T$9osBr9ou8T!CO4GX{f1rGjlzDVoO|!Prgq~qltDz9r~?B;$Ix=|OT07mVmN>1Z}RE2drlP`Q)*5X zG<6uR8guNZqj#!d-Lh;?4GGnWTdHBHf%>4@X-9-MYENnj=gbf*dm1jLN#cftptQL=|aWNfvWlQP?*hWf2t+?Lo}%k$q{6hp9nL zgjRO$01v%$;r&I$YdXI8&)FG$2N&cn{PM~EIUlboSblZ6|HQ<{cD(w-H$Pi{GB!Q7 z|H6B@KUnhF)GHNJoBn(6mQTf)Ia@0-J4*9+&;GPbIdCa>RcoH#{Qln`m|0=hKQWNC z!#y@@!#j(1Un%|Q)aTD`kDfW+w4v>(rqa#M$bmyo{cgLmeRW{M$FpYm3da-W&f8x& z0nLKxvau(Eo?AGHIeD_NCo>0YuLwR+p^ze1#Ifrt(TcT2#Y;+-Fe_7rvIeo7wS(yA zX#bP}I_Nou6?Iv{Lq2$0&05=B9YEWMekRLTn0AN-P|#J@A{QJ}x~7y8++mAT5@Rw| z@Q22sG9U6Nxk<0GsfFs1h&|K+JVrkSo|br>`a#cB7|RvrMHFKBr(Uw zl5-@k@UiBtzD8d*9q>KoTQAp`O~3WAt@psmrLqha^n)4xjBMH^@f9F@n1~ujPf^Cu z1X8hoxc8RIqmNGBB-e08_V!a4+g72m#M~*saoB2`Xc84k`hJPumRK&aTH=EeACjm` zG$d}7*dy^#;3Rrn;NPL;}jK9&ZX=lbcdYSfRoToq2>!3ASPn#8u z^5_H5<0%vLR4N9}qQ$`Zh^$7XR0mux@nJd(I!OC~-=*IJ!;-UI&T=Kai#`PZNxBT& zOIH;?y#RZey+d~b$L>D*2U4BLHo7PZt&wf=(v$RGXdorBqSlVYO|go)+z#9IG|?@n z%JQ6^2HUVasx`un?b_|0)?&DE-3)s1h+%8%Ad2nU;Mif|y42~0ZO1f16zp+5(Mk28 zEh6lZ7WQn1YIVa(4rq;W%QHHKR%v&}3{yBk;dB{LLCFE;>z)xZOvCFb_i!dcaZe1+ z7VReV8n#8{t}8l2X3u)jvj&QWL{kF+Vd_0WBWeu|C7jb5g=@zhHd-g*o}-(Cj2hjF z#`S2LwxI3_6TXN_8!^$tUW;&C*dJ1wvR7@j+fFBZw=LZqR*HQcc5v8%N;}r$7|{;z zRXI0nx6BteC@kn? zx7}3wC`~t$^_JixeXZ}r;oYm_b%)++Tlw0>+HX%C`+@-Ake_bp%{*%iWKZ&%~jNE(TX9o*6g%-Rh7EHhP*OlHTd*KJ4?D*a4-;jvD#}$T zOIQn=@p>DHr7y*I8$Y743XSBB{D^C1B}AnPX@5AP4(=bd(sp9DBln=DmYb$353H*? z$g9&OB6vF%DKvX%LSbW(nz&Qd#HFe-r=+-e5z#jlnlL1prkZH9Lb+*IH9O7$Qj&K* zi1dqo@D0qF`iTGURq zl$y==AvIxC2iL{8P9EfJ^b+N0<`}+a;gbg`1N`W1H1*>kDp+;uS4JU@0csxjmC)CT zpTKMnR`9n2umfBdeGU9>R4z4m@TcTs(x)CoK$mlQycQmW;RnyOu?i1|k+nM%lbG(k zU)oNsIsglXDI;B4QqNAHkZxdK@%Jm&3M+mh+d;;>sRJgjdxC zjKDHcB4+hTNzOL=or(eXIE%yQ&!joDM74@5pgblnV%bN-JGR6=O_ohmcu4Tp%XjSM5Nh|8#A5K!MWx={dKuZ TBcLY!&!}P9UAq3eeA)j4ZC9R* literal 0 HcmV?d00001 diff --git a/Chapter02(Serial)/SerialCommChat/SerialCommChat/bin/Debug/SerialCommChat.xml b/Chapter02(Serial)/SerialCommChat/SerialCommChat/bin/Debug/SerialCommChat.xml new file mode 100644 index 0000000..ef21302 --- /dev/null +++ b/Chapter02(Serial)/SerialCommChat/SerialCommChat/bin/Debug/SerialCommChat.xml @@ -0,0 +1,24 @@ + + + + +SerialCommChat + + + + + + Returns the cached ResourceManager instance used by this class. + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + \ No newline at end of file diff --git a/Chapter02(Serial)/SerialCommChat/SerialCommChat/obj/Debug/SerialCommChat.Form1.resources b/Chapter02(Serial)/SerialCommChat/SerialCommChat/obj/Debug/SerialCommChat.Form1.resources new file mode 100644 index 0000000000000000000000000000000000000000..06c24d06c1cab750788146ce052b37770f3fa530 GIT binary patch literal 180 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 literal 0 HcmV?d00001 diff --git a/Chapter02(Serial)/SerialCommChat/SerialCommChat/obj/Debug/SerialCommChat.pdb b/Chapter02(Serial)/SerialCommChat/SerialCommChat/obj/Debug/SerialCommChat.pdb new file mode 100644 index 0000000000000000000000000000000000000000..41321f17af3a93cea4ce914bddfb7b28e0603724 GIT binary patch literal 71168 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 literal 0 HcmV?d00001 diff --git a/Chapter02(Serial)/SerialCommChat/SerialCommChat/obj/Debug/SerialCommChat.vbproj.GenerateResource.Cache b/Chapter02(Serial)/SerialCommChat/SerialCommChat/obj/Debug/SerialCommChat.vbproj.GenerateResource.Cache new file mode 100644 index 0000000000000000000000000000000000000000..66d0858528e0236667fe50518926ae81ac88a246 GIT binary patch literal 842 zcma)4O-md>5S_{HjQb_5hakZm7Re#tGVDeqA+Q8o*+g`~L=g|U^iJ21c6+C#YbH4U z0&@xZ0sfzaTyqQf4?KI-s>VoIhman4Q&Zjj>Q%k*e9!Z4Xz`m@>k+}xSjE<$NwR1& zS6W5~0;kyR9D+q<(!q2rjQOMz4c@xd71S4 za-%2KMZjgAm$FA60N+Bo1t*Y7NMi-aQtB4)XrwgY@xAq0ySk(=af4C-74yCK_CUD&46v{PXAn9cb(t zAxDCnSh$;PZD?jE!h&rx>Ci~nv*xpsU~8P%S7%VA;bM3wbPniwm5LVx&01Nl?LS=4 zN;Gdj;JP?GPHJXI=fFUGkbHts6PV>mvSwA9EPQw}{pNxwRNj#=md?W)+Zeu{V z-R8?~B6SMt4T6B9ez{o>-Cv`WbDoFU)c3~Y^1ZPI{|IXdK`LgjGMCo^v$2sXQ6L}B z?ZK(S3_~(_(RU(U)7;^=%hz8ne*HN2eU|LBFLJ=$dcUuK24BCQ`%8SB*AnmXYTg2M CRq{Fj literal 0 HcmV?d00001 diff --git a/Chapter02(Serial)/SerialCommChat/SerialCommChat/obj/Debug/SerialCommChat.xml b/Chapter02(Serial)/SerialCommChat/SerialCommChat/obj/Debug/SerialCommChat.xml new file mode 100644 index 0000000..ef21302 --- /dev/null +++ b/Chapter02(Serial)/SerialCommChat/SerialCommChat/obj/Debug/SerialCommChat.xml @@ -0,0 +1,24 @@ + + + + +SerialCommChat + + + + + + Returns the cached ResourceManager instance used by this class. + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + \ No newline at end of file diff --git a/Chapter02(Serial)/SerialCommChat/SerialCommChat/obj/SerialCommChat.vbproj.FileList.txt b/Chapter02(Serial)/SerialCommChat/SerialCommChat/obj/SerialCommChat.vbproj.FileList.txt new file mode 100644 index 0000000..f2846e0 --- /dev/null +++ b/Chapter02(Serial)/SerialCommChat/SerialCommChat/obj/SerialCommChat.vbproj.FileList.txt @@ -0,0 +1,10 @@ +bin\Debug\SerialCommChat.exe +bin\Debug\SerialCommChat.pdb +bin\Debug\SerialCommChat.xml +obj\Debug\ResolveAssemblyReference.cache +obj\Debug\SerialCommChat.Form1.resources +obj\Debug\SerialCommChat.Resources.resources +obj\Debug\SerialCommChat.vbproj.GenerateResource.Cache +obj\Debug\SerialCommChat.exe +obj\Debug\SerialCommChat.xml +obj\Debug\SerialCommChat.pdb diff --git a/Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC.sln b/Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC.sln new file mode 100644 index 0000000..cdf1459 --- /dev/null +++ b/Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "SerialCommChatPocketPC", "SerialCommChatPocketPC\SerialCommChatPocketPC.vbproj", "{E9799171-4E2D-47BA-8F3D-FEDD9DA24242}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {E9799171-4E2D-47BA-8F3D-FEDD9DA24242}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E9799171-4E2D-47BA-8F3D-FEDD9DA24242}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E9799171-4E2D-47BA-8F3D-FEDD9DA24242}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {E9799171-4E2D-47BA-8F3D-FEDD9DA24242}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E9799171-4E2D-47BA-8F3D-FEDD9DA24242}.Release|Any CPU.Build.0 = Release|Any CPU + {E9799171-4E2D-47BA-8F3D-FEDD9DA24242}.Release|Any CPU.Deploy.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC.suo b/Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC.suo new file mode 100644 index 0000000000000000000000000000000000000000..ceb04cfeeda898b47cc73974c53b03a4cdfaaa52 GIT binary patch literal 18432 zcmeHOTWnlM8Ji<2hp?pZr=Vkd6ai342-8}G5}cz2K4 zvrb|)eSn9mATHtoksvBkRHUlhTEqjC7bp^!2b8=ZqzWW>ga=x90SVRS`)1B~&sp!; zJ!ieCo8YnjopYHp|I9!Cea1Jg-}9H}U)l0kQB@9!wPJqZF0sz@Jcet6EbkLy4K8>; zzp${N9twfW)p83_;4O^x4tEW?*6#wW2iys`3$Ow3Zoqp0cLP2McrRcp04yNx0o)7N z1h^0Ie!ynH2LM|D9|C+Bunq7L0C~kgeZPDC0O~gP`W7PFZ8Ox9!p2`&7@}VkQJ2IV zRwI1b435#n;5yeUH?F;Y?Z1P+iLFJWUyzYdMu5>4=fxnfPvELwTv9JW{%(dA()d}2 z{7mvL+jfaPqE{qQcjC8Cbl|re*PXcP!e0tkXBS5~iqXyr2XxY9Kk#!tdJOt`z1piU zqv1~ja~5DNb`Sh9%3~D#8`1tag%pKj(GYjH^BY0nqaQAg;Fq9s;nhkGl0P)ZKvH?!6xC$8moE&;=L<^Zkl28;qu0Zs$P0BrjS)Sm=A0m!(|K8^Y;;4^?M;2eN$SEBUo{QOsDp1J$@7sM9} z_y0%y3PXuh-ZaS}LUbH|_3&2@&j0zj?0 zR=GS?oOCi{)>Ox^Rh%@2EGv_;oawSXlS#~!EXT>jmN`y-|1W?EF3W&}Y%vZEQGkR} zn>xb43KvBVbsEpg_?yE0B;I7eBNpyDz`txgi8e#HvSdFNT1=z0EoN{(fVzbD)IaRc zfv&W0oe{L%%PFJikC=uq66&>6_+`)fxznKY?a)8;87SlA-v-U)>ll9NW3ZeCzERB1 z7J0~l4ed`lmBa;%XB=0JN*nM~$501_#lHq^HQiFcaSkgsi9g~U13k*X{3Pxg&7EU2 zny^2_Ou8LM{p}J28LuN8KED{#>tlx65k$w7;bLjO0{X@|xSU zX0@Y<`O~-5>tBt3K+ZV_F0ipGrG`8J{4w@L8x?l`Y`>07fD(*<4pK~x%&Ue0zs<~_ zx?Xozji0)p0Ic-G##~z1;$k2Vv}699H|=rQ`O{~ot@0M~P!XW?nDWXdF^VikV?h5* zfew_2473#`lU|zxm;j#`kYZ|&S+vgMj$X+0{<=_i!7%sYSvOP! zulB-COyFuCgrP@18^GHX{`vq3wCi=@X|T02VpCEeOo%}Net@tiqqKskE z7Oxb1pe*Ne7n7lfVgmN%Y`b3|_~RAvqmSCIv37YdTMStJunbR2X<> z%f1b<6K%+DN;Y<(z4xB&C@ZRuGJ2`V$_$<^X}u2fml^Fs-uuS=+D<5u<?3aO|2v5g=ei=dR5r?HtN}eYJB+-(Jy+Zv* zTRg)!Or2QO?Hk@oJpAQf9(m>U zm#%O6?%2j5QTpA{#I7snkG=TEYo9wg|I?SyDN0)Go4D__`Pa4$z3^P_hu_%tMqf}% zWGt3^KO}Cv`p+}Zw*9RC`}_Yee¥n213+0b_C=5=$G*)r^38*So~i5qh*|Sa0X+cx}$nh(&o*y)gA%y zQ-?6$9Txviw2jA9f2Y9z#F~}rF}J95lw8+~{M7fLe`Njdo&VzoY*B2PP6Xz_>_sz1 zgdQ5b3pz1rN%?3_({^YHW)G%eG^jzR!AXoqC|h07C;Y8f&RnM)H(&bAG}C}hm;T&T z*~yqsW@pM)$>=dmJ7*a?(^hFJo8OgDwP_a$Xi*-q$EU6Gh#B;Fz%CWK;z(;<;&9eI zQk>1_nFAHV4or?6f%eKt-YbIsd8{OJP1L)Tf}78OC#3I_$0&*tCOwju!jqC5fAA0F zFEams4BcIE{hw;?2`l${L|Y;M6lLZh!^;1|XiFWyqVsGz|CWZ`qYh#Yie6!(6=-Ju z?Z8VviDdvbtRGUsP{))(Pmh$D0fYx?|D(sV|FM)h-2dRbby2<6|LwqQ9hqtUtMnah zCO!U1a0B_TabfU((9^JNud*^KC!^X_(r`>!ACy>60VfOnUtPS{`kAh|lh#^)f?fincJ4@3 zGNlHn#Jeo4|I*zm?nYI1tLV|{y{ZiI9gG;+B3%`U*Txi=m~G7Ku?iL3$bxaD@q(KB zMz?;zt=ruCLAUO7>t46s?$!^v^$xdYZ=~?yGQHMYn5IT z-*)p~I!ETul)k@R);J}3hd zsCc+M3_|~#XTlJT=icujJMJJiwv)?2N6nFS4Aym*(gGqg`iz&I1_CShA22 zn=6?_t}s=ca>}J_*)CO|?rqin$%}!fi!W?)JR)|)Gag`&Z4d$4a z#!_)#EXAFBX79)47u=Ec_a1DWv^Mg$r&Q5qsl5T6k7rwzrSodH+HK>AlX+r^IY2!w zX3D*Iw8p$$tzq?iY5iG9M{r;5)A86!G)7C=qBCKY^ig^LR%Q3Hwkn6`jFFOk-Wo4w zPFjvVTN<~VnmdTMjpJ$dK8wZ~o;IbJUJ{6oF{x1L7G@xGb!|DVEl zDJ_N}a5QQnO{n|RsBQIo^0rXqAD4ES@`F;IgE){1J{~7i5>2KBd z6M`fzSWNvCP(DobeZs|Fy1ILMckkf=sBmYG<$umCe$9*Iik>}o^~dcU9W{!Ev@p^p z{y$~~qWEf>R`i=HkT!V|O8uuwt;~c!`qWYD>bewRi51mqWoufsE _ +Partial Public Class Form1 + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + private mainMenu1 As System.Windows.Forms.MainMenu + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.mainMenu1 = New System.Windows.Forms.MainMenu + Me.MenuItem1 = New System.Windows.Forms.MenuItem + Me.Label2 = New System.Windows.Forms.Label + Me.Label1 = New System.Windows.Forms.Label + Me.txtMessageToSend = New System.Windows.Forms.TextBox + Me.txtReceivedMessage = New System.Windows.Forms.TextBox + Me.cbbCOMPorts = New System.Windows.Forms.ComboBox + Me.Label3 = New System.Windows.Forms.Label + Me.btnConnect = New System.Windows.Forms.Button + Me.SuspendLayout() + ' + 'mainMenu1 + ' + Me.mainMenu1.MenuItems.Add(Me.MenuItem1) + ' + 'MenuItem1 + ' + Me.MenuItem1.Text = "Send" + ' + 'Label2 + ' + Me.Label2.Location = New System.Drawing.Point(6, 49) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(135, 20) + Me.Label2.Text = "Received Message" + ' + 'Label1 + ' + Me.Label1.Location = New System.Drawing.Point(6, 2) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(100, 20) + Me.Label1.Text = "Message to send" + ' + 'txtMessageToSend + ' + Me.txtMessageToSend.Location = New System.Drawing.Point(3, 25) + Me.txtMessageToSend.Name = "txtMessageToSend" + Me.txtMessageToSend.Size = New System.Drawing.Size(234, 21) + Me.txtMessageToSend.TabIndex = 5 + ' + 'txtReceivedMessage + ' + Me.txtReceivedMessage.Location = New System.Drawing.Point(3, 72) + Me.txtReceivedMessage.Multiline = True + Me.txtReceivedMessage.Name = "txtReceivedMessage" + Me.txtReceivedMessage.ScrollBars = System.Windows.Forms.ScrollBars.Vertical + Me.txtReceivedMessage.Size = New System.Drawing.Size(234, 165) + Me.txtReceivedMessage.TabIndex = 2 + ' + 'cbbCOMPorts + ' + Me.cbbCOMPorts.Items.Add("COM1") + Me.cbbCOMPorts.Items.Add("COM2") + Me.cbbCOMPorts.Items.Add("COM3") + Me.cbbCOMPorts.Items.Add("COM4") + Me.cbbCOMPorts.Items.Add("COM5") + Me.cbbCOMPorts.Items.Add("COM6") + Me.cbbCOMPorts.Items.Add("COM7") + Me.cbbCOMPorts.Items.Add("COM8") + Me.cbbCOMPorts.Items.Add("COM9") + Me.cbbCOMPorts.Location = New System.Drawing.Point(68, 243) + Me.cbbCOMPorts.Name = "cbbCOMPorts" + Me.cbbCOMPorts.Size = New System.Drawing.Size(83, 22) + Me.cbbCOMPorts.TabIndex = 6 + ' + 'Label3 + ' + Me.Label3.Location = New System.Drawing.Point(3, 248) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(59, 20) + Me.Label3.Text = "COM Port" + ' + 'btnConnect + ' + Me.btnConnect.Location = New System.Drawing.Point(157, 243) + Me.btnConnect.Name = "btnConnect" + Me.btnConnect.Size = New System.Drawing.Size(80, 20) + Me.btnConnect.TabIndex = 9 + Me.btnConnect.Text = "Connect" + ' + 'Form1 + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.AutoScroll = True + Me.ClientSize = New System.Drawing.Size(240, 268) + Me.Controls.Add(Me.btnConnect) + Me.Controls.Add(Me.Label3) + Me.Controls.Add(Me.cbbCOMPorts) + Me.Controls.Add(Me.Label2) + Me.Controls.Add(Me.Label1) + Me.Controls.Add(Me.txtMessageToSend) + Me.Controls.Add(Me.txtReceivedMessage) + Me.Menu = Me.mainMenu1 + Me.Name = "Form1" + Me.Text = "Form1" + Me.ResumeLayout(False) + + End Sub + Friend WithEvents MenuItem1 As System.Windows.Forms.MenuItem + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents txtMessageToSend As System.Windows.Forms.TextBox + Friend WithEvents txtReceivedMessage As System.Windows.Forms.TextBox + Friend WithEvents cbbCOMPorts As System.Windows.Forms.ComboBox + Friend WithEvents Label3 As System.Windows.Forms.Label + Friend WithEvents btnConnect As System.Windows.Forms.Button + +End Class diff --git a/Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC/Form1.resx b/Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC/Form1.resx new file mode 100644 index 0000000..20d2efa --- /dev/null +++ b/Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC/Form1.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + Pocket_PC + + + True + + \ No newline at end of file diff --git a/Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC/Form1.vb b/Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC/Form1.vb new file mode 100644 index 0000000..e2b6cf6 --- /dev/null +++ b/Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC/Form1.vb @@ -0,0 +1,57 @@ +Public Class Form1 + Private WithEvents serialPort As New IO.Ports.SerialPort + + Private Sub DataReceived( _ + ByVal sender As Object, _ + ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) _ + Handles serialPort.DataReceived + + txtReceivedMessage.BeginInvoke(New _ + myDelegate(AddressOf updateTextBox), _ + New Object() {}) + End Sub + + Public Delegate Sub myDelegate() + Public Sub updateTextBox() + txtReceivedMessage.Text = _ + serialPort.ReadExisting & _ + txtReceivedMessage.Text + End Sub + + Private Sub MenuItem1_Click( _ + ByVal sender As System.Object, _ + ByVal e As System.EventArgs) _ + Handles MenuItem1.Click + Try + serialPort.WriteLine(txtMessageToSend.Text) + txtReceivedMessage.Text = ">" & _ + txtMessageToSend.Text & vbCrLf & _ + txtReceivedMessage.Text + txtMessageToSend.Text = String.Empty + Catch ex As Exception + MsgBox(ex.ToString) + End Try + End Sub + + Private Sub btnConnect_Click( _ + ByVal sender As System.Object, _ + ByVal e As System.EventArgs) _ + Handles btnConnect.Click + Try + If serialPort.IsOpen Then + serialPort.Close() + End If + With serialPort + .PortName = cbbCOMPorts.Text + .BaudRate = 9600 + .Parity = IO.Ports.Parity.None + .DataBits = 8 + .StopBits = IO.Ports.StopBits.One + End With + serialPort.Open() + MsgBox("Port opened successfully!") + Catch ex As Exception + MsgBox(ex.ToString) + End Try + End Sub +End Class diff --git a/Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC/My Project/AssemblyInfo.vb b/Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..9f4a354 --- /dev/null +++ b/Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC/My Project/AssemblyInfo.vb @@ -0,0 +1,36 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + diff --git a/Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC/My Project/Resources.Designer.vb b/Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC/My Project/Resources.Designer.vb new file mode 100644 index 0000000..8acbdc4 --- /dev/null +++ b/Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC/My Project/Resources.Designer.vb @@ -0,0 +1,59 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.42 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict Off +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the Strongly Typed Resource Builder + 'class via a tool like ResGen or Visual Studio.NET. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Module Resources + + Private _resMgr As System.Resources.ResourceManager + + Private _resCulture As System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As System.Resources.ResourceManager + Get + If (_resMgr Is Nothing) Then + Dim temp As System.Resources.ResourceManager = New System.Resources.ResourceManager("SerialCommChatPocketPC.Resources", GetType(Resources).Assembly) + _resMgr = temp + End If + Return _resMgr + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As System.Globalization.CultureInfo + Get + Return _resCulture + End Get + Set + _resCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC/My Project/Resources.resx b/Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC/My Project/Resources.resx new file mode 100644 index 0000000..3e18af9 --- /dev/null +++ b/Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC/SerialCommChatPocketPC.vbproj b/Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC/SerialCommChatPocketPC.vbproj new file mode 100644 index 0000000..006f11f --- /dev/null +++ b/Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC/SerialCommChatPocketPC.vbproj @@ -0,0 +1,108 @@ + + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {E9799171-4E2D-47BA-8F3D-FEDD9DA24242} + WinExe + SerialCommChatPocketPC.Form1 + SerialCommChatPocketPC + SerialCommChatPocketPC + {68B1623D-7FB9-47D8-8664-7ECEA3297D4F};{F184B08F-C81C-45F6-A57F-5ABD9991F28F} + PocketPC + 4118C335-430C-497f-BE48-11C3316B135E + 5.01 + WindowsForms + SerialCommChatPocketPC + v2.0 + + + + + true + full + true + true + bin\Debug\ + $(PlatformFamilyName)=TRUE + SerialCommChatPocketPC.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + 512 + Off + true + true + + + pdbonly + false + true + true + bin\Release\ + $(PlatformFamilyName)=TRUE + SerialCommChatPocketPC.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + 512 + Off + true + true + + + + + + + + + + + + + + + + + + Form + + + Form1.vb + Form + + + + True + True + Resources.resx + + + + + Designer + Form1.vb + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + + + + + + + + + \ No newline at end of file diff --git a/Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC/SerialCommChatPocketPC.vbproj.user b/Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC/SerialCommChatPocketPC.vbproj.user new file mode 100644 index 0000000..76bd09e --- /dev/null +++ b/Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC/SerialCommChatPocketPC.vbproj.user @@ -0,0 +1,5 @@ + + + 4118C335-430C-497f-BE48-11C3316B135Ed6518ffb-710f-11d3-99f2-00105a0df099 + + \ No newline at end of file diff --git a/Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC/bin/Debug/SerialCommChatPocketPC.exe b/Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC/bin/Debug/SerialCommChatPocketPC.exe new file mode 100644 index 0000000000000000000000000000000000000000..f08c9cd81462308619fb2408c93cd4aac6cf071f GIT binary patch literal 16384 zcmeHOeRN$_mEY&y`@WOVytHXclIDf5kX{GsHmu;;NSwB5etltu*B6_!cqps*2Spk8il0{RT-Gy-uJ$b zeALCvKeJ|ro4$Sa*V*TsefHhw+;eaHuKgJ4L}cLi)>}l6pyX?lz&{Og5LeWHy@DPJ zJ=5@r+VM=o;Qo{o8?&tuJ3bmq#4{Ny8yhxb_IM_i%EY>_7>JEpNwc-QJiOR5-QPpB zLmBjo@j+njb%rWbL;;kOSz?p+Lp=Jp$y^q)&Qg&z+Fmn)t_gnt60 z^hjpmIsv=e8Oag7pUdgj38FIQ?IWt?^6g$RB8;GL1wn5sP(-a+^H3J_?^XjqCS&#b z4N9&UT5WZb@ob#v1?KF-4}+ph@GH4CVbra*V<*6qG30=--bVaNu1!RnT5U6JK~ctZ z0z%fi9KVul6Vc`p@*VX5um?`_eT9o-QzIY6F2=2}gh+v&kGrowMl{C6+q@ov-uIsV z&0}2UIDYAY2`6igw(c?=YurwlP669x#*?PKGB)ZYEIXYVUKzW}w4IcdxolNy8~?40 zb&aR91GyNI>g~- z@~_Ctpb8mRu#kE3GEMRvlq)suFbbmywVRJH=F(#0%eqT+=+s{8_P^`J+=b&!}!&rH-6sMWn6hUW?7j zs-|*qoC-1B93kfdU^%YqS}0bXYazp<3q?*-B^dXy?eL37UbM$Agt;Xx#?tEM>Lq1O zQ3!)p72w=ARW<+9->h6}A4SXarRDNawJW#gLg`)#Nmn8Pm+8y{^Sw>gfG^IU-WLmZ zPndp0%|6n?%?fTOwSey{lNR1f>u$#QHQ?Fj`8Fd})uvHB5Fh(Uf3q5{tFfRTCOt}T z&STO)$q;k9g0!ZEERuQF2*coI628@&Fu-tA4S>uNNgQyl4~V=8?#$1#8y{GsD(N(4 zOB3f8;)Cmi+&Xo|I&NEN_)oTlS%iFMTd;|?FmbcAg(>DbC2c8;4*Lt?A43OgS{8CY z-5_!2mC0~(u*Ag}uiHn&2>i&dLwj%?LpC_ocYgW|+Cb2t?ZYvQb7h5FS`8qoJJvZD zp{z2rrbd+ZqY@a1CROFD^i@|H)?%=aEeGRXs`ND>Z-$Ss8P8hNQs7~K(=rq?Gi5<{ zg3$5i^3X9%c1_Dgr@0XCyQ5;V-0w=8U>oiZMVcwFVrt(t>OkM&Fxa3HD_d)7=H@kLB?=3;pEL`R zhhXEm*-1@^NIxeJe^U!<(u%)CE|{wwhK8}S%q^`}5g|CSwy;hW^1*je34Ma!oi=cf zAU+MvX$NW{deM%vig66DfaCUH9HS2N^b~MR4dbhsj~OWF!|RN%VLsdl+`@*E=Y|`z z)&bWn+%JA>JICJt3qR9#C{hmzsqI7>seXZeW;?BKPd9++WSgeQj3mTeEUQxM60tRy8ZPZdUHHY1}B)cgKFq z!<`y3JQlm1mA#N*MpV@g)K^b)3=3-W^MC}x^AI~X(;|!P-V%$VtLiVE5ig>-hc&$j zY!a)nyJ2*;zOvX(l~@*iRo_3uG7IWM`OZqcKQFcu)iBAYHVbI#;iw2&TO>FZSX-r> zZ*7wjaqWJ*W8>MMPAbm2a#m*xmG8r$mQ}^E_6$6$(sRWN58WZ7OX48 zjHVyqs((tcUlb(==i9_425p84Z7ziwrdTPjgFOs%(9?XbhYnMvI@r=cCo)BcsZt$m zc%XyTyu=Pur8?NuK&O0)4pXH%*xo<~D}0F^rb>0N+CT@Z`K-QVKKqhO_T|L|UtXE_ zrHDjfcEw#YeTg*zZDLn2Yn#kxQ(SVJSR4J$0IXPp`8Gu)3bQNjF1Gn$tPmVAV_`D=)*i6kO4ijto2~(H?`-JSwE5@=A`OcumRC(`XjY8t zv9fh7fM?FW3-Mecvp+4ggufVmPr6bQ7wK4%ZQecn9q?#&9jcD{Hx2l?T2P20Lv z*go)XJq`E@0=w~MqP+;-PvO@%khN2p5r;L-VX(E>?ltZnpt&*k?5T0%BG4l?KBAagDS9;J^2Z_)hpaPSks zFg+Kn0_PQQq7(`-e^H2SwhMfZz_`HMLWe?Ox0`!BkZMl zW!(SmWmSNC1SSEabZ;4Z@^L^sIF@m*UN2+M%q{;!&`)d1*(Z0GHwKoe2N7|8I#qr; z01IXtYFO!fjb1I05SPq97{Z_IkX&45I*n}`4A3$5+ypKg(;*c$b3{T z6z({o=8A=zampA%o7JR2^Df9P!wrqZ1?sc(05mIUHGaRPDr%=16@%_>wGNzrRacYJ zI<&)3J*j;N@L}y3;EUSF0BiJ518xvFq<^ime*<`x!P51{cL9$WFK`?F6{?c1 z^S7!~4d?__F8C=ts_2J8RRv$h3@Q4ZM@3W(s5uw0ra!n{tpc^)qpnkzf=UWiNu#P8 z_sNGESyRz{Y6t1`kWl^wPpCn7=#)@fv~y}Ns52g=v^d6oPN<_4)l5)xu`40kqFt!n z0BWU2aXlaH@F=e5r=(DBJwN42>iOvoq1>MN>9kO8&jR#{P;SqH^oCG+uu(gRJn*F@ z+pt3?KdR!aCOz&vsdR>v1wZ8$C1Qi4Ix^^e1 zQ=Y6*KMCLe(37?5p9l4lC+mbPLT`Ao9gsyRh-H&)-l%^Sc{K)#ZGKRH7}QEn_7%v= zsoRr%8?tih_hi4-AII$O_hh>9ZBSWHR%4t*EE7tdGov5!z&^v8U)iZe9Jw&=h1Eml|_JgUq;h^P5SWX7t3DgP=}N9R21h<_cZ zIWj9%!Q1>BL2+9nis7dOJ}MB;IpDa^<+$(=76RPo`hN$?kq!O8;JW9-Z^L4v(d~eW zo)-KC!OsaCQLBmXoQ(ok6G!Jpf%gdKe!!G^Q1C|uJ}&Snz~icc{yuQKT1d|X_R`Dr zv%uZzRpBoborM$)en$PCV!C+l@CIVdZ-Af0%CL|=82py1RAUm= z+@FQ&+rj5mi1>aCAv47R`A%(6PpIFh<$(QKH*vl?OY1{%>I7$y?xe2JI@PJJ0_QB< z7BS_=9{5k*`pF7QTmK{%pMNFOEvk0L{|bc4W7 zfxQB+6nKrmNwqaRNcX7GaHW2~iU#NF8|ZNOxVjDY>-0(W{%|AUad3`%oKJ>VfWtbI z>SVZGe^C8H_$c+#bK$l6mGoNpGW~Jb>C*3n{x6t zP9HC82mk)EX8|7){OPh6fd2rR%Qg0AyTA>A96y(rzt1=hPu^nmg7azP8sWzQk5WqT z8wE}XoD_JQz~cgun<%MT>96(IjaE9T`}9`&3;id+59pr-yh}J=6zPCs=~3Z0`d1)5 ztUqsT!du3q>cWa^0X7SMDd0ZgC$Lt&t`ayU-=pQEt)qe;1%ID*LO3UhEuR$rDXH}& zb?HfUMsQMWpA=hAYCylv(6J{;Djh3ZQpJSd0REN6Cc!&__Za&Gj|0Eh$O%3Pe7RI)o`lp{Vx4!{iphejpIg@Z@#a_ zSMNJajVPD-R`^(jvyA&@mH&X_1NW&urMSbT0YkmI#*eGy?k9T303f$=n0KZoFaUY+i zq-cT@X zKt|Ij2B@eJdpwOU61bS=fwM&5GQ8H%XsN&^WL|~c=0b4rgbKVFP{SUv4sZ>uDm>HF zQ>XXm;ER9(^@L{Rcr_`#-VXu`S>aOHW$=Xq6Ze8Tc8Y=*^n{laLsNOr&Z4)>H3$h; z*k0~_5yALD;OsdAKlWV!v&GMIVfrM*bKoT|`6Z8_HU+19I4&Uie%Iqswq)Hl&@TQ``AEDe};DxU7LMn}8$ z$Fu!b;((d$?`rLvfX)`n9(7ReF^8dcFol<`G`Qc!Yu17I_2w1BYyfr+rtsQzUpujS z`*{q~=tQ@fHb>%Flk)FQo%86T@xnV@=*a6{a$BR;L?Ub1G-76l+}@22dHtN)9nmQ5 zH|v$q)3jY%CGtWG?KCPawUgtu*-lr*)8i&}!4X+=Xs9>iWaF6xFt4wzds3OCb(7QT zT4hLslvktflrv^IQ!A!C8yFuC&wK0KWu?<_G2UQ1v@P!J&&G$-rq`d%CJqGLE+nbv zM$D{37Hu`Ntk{KbVrXz;%w&d?gO+=QAmakF(3`~rgPnuDU5nYHCH%#!+S=MX+7@@? zTakgZmE9R16=Q{ZeeqN#KNL#JkkFxG&qv3sjG4(I9?dlMc3GJ$DwsAUEKh>K0;kW+ zjMJ!xv{P>;l|?wF-fJQvT?@o2y?EnKLwT%SMp2}AW{T9FRCa&QLA33-^Ry#Aj4ljG zu}W%sC|C1Pw{-0a%bjiy9mJP4o2^4Mls%N~GaV;BV#1$hCMnitFxl=5CUbU~2{U!j zOnNr*wWqVa`qSC)$gm~dNDL2mUD4NX*;z+yl+s+ely*nfQ5<)N1hR~*gEo(6vsQ+N zhO-$=QHB!&2SN$S_DV=EGJCIRb(?q72jev4NGcJWjg*jVq=a-UacJeoDD%~6TCP161s($0#U}H`Csf&X}KBrl-`6p1+Fr(Kk+< zGTJ_TRgy}?oope+4aRM_z{^=K(Pw7&1Z4U*hYW|b0(T@i=@r$tVNr5TaOx`ZJu}^@_(;ZbFl`7qb9j6NuGnd1 zc4Jnj+Q|!HFKK3qb`Y%NqewD6hZ5$P_^ROP>%F8+?!@y%B*dLX-CgciM4XzpVYtZZ zTiryx#kNL0j+ZkXe4IpH^4^_IAoyjD1VhK4I=XJ$h zFA6!_+XL_|N5v`w*Z{bjgC5)V*4kd=2D_-jQ=Ly@U1>9JPpPoW9JLN&eJo_~yl31& z7pAT-<(@aTnQ06_#^>HSZvO6@*lJtjW5va=I0-$;6o$3g#$wA$<9P+{{jvkokmkV- zppwa}8tsDftx-2QnwgR8enGp&Z5vaY58R#nVP$V7+p&szc`?T}$=meEmM4x)l>14V zyEo!x(8YMBIQo*(D7Oa&_y)Rd8Tj*TG`x_2-9O1IiN!Y9&b;i zfvFs~b@tgzOWZH1f)xirB7^d@rgh5Wx+7puaqdOZ@cb&Pn0v3=WXnC{En4wp(!(&- zSY$XBrmU3HYL&`~D^FqMR}QouPxc&2A?ab#`4*P>LN5_6w8u_m%^mFep3$-F1jjp) ziEKWp&l$nKgFBBk%OwV~6G&PvF1C6dWFIUTX>4u9J-jj&rhapLJh_Y4EW~&U)_Gz| zQ10*M6m~PXGsgsxNzW5vx!ZJ7BgjI9d|$lV^ErATYmVX0v&KjE7loY(JhnJy(i7m; zMUu%*lqf(tI-H)6VRYsR*Ymi;ral+t6R(5Mp1to+&-WC=siM6^&F$sXJmvB*9~_9t zeB-HPv14631~`YNQ}Il;$j$d~(8kxUqjCGdOi`CLHeshm_Rmra!%vPUW)W~p@ysl4 zf!`B$N|v~pEe)o!rD^v(PBRagcsAYIPc|M=#;~2UDN7R+qXf?1GAJ#;v~Y$YjgiCO zF`~>u62n(v7O?%4f)?JvZrCH(7I1AEh3*jEWty-x4%&h2AgH{w3p^98WC3Z-%$ft> zn>fYH;E(&&Lx*6=L@%?j#Qmbt!*~;Qgj(@FD+L*kfgiQ5hej)11)hVJ7V+vRp_^o*srKcL}y;|5R(Sn8HO#_?euYi1}(RK5c|_D7ml5jD7DG+}|q zmxN#XP$IcNYXn%SemlO#nkvovl07Td8?qQF?&c{r2GQ$6`%7Gn>FrLfL7^_X0#?wX zhoP??)=|LlC7s7xQ^3|1FueHor0WY9zL%Sy!03nJNw(jQo^jOR6?lnX&_bmvj}6iKg(J2B zuX)_LO<^9=-n@^Z+%GfA_7ZdeRc#@m&mT)gKDhI1yWcpo2^U^m%@Bi#bMseF!ke zP{>JavZ7)>PW}2O22JEztWkmW?*A6xuXW%`R$jo~sPL1DR#uMUv(Ji(x(ew{En2IM zRzjkpxexd-uG|OEK~;g0>(qt<#v-bSrs^tSXAzG2RBf#ufM)|L$d)UCR0LuMdQnkv zwW5XImT$@tk{l#OXP!4z&2p3!#o<}ubk941B0suPnY%N{Z|3=mD_Wgz$Q*9XZzx-_ zI%KVcm3CSOtoYcrY7lW@iT6?L`jyxiUF!&;Pn3C>zLxQdU8 zSyX#Lz>lJeYVqYl?w-0@{%C+d5`b$%;@RggPqD8(){jN^EI2{L zh^ETQT%Bj!;$;!P%0x8xxCGI{NIqLyp_ zJ|v--`w#S$W1=EJ22W!JKC!Qy^wm~QhH7zqj!?i|rb+XY9X+bYs!hIoU5B=YZ4Cue7&`VVw(he2NXS!|G$?UF5kqjb{~G1;G467?t!~n{{8To zA3oK6%f2m7yixV&-*E(WU9z{^O2~PN6T>5UY{1O&Q;M^9kC|#gu#UubnC4z=MGxSa zU~lIbHs8)(e)@Oz;tz#U%?_B>i z5AfXL!_OSPSIL#uWIo)P!xvst`23D6WVru#@O_YQ{NyhKyQdy}MRqm5=h=oGJMa2? kuv;C%JH9>mF~xS@x&DVefDcH^(1lm9>3`??|L1}K1lVPqMLdMyfva|^T#>hP@>{E}mUAuYZ!>=Cq z;Jr>*Y1Z{~Q4t;@El{cd*H{?t|8=g*EyqKo2@dPacwqOjOL`vOU9)4kcU$c{W`6IH z73Y2O`Cojm=7w{;U2AV2^XVgR{lGhGwtTF@kKCb)^R{i%8^^!))6TOlnf;-@ zSHE@;HNjzB)i>(?|L~uWyyc5m^ssXzofZ*s?HHmuzZku3NCUxuve9u_aNruxY_!Vp>v( zhUP^5wocD$UDDB(OZE4rv&BL@neB?NPZx`sY(mUp3Zj1*QC=OZRx`0#av&< zvc7z}Q0Q3El_?fFTDK88 z-98Xsm(N|6P8BHgc*Wo#Xbak3XjKFu0B%S#04Y3BU<%{=Rv-g`-{}j_@9Y`1lvzkG2 z$Iy%lYT7xF@;-X+s`D=4SWTuTHq8#YAUVhT{a3&7E%7Q&yuvi(f^LuFJ^7a(yi&a3 zTNmclZFRg4++53>)QwT zZwGH>J00H2thxuUKc6F%&p@G=?$sKmJFaid_4ME-WOCVp=bcnBzW&@aV_zoa*QMR< ziK)LhQ|M3jEKe4cOrJGUp-ne3rbi^_*Uf!N8ZXLN^>x+4LjaCQD zy{q4t$#&(gEYxd+HSHO?mu;D3cQ#ijW>TaaJ9sbK^2sa7$lhP$vz0rN=p1!9$%`9Z zZ}2>WYBw4?xxOb?)Unc~>xoc$SmmdZu5PX|l%DInjCPIJU;8CJ%V1`~Hx677@Kt#iFRv|bO6K#)f!g)d3*8-CvlM)U44c8}*8WtsY;9p6>v{QP zmMvP<0o7Yu-cb!B!9LcR<0;tkoz9l)Q^j1~FKajD+ylROUHXC8U1Y!7Ko{;T>LdGo zlkC^&`ft$HU64QC#DX#FXySH23XgeSNw)kQ@OW@HcoO(s@O)L@EtB6vM?DRd6! zi@`>y!=z2|>ga%`dAg3bL%!X`0((_oqP{@kIr7(a{2Uw){sNpxNj1|jIAAJ@=(jR|pVpcWbN zJD$i6B0Ct3cHrhj>Oyu9Qs=-&a`S|3b}*QWZo9x>QoYOBLM!tg#q_34ZlZA0CSw!x zu!p6{O3v{{HWAsxXtW8<=SjEgLpD)CtpnRQ+xknJkCjwNh-0FvpLe#=mMQe*3PX(p z9*r5Ru#FCwRj}ia>?5*|(P$r<$3{)P`GKn2dF*a~B}FsY&WCdIORJcGR=_n1!g1Kf zE6z4TbJAVdK^y$yb?K2UM7A&*ZNcgJZ_riE<@)oXvETtaJeSM-aS3(zm_IIQp7w9e zT<&@B&S9?ggkV0{pGS(B=Lgs{)f&tPf7<53+;iy&;%_&3oI@U`56Q!S{*IYv@$x)A zWAnHZ)SUTeO&+Vrqkc#p{#CV89|4!6N)!8qNW=4DYIxO zUqy1y!S8sL9`(;r|2&%eXE&$$(l}qwakqnjDpyOFjh=V2&&BROkgmT#;tR-#-|XH?gQ?OLu3!5(H`8~W;|pMVU>0^A>X|LQi$=-`89Hhq~i)7!N-%I`!FbfeLB0doX_u% z3zdEC^WoRHvKExDy$+m+r&!~iHN@ZaZK-k|AGdkjX!E$qU=4Y+R`fTgQO*k#TEzv- zfEGY&pdKh3syK0TS2tk%3XMLPzYFLOzJyFLF1l9++LPI2cRDX7=MR1qdC5BdM(sze zys=YzKwVCS!K28B9DaXkw1?!)+(V*$v9Ci_&Hhd4{Gw2Q;uP7LgzTXWp6%E}9Q=y4 zAC1kjBldKfxibzuHY@iDT|Xprdr_V;PhLY`Ggyc{{xoclt^Ga4{(M?_sN5SV^GW2? zPdUEG4x|0sA=_D<9mV^%U#}fHKbLuxz?PgTI9qadR3&2|Xr9Ie?6>+qogMLh;3g*w zgY4*O*&cF|aeR>-MRs(k*^#pq`LUX-^?kQk-~)!|YVl8vANw{?c5x~=3uJ!Q%+1aL z=W-5}65#2e@8{MrvwasnwdQM&hfW^i_xj^h%#2xx4Vmk1A`gw3_@QQgnDNi%Idrbp zx6xQ&<8o!4KaZ`OJQ#ONx*qxrn@6pw$IHa&dh~vnf_&%e=o>xo_IsH|)Dz$8pl52e{{Q z_b%5-$hkm2R$WIS#x6(LQ*sM+)4N@gb^MWSMz%Q`ZPV>3!N0IJvHv|Kx7ays3&uPc z%d5|Gwh`J>@&I=52^hue(j!}lY+*Fog7eGW-l^NzJF5^37969;)f=3ihu+P*jf7j^ z7q3f?^gPn@(WvKc9*1YiK(&W^H}4+1P#Jy)gDIM7J+~P@DEuN5y02%GJFtVhk&}$$ zi)%vU>>>Pa-VPXdAR~Uq6WKy! z3!~8%+_=D;V%QcczMJ=m7T*csae;2X`hCt0LN7CEOxTGH>_SHTjwiB%$PPxM9k?-J zZpaQo>Kv>aYyQ3sefQ^IV`eT^HgN*fVw@w-+i2&(F9G#9!SA@0jsxEblD~fAt#l69 z0WJsM4Yq=R4z`1vK=!hDo53zH32H8@6MPT&s~7i{J_e>Zzs;WC4#Hdd1_*EIN8lFl z$6z=3A}G0+z^$DB7R-Q}lfMl7BX~LZUtkY7(YuxoL3_W?;@U3c3n=%2Cv$!R|2Bdr zLQA1(oS%kYIELe^4Enr1oX;TbY@0TN{Px{LzKZhv`LdXqJLA;TT)Fm^E99t)nw7p^^Y|dBdTa;#dDFqYTj17gtZHjb$D1>jJx)*;q`eonK|3IQ*X}v! zRcIPFu>o2IZHBIb4(FiDcXJF6jPYCI#887wWgPu2@urLA-cfdh{Kz=sRFW z2i}11_>H7X?m5WmZQnRwVR7q%a6Ec@H1=-vwmq52l45*6bhZb6@w)Vp$~q9g@QC1h zgeoig{$yyc#9{OO$&qx)>8*QypQnMIFv|z?cN%&dcY15r^^_ppEuyz`kP*M*8L7NT zcSrn=Y4q(>zn>1iojQ^(Io)+@(wptW_P0X*6VDpe%bo77&Sr{ymp1dBG#_H^%Vqhc z0H?m}JdJ~UIov+fxE_WGr}$w0&ckLVVh_eo(T9jHOsCSBZRsvj)#rC%Co_W`XXD2Y~_uz71!rG{e4!G3Ixp+xxhE0s_UKp_V;!1-KP!dtBT8WOkhZVYth}O zk&}$$i}W{oPBc337Ck4r{jE=FvXj6(SrF>c-;GXx`Q4)a)x43D*wosSNipr{>+o~v z?~}+%&hbV%9O>{|p~LD!6>tK6q4^95uj=XfK%kM#bn(0i?W$tON5&~NLf=hIti*EAU4 zV%lWBp@V+PE-skh`_RrV&JN`EwF|AKY=HcE>zJ9t=G6G$%)gkRH7TtfVIo01d#;J` zO4IC&jp`?U4J(dcc{f1*++xhkGjb}q;5~BXAz8^xrSzD0fq9R7GjaaBPAr%cV#}(j zE1>Tt89C}?*6+Av>SA6~EAi~D_3Vt7|cD|^jL zn?b%oQDV)`i-QFa+0uu>IpED8&pxGlL43&4BOqgO=~#DEdWmd7lMu8 zBCr+Y`KU zwQ?TV0ImU7f~7V6Jh&Fz4z2?~1zrGZE#yM*ad18O3y`)b{QYup7Jr902p+M?mgT=~l1^eje-x?+3Sm4})5pd>kAA$MN>p1b)-P zrzTKz4zvt9)1J40CqfBmHgpy=3t9rrgWeuGKZE0Qp+!&|G#6S8&4U1(R-O|Z{ZOI<|=k%C) zW>^2gtqI;mqxr5y<&g8Pjf1|ewsJmWNFM&PlK;)L@;r{A{guZg^1znV|8PH4pV>hk zHxTdpsxjlYDi5urUI!^mvGtHmqoT&9)rVly*J208hS5*cM|FX+W%SOAgYN-P0j~yU zf#Xbj9z|c%0_odt2~U0J1ag^(!~|;U`kq&j@qLMy@hem>>hHY-Db(6}ab2cfb3v}x zyh}*k^gD8;8KC-(*`WFk`UTT>ECc6rz8Y)*u}l4qQ|VH$5!CfGf!(0`6!hF&-+Mvw zD6w8{`j(G_&79u|wt$1zcPh@7-a9-F(!K%xhRZ3?eCQ;ok@zW)uDhXP8@x=O+&A<4 za)9~$I^k0229)CtXeYEA+5^#W-Zbd#&<03rUE85Mpqt|z>i6Sh7IP_Liw(u_g2zzb3`U{=^z{X!e**c$#k_%Vc_=LrWEdR$We%kVV-KOi_ zNG@s9)z9mEoGtGJ8{cc=+pT=eo`1-e{~60Sg#lCY57~IV#HDlnzO68A&#!m#_WZjx z{Z@Fyx6I;aY(96{`h3^M)3+MFXKecQHvJikzqI+EV)^cK^|t&!x94Zs^NTFbbk}Xq zzwPR4^ZB|>Z@2h6i|YSX@B1v@@2tG~f5ks<<71p7GHeLaB~&3GE}I_=er7?If&3uH zkfT^tm0x~r626rz!4FFIGud0~7kH82Ky4bSnsBXhFO~5=- zx?$3vk~<0xT!gnYI4VDwA+MQb^w{x&-Qju7Tut-3Z+cx&10sCkp?^7C6Z}x<;bfFM)@=w*8Dv zE3(D>z@~M%3@dg=oaDXDq*uXHRpAFfr+RZk=?#k-2#E#SU*XH`reCV^{Eb77*N?Nj z47^iAWsLRQ+aHP_%zLco^EY(KSMl>6Pu^p_@DBMw89&X+qzB8;@6#9=yD{FC;m2G4 zEra}V9JR6D;Eqej@5kF~z<_4iI_WnK#(EWAl&Afitj}X*6N9q){`*+3^2@wV*5|RZ zI5n=F^}Xz|W$o<8Sza8Ua68A~^?w0UcRvb;YYW8bM`hcUg7XbEj*f?qZrV^K-a|C* z|LsB?4DI6j7U@CE^|SO#uD^J}-21_g;yQjm-tS);=!@J~q34m987snHS{&^E{B$cv zzvTK(l|RnNm48ufP}b-1Wt$jh+*qLRkNC2KA98Z_^wX>i)-u2%gckRyI;34W{s&Z zj{5PIfAL^D=pD&1!;GVTnw3comZ5jaj7-@$>c?CD&Ov^?b2FyGIO@k+{?y?0stv2l zuGf$Ac@wm&Ynz?uXSL^V@^tslkF&hAqidTYx>@b+0cALTKi=}wmhOIQuTr&Fc{7uf z^?9sps9m*pgR+Kf>ToiCnlIDHbvvEZdU>@sbRpfz_-R(AYtY`bKFRg(vv}#`{B$da zFXZf0>pRunzKcIj&QG^;_(V}S^jbh;{FM_DnoiL?-1f=dY2Tc}Y}*sql-{M7M|>^E zE==X%1atDMT`umm*Zd>pr6YIl#~$O2r$18I4XK>nKia9ONE3$t=4SiAx_s_3)+D_| zTg$@cWzF>VesK9$F0aOWbc$u9{wnX;`yV`z^7uBb|HbT;%}tA28(Zl;{4jF4M|*2* zxq60Gx$8cBpyh_g%LR)YnwBqEwBq%YJ<-!xpfH1iRra2r9Z(zB+uy2BZb`50RHM`O z+cI70{N{wWsC7}};^qb(atI^00dqRGrH``p=zCpl;Kuv#r+{0U7d5vwEXF_Bf4Rqc zFH12AH=1#hd5TB(d;Pk}32$Yhxw&=GLKRc@)%st@Si?|oDr8RVAGNFEH6L9blvWE3 zm!|w*u|nc?LC1CcVa?2h@-)3OX3fXkSIcIO^)8rs_$IPkPVaaz{FqRlrgyhoJp61s*6Fn_>1fNP`g_@fUWg~NUGepNjV+VyE_7^6 zXX5jH^;qqdxuVYzXp6|4Etmw)V3mvUnlYM--E#4H@PkzVe_ygA5j>-eq zaMA4paXXrI4EA-Dm+8)?^P{7RraP=3jdkJeuG4$z(5Io!yf2=4X?={07MU zLOwNrYdVQ<(AkqqUG7J0$@HWP^Ix|?noN9|)RK;_A-2i$xNn+uX3E%RA)V)ylerx}rgFW#a1{HfWxCjx8ZNqbAl~PDnjOhPA>G^AGmzne zWtF3~p7c+-{yaa)Qct@CeaNV)?G|}gqpl78T7?^p@yl!=lL6ept}%t>D88H$4eD+% z)Zi_LLw@#NNRGlRNJH1fkn*{kOq?UY>A?`>Hcx{t#cyER!~3DGgRqS2Zs2k*;kcaU z5VwcxzJo=hmuZIv+Nz3&!Y5{W-Y(i{Da|*Jb|OpDG#f!R+Xc{t(0XVCbP+TWV#>q# zhfHIb=2R8bylP6_2BxP>)5{+^4w?+f4_Do(f~mirNvA{dr?fwWsu-V|eJfrZIt9}0 znhn)LZ-Y*SPJ?tk@+(e<&VcmH%f1rrDbaosvp$*t<^Rc#*MsOnXc44`L$w>zKH86_ zy=Z1F^(;`@q^F6c&@yN_)C#phE1;FoxzH+THS`Xs9a;mO2b~YCh1NlDR?xkTLev6L J3ml#;@V^KaQ`-Ol literal 0 HcmV?d00001 diff --git a/Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC/bin/Debug/SerialCommChatPocketPC.xml b/Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC/bin/Debug/SerialCommChatPocketPC.xml new file mode 100644 index 0000000..fda579c --- /dev/null +++ b/Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC/bin/Debug/SerialCommChatPocketPC.xml @@ -0,0 +1,24 @@ + + + + +SerialCommChatPocketPC + + + + + + Returns the cached ResourceManager instance used by this class. + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + \ No newline at end of file diff --git a/Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC/obj/Debug/SerialCommChatPocketPC.Form1.resources b/Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC/obj/Debug/SerialCommChatPocketPC.Form1.resources new file mode 100644 index 0000000000000000000000000000000000000000..06c24d06c1cab750788146ce052b37770f3fa530 GIT binary patch literal 180 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 J3ml#;@V^KaQ`-Ol literal 0 HcmV?d00001 diff --git a/Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC/obj/Debug/SerialCommChatPocketPC.vbproj.GenerateResource.Cache b/Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC/obj/Debug/SerialCommChatPocketPC.vbproj.GenerateResource.Cache new file mode 100644 index 0000000000000000000000000000000000000000..3bdf6cbabc16e35cc844572988efa7400c4cbcec GIT binary patch literal 842 zcma)4&1w`u5bkkzCi|1X<{%;HVG$2PmSNWr^s)r9%W5zS(S(qLm)_|b>}>CJ=$esC zo*<_@hesbka*Yq;$)gvoYBb1Z5Nn{Oy1M(Tuj*?N2qAuw@t3Izg~A#n7nW>%%I4fG`;R&F*7=O1Ld)uLpGfCx6_^UMLHO$ zoxa?bA(wepi5|ZLdaG#%jSL>s`3nM63y*&GzF$J#-XTUXYDC)I$< zP#&&En5~fgf81iWtLiUCwZ}&#=CFuI))*>J!@&5p#1FZg8Sn+_bf?blpGQ~dKpIj;w-1XFqBMuEB{TeF=3ME=DKP6o5k1Y9b8VjjCGvf3Tib zaNfU%|LyI|-H2JW+T@!dJ6?A<;?5$^d1BpS5R)huQG=43)3Qqx&uA9!NkCh;1ki7H z__Ci!lY(Z8T*%R&TCDr(Z&AuC&%gBNBKm@FacH+@bjXs1giWzT($1MXJbeEJez-(Cgle4K5a_t@IM07!!I AKL7v# literal 0 HcmV?d00001 diff --git a/Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC/obj/Debug/SerialCommChatPocketPC.xml b/Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC/obj/Debug/SerialCommChatPocketPC.xml new file mode 100644 index 0000000..fda579c --- /dev/null +++ b/Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC/obj/Debug/SerialCommChatPocketPC.xml @@ -0,0 +1,24 @@ + + + + +SerialCommChatPocketPC + + + + + + Returns the cached ResourceManager instance used by this class. + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + \ No newline at end of file diff --git a/Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC/obj/Debug/TempPE/My Project.Resources.Designer.vb.dll b/Chapter02(Serial)/SerialCommChatPocketPC/SerialCommChatPocketPC/obj/Debug/TempPE/My Project.Resources.Designer.vb.dll new file mode 100644 index 0000000000000000000000000000000000000000..47b2a8a22d6eaf6ac853789a08157a39926dbf03 GIT binary patch literal 6144 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 OT0eWU4AZmZDE + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.btnConnect = new System.Windows.Forms.Button(); + this.Label3 = new System.Windows.Forms.Label(); + this.cbbCOMPorts = new System.Windows.Forms.ComboBox(); + this.Label2 = new System.Windows.Forms.Label(); + this.Label1 = new System.Windows.Forms.Label(); + this.mainMenu1 = new System.Windows.Forms.MainMenu(); + this.MenuItem1 = new System.Windows.Forms.MenuItem(); + this.txtMessageToSend = new System.Windows.Forms.TextBox(); + this.txtReceivedMessage = new System.Windows.Forms.TextBox(); + this.SuspendLayout(); + // + // btnConnect + // + this.btnConnect.Location = new System.Drawing.Point(157, 242); + this.btnConnect.Name = "btnConnect"; + this.btnConnect.Size = new System.Drawing.Size(80, 20); + this.btnConnect.TabIndex = 16; + this.btnConnect.Text = "Connect"; + this.btnConnect.Click += new System.EventHandler(this.btnConnect_Click); + // + // Label3 + // + this.Label3.Location = new System.Drawing.Point(3, 247); + this.Label3.Name = "Label3"; + this.Label3.Size = new System.Drawing.Size(59, 20); + this.Label3.Text = "COM Port"; + // + // cbbCOMPorts + // + this.cbbCOMPorts.Items.Add("COM1"); + this.cbbCOMPorts.Items.Add("COM2"); + this.cbbCOMPorts.Items.Add("COM3"); + this.cbbCOMPorts.Items.Add("COM4"); + this.cbbCOMPorts.Items.Add("COM5"); + this.cbbCOMPorts.Items.Add("COM6"); + this.cbbCOMPorts.Items.Add("COM7"); + this.cbbCOMPorts.Items.Add("COM8"); + this.cbbCOMPorts.Items.Add("COM9"); + this.cbbCOMPorts.Location = new System.Drawing.Point(68, 242); + this.cbbCOMPorts.Name = "cbbCOMPorts"; + this.cbbCOMPorts.Size = new System.Drawing.Size(83, 22); + this.cbbCOMPorts.TabIndex = 15; + // + // Label2 + // + this.Label2.Location = new System.Drawing.Point(6, 48); + this.Label2.Name = "Label2"; + this.Label2.Size = new System.Drawing.Size(135, 20); + this.Label2.Text = "Received Message"; + // + // Label1 + // + this.Label1.Location = new System.Drawing.Point(6, 1); + this.Label1.Name = "Label1"; + this.Label1.Size = new System.Drawing.Size(100, 20); + this.Label1.Text = "Message to send"; + // + // mainMenu1 + // + this.mainMenu1.MenuItems.Add(this.MenuItem1); + // + // MenuItem1 + // + this.MenuItem1.Text = "Send"; + this.MenuItem1.Click += new System.EventHandler(this.MenuItem1_Click); + // + // txtMessageToSend + // + this.txtMessageToSend.Location = new System.Drawing.Point(3, 24); + this.txtMessageToSend.Name = "txtMessageToSend"; + this.txtMessageToSend.Size = new System.Drawing.Size(234, 21); + this.txtMessageToSend.TabIndex = 14; + // + // txtReceivedMessage + // + this.txtReceivedMessage.Location = new System.Drawing.Point(3, 71); + this.txtReceivedMessage.Multiline = true; + this.txtReceivedMessage.Name = "txtReceivedMessage"; + this.txtReceivedMessage.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.txtReceivedMessage.Size = new System.Drawing.Size(234, 165); + this.txtReceivedMessage.TabIndex = 13; + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; + this.AutoScroll = true; + this.ClientSize = new System.Drawing.Size(240, 268); + this.Controls.Add(this.btnConnect); + this.Controls.Add(this.Label3); + this.Controls.Add(this.cbbCOMPorts); + this.Controls.Add(this.Label2); + this.Controls.Add(this.Label1); + this.Controls.Add(this.txtMessageToSend); + this.Controls.Add(this.txtReceivedMessage); + this.Menu = this.mainMenu1; + this.Name = "Form1"; + this.Text = "Form1"; + this.Load += new System.EventHandler(this.Form1_Load); + this.ResumeLayout(false); + + } + + #endregion + + internal System.Windows.Forms.Button btnConnect; + internal System.Windows.Forms.Label Label3; + internal System.Windows.Forms.ComboBox cbbCOMPorts; + internal System.Windows.Forms.Label Label2; + internal System.Windows.Forms.Label Label1; + private System.Windows.Forms.MainMenu mainMenu1; + internal System.Windows.Forms.MenuItem MenuItem1; + internal System.Windows.Forms.TextBox txtMessageToSend; + internal System.Windows.Forms.TextBox txtReceivedMessage; + } +} + diff --git a/Chapter02(Serial)/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS/Form1.cs b/Chapter02(Serial)/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS/Form1.cs new file mode 100644 index 0000000..4583fb3 --- /dev/null +++ b/Chapter02(Serial)/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS/Form1.cs @@ -0,0 +1,76 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace SerialCommChatPocketPC_CS +{ + public partial class Form1 : Form + { + private System.IO.Ports.SerialPort serialPort = + new System.IO.Ports.SerialPort(); + + public Form1() + { + InitializeComponent(); + } + + private void DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) + { + txtReceivedMessage.BeginInvoke(new myDelegate(updateTextBox)); + } + + public delegate void myDelegate(); + public void updateTextBox() + { + //---for receiving plan ASCII text--- + txtReceivedMessage.Text = (serialPort.ReadExisting()) + txtReceivedMessage.Text; + txtReceivedMessage.ScrollToCaret(); + } + + private void Form1_Load(object sender, EventArgs e) + { + serialPort.DataReceived += + new System.IO.Ports.SerialDataReceivedEventHandler(DataReceived); + } + + private void MenuItem1_Click(object sender, EventArgs e) + { + try + { + serialPort.Write(txtMessageToSend.Text + "\r"); + txtReceivedMessage.Text = ">" + txtMessageToSend.Text + "\r" + txtReceivedMessage.Text; + txtMessageToSend.Text = string.Empty; + } + catch (Exception ex) + { + MessageBox.Show(ex.ToString()); + } + } + + private void btnConnect_Click(object sender, EventArgs e) + { + if (serialPort.IsOpen) + { + serialPort.Close(); + } + try + { + serialPort.PortName = cbbCOMPorts.Text; + serialPort.BaudRate = 9600; + serialPort.Parity = System.IO.Ports.Parity.None; + serialPort.DataBits = 8; + serialPort.StopBits = System.IO.Ports.StopBits.One; + serialPort.Open(); + MessageBox.Show("Port opened successfully!"); + } + catch (Exception ex) + { + MessageBox.Show(ex.ToString()); + } + } + } +} \ No newline at end of file diff --git a/Chapter02(Serial)/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS/Form1.resx b/Chapter02(Serial)/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS/Form1.resx new file mode 100644 index 0000000..20d2efa --- /dev/null +++ b/Chapter02(Serial)/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS/Form1.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + Pocket_PC + + + True + + \ No newline at end of file diff --git a/Chapter02(Serial)/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS/Program.cs b/Chapter02(Serial)/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS/Program.cs new file mode 100644 index 0000000..f188fc2 --- /dev/null +++ b/Chapter02(Serial)/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS/Program.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace SerialCommChatPocketPC_CS +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [MTAThread] + static void Main() + { + Application.Run(new Form1()); + } + } +} \ No newline at end of file diff --git a/Chapter02(Serial)/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS/Properties/AssemblyInfo.cs b/Chapter02(Serial)/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..43a410f --- /dev/null +++ b/Chapter02(Serial)/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("SerialCommChatPocketPC_CS")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("SerialCommChatPocketPC_CS")] +[assembly: AssemblyCopyright("Copyright © 2006")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("1576a5c7-0d28-4dc0-9ae3-40c2612ffee5")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] + diff --git a/Chapter02(Serial)/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS/Properties/Resources.Designer.cs b/Chapter02(Serial)/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS/Properties/Resources.Designer.cs new file mode 100644 index 0000000..615f667 --- /dev/null +++ b/Chapter02(Serial)/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS/Properties/Resources.Designer.cs @@ -0,0 +1,68 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace SerialCommChatPocketPC_CS.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the Strongly Typed Resource Builder + // class via a tool like ResGen or Visual Studio.NET. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + class Resources + { + + private static System.Resources.ResourceManager _resMgr; + + private static System.Globalization.CultureInfo _resCulture; + + /*FamANDAssem*/ + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + public static System.Resources.ResourceManager ResourceManager + { + get + { + if ((_resMgr == null)) + { + System.Resources.ResourceManager temp = new System.Resources.ResourceManager("SerialCommChatPocketPC_CS.Properties.Resources", typeof(Resources).Assembly); + _resMgr = temp; + } + return _resMgr; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + public static System.Globalization.CultureInfo Culture + { + get + { + return _resCulture; + } + set + { + _resCulture = value; + } + } + } +} diff --git a/Chapter02(Serial)/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS/Properties/Resources.resx b/Chapter02(Serial)/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS/Properties/Resources.resx new file mode 100644 index 0000000..3e18af9 --- /dev/null +++ b/Chapter02(Serial)/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter02(Serial)/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS.csproj b/Chapter02(Serial)/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS.csproj new file mode 100644 index 0000000..33ef99e --- /dev/null +++ b/Chapter02(Serial)/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS.csproj @@ -0,0 +1,93 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {B5F4CD7B-5903-488C-B6C0-A50CF1128A95} + WinExe + Properties + SerialCommChatPocketPC_CS + SerialCommChatPocketPC_CS + {4D628B5B-2FBC-4AA6-8C16-197242AEB884};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + PocketPC + 4118C335-430C-497f-BE48-11C3316B135E + 5.01 + SerialCommChatPocketPC_CS + v2.0 + + + + + true + full + false + bin\Debug\ + DEBUG;TRACE;$(PlatformFamilyName) + true + true + prompt + 512 + 4 + Off + + + pdbonly + true + bin\Release\ + TRACE;$(PlatformFamilyName) + true + true + prompt + 512 + 4 + Off + + + + + + + + + + + + Form + + + Form1.cs + + + + + Designer + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + + + + + + + + + + + \ No newline at end of file diff --git a/Chapter02(Serial)/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS.csproj.user b/Chapter02(Serial)/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS.csproj.user new file mode 100644 index 0000000..76bd09e --- /dev/null +++ b/Chapter02(Serial)/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS.csproj.user @@ -0,0 +1,5 @@ + + + 4118C335-430C-497f-BE48-11C3316B135Ed6518ffb-710f-11d3-99f2-00105a0df099 + + \ No newline at end of file diff --git a/Chapter02(Serial)/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS/bin/Debug/SerialCommChatPocketPC_CS.exe b/Chapter02(Serial)/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS/bin/Debug/SerialCommChatPocketPC_CS.exe new file mode 100644 index 0000000000000000000000000000000000000000..530bfdc79d824fa6f3750570af09966e0125276f GIT binary patch literal 9216 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 U`TKRbroP`JPkuG*dk}&D1CA1n0RR91 literal 0 HcmV?d00001 diff --git a/Chapter02(Serial)/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS/bin/Debug/SerialCommChatPocketPC_CS.pdb b/Chapter02(Serial)/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS/bin/Debug/SerialCommChatPocketPC_CS.pdb new file mode 100644 index 0000000000000000000000000000000000000000..0081b71114fbcde770b7495b55cee01b1ed189da GIT binary patch literal 22016 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

6xH1GoyT0gFH@P`qqUDX6YxKxLNz)u}qv z7sbbl!b`bc1r~!&a0R#o`2K9>S~gH+uLDX~9ZFvhWDk_4KB+C;gIG|x6<{Hl?Vz^j z+x7Q8`Yb!BXLZRz$E{qWXXZvA`)~kgZ9ETN1s{T`8Jh;4qMk2P!XF z#C#|k+Yn5IWk=L@Jz?3EB{0`^J+kKPdSt(_>v0vV^%&X^Rx(nH<(X!F1nTT{t%-79 zlk(>@tOKJxw#McjcupfbufAx_s*hT;Vcid?AY9j)-0a9h5PdA1IX zt;)&9NTL9>h;fm$K$WDysT7Jgy-7SV|^#@uiauRF8CVC zOqpugQ=7CSk=y29=y!Cbx^^To$|HYM^SF*ojG6srK>58N&9$ZwvHoVWKSxzM_oTXu z)9pE{=2-Rq9o$ZaIk09{_0DvDY@r->B+=JT5@R&7v(_pKSGlufjjPJ}cL{as6ykM5 z*UU|Is51mK4zb<6x!oDeVA#)q`rZL5^ zu(wVxBDOw)q?Oly@%oqkR59@9fmW~;==pj-cpUJ5SSgjBFC65rj=E?)Dy9$-J-P=$ zA$8DM}NBj^RPCDNCBz=Pm%@Dw-%ehvzR<;Yx$u*Yr@8n) zb9}Fh-|gD@m5YDEh0k~Vg3I?u$M|Np9r>;NH`lm)Uvu2y;v-cg4kO1(FD@1>E>Hc% za;)+`PefMS%4Gfu14VrwPDs$AM-br_7^YBX6^Ee+LpI0Tch$9{J23&%8K^C!4k24xZbsd;`1t` zYxzyGZIZ!h@)5j$;nQZBN!CvwT+Nf;rjGh;Yf`z)-ff%H$rKLZ6f@7JOSvNM1<-V} zs3@+fMX#uvng`~sbk1UN-b&;0^1wRN)hmC!(hU5egfA1OxiUQ5`ZAB&G6R3`;LC(* zuFQ%;nX{ObN>g-j&HeZ?VVWzmQa)sO&)NqoO~+A((7s%l?#gu)%IW=n&>#$dUAA!ZcS#n@w3xY6PN;wbu4f;(Y`8*W<{? zR9Xy`_Y{rOt)J4O7rK6JNe}XCn1c>)XTr5T^nG~Zv%0x$<%+ecL2Y>U-=v4(@b5%(06QhwNkeL@b>9fvavym#__L<0 zi7jhh+tPj!P6RT1yJwlf{@=O>J}&<+JQo=)|4;X(ankvXH+Bkp(RB})>muCn+K|%j z1~ZS5_89SgiymC=@G#|c{-byMlELNlT>5aBbX1z&8Py*nP49F3JK^FwE2w3nz2Qjy z+gJStR{Nbq>%()U-6lfPVoe_$5x!=Tj$Mga1Y;uf7AmeLBHvz6$-@VDlAKdih zUr+v7?ZN%;eThkG+?Y)5TA%7ko5oaEUm|N7vzd6~&O}#tBD1}hZ~MZCo@8$#+ZaFT zkN<4#CtI0c3qyaeck)g2_)qUftE%FU=X9veMr@7p6V9^!g0K#*&u2np_yu>~U`>*q z#<5xUg@wxV!ZUBoxg1WkpKk?v->aSO5%)0gDCSM?E0k7@CgR@YFf~fPb(O}R86P6A zU%Z|dQchhKt84SXe6Rpe+@9^91FO5*cXZ2g3Z{Z-K>gBL#ta~TLnCo6kiU06;QZhE feNk9@(;P4x)B$@q0hgup2rMd{rJUmw9)bS@+7?&y literal 0 HcmV?d00001 diff --git a/Chapter02(Serial)/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS/obj/Debug/SerialCommChatPocketPC_CS.Form1.resources b/Chapter02(Serial)/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS/obj/Debug/SerialCommChatPocketPC_CS.Form1.resources new file mode 100644 index 0000000000000000000000000000000000000000..06c24d06c1cab750788146ce052b37770f3fa530 GIT binary patch literal 180 zcmX?i>is@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYis@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HY?8UF3kwC-mtTs?xeeEw<~u# zVp{}!%|=M1#cCJjUy3Sg7c+D)j{8Pyx}JuC@u9#kP7E~^7gXs?mEoUT7idFtVuTzB zZernivbDY$PlN^AWYWHoaAwU{CBfEs;X>U)m4=JqmC!k$=T$0R5HxCKcOCuVS})Oj z^osw-=Z~MbfhcMa)&qu+pvf5*Le~6_^i04ya_5E&Gr3IwWAbPk)~Fl}j2(B2?$yq{aw0^O;RDpep?=4voi w=rAOMm;6Fx(KL5>|MTH-u=nlG_gQkGeTfrp@9op~=>gZ4c{|54*Ekx#0qx-N!~g&Q literal 0 HcmV?d00001 diff --git a/Chapter02(Serial)/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS/obj/Debug/SerialCommChatPocketPC_CS.exe b/Chapter02(Serial)/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS/obj/Debug/SerialCommChatPocketPC_CS.exe new file mode 100644 index 0000000000000000000000000000000000000000..530bfdc79d824fa6f3750570af09966e0125276f GIT binary patch literal 9216 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 U`TKRbroP`JPkuG*dk}&D1CA1n0RR91 literal 0 HcmV?d00001 diff --git a/Chapter02(Serial)/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS/obj/Debug/SerialCommChatPocketPC_CS.pdb b/Chapter02(Serial)/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS/obj/Debug/SerialCommChatPocketPC_CS.pdb new file mode 100644 index 0000000000000000000000000000000000000000..0081b71114fbcde770b7495b55cee01b1ed189da GIT binary patch literal 22016 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

6xH1GoyT0gFH@P`qqUDX6YxKxLNz)u}qv z7sbbl!b`bc1r~!&a0R#o`2K9>S~gH+uLDX~9ZFvhWDk_4KB+C;gIG|x6<{Hl?Vz^j z+x7Q8`Yb!BXLZRz$E{qWXXZvA`)~kgZ9ETN1s{T`8Jh;4qMk2P!XF z#C#|k+Yn5IWk=L@Jz?3EB{0`^J+kKPdSt(_>v0vV^%&X^Rx(nH<(X!F1nTT{t%-79 zlk(>@tOKJxw#McjcupfbufAx_s*hT;Vcid?AY9j)-0a9h5PdA1IX zt;)&9NTL9>h;fm$K$WDysT7Jgy-7SV|^#@uiauRF8CVC zOqpugQ=7CSk=y29=y!Cbx^^To$|HYM^SF*ojG6srK>58N&9$ZwvHoVWKSxzM_oTXu z)9pE{=2-Rq9o$ZaIk09{_0DvDY@r->B+=JT5@R&7v(_pKSGlufjjPJ}cL{as6ykM5 z*UU|Is51mK4zb<6x!oDeVA#)q`rZL5^ zu(wVxBDOw)q?Oly@%oqkR59@9fmW~;==pj-cpUJ5SSgjBFC65rj=E?)Dy9$-J-P=$ zA$8DM}NBj^RPCDNCBz=Pm%@Dw-%ehvzR<;Yx$u*Yr@8n) zb9}Fh-|gD@m5YDEh0k~Vg3I?u$M|Np9r>;NH`lm)Uvu2y;v-cg4kO1(FD@1>E>Hc% za;)+`PefMS%4Gfu14VrwPDs$AM-br_7^YBX6^Ee+LpI0Tch$9{J23&%8K^C!4k24xZbsd;`1t` zYxzyGZIZ!h@)5j$;nQZBN!CvwT+Nf;rjGh;Yf`z)-ff%H$rKLZ6f@7JOSvNM1<-V} zs3@+fMX#uvng`~sbk1UN-b&;0^1wRN)hmC!(hU5egfA1OxiUQ5`ZAB&G6R3`;LC(* zuFQ%;nX{ObN>g-j&HeZ?VVWzmQa)sO&)NqoO~+A((7s%l?#gu)%IW=n&>#$dUAA!ZcS#n@w3xY6PN;wbu4f;(Y`8*W<{? zR9Xy`_Y{rOt)J4O7rK6JNe}XCn1c>)XTr5T^nG~Zv%0x$<%+ecL2Y>U-=v4(@b5%(06QhwNkeL@b>9fvavym#__L<0 zi7jhh+tPj!P6RT1yJwlf{@=O>J}&<+JQo=)|4;X(ankvXH+Bkp(RB})>muCn+K|%j z1~ZS5_89SgiymC=@G#|c{-byMlELNlT>5aBbX1z&8Py*nP49F3JK^FwE2w3nz2Qjy z+gJStR{Nbq>%()U-6lfPVoe_$5x!=Tj$Mga1Y;uf7AmeLBHvz6$-@VDlAKdih zUr+v7?ZN%;eThkG+?Y)5TA%7ko5oaEUm|N7vzd6~&O}#tBD1}hZ~MZCo@8$#+ZaFT zkN<4#CtI0c3qyaeck)g2_)qUftE%FU=X9veMr@7p6V9^!g0K#*&u2np_yu>~U`>*q z#<5xUg@wxV!ZUBoxg1WkpKk?v->aSO5%)0gDCSM?E0k7@CgR@YFf~fPb(O}R86P6A zU%Z|dQchhKt84SXe6Rpe+@9^91FO5*cXZ2g3Z{Z-K>gBL#ta~TLnCo6kiU06;QZhE feNk9@(;P4x)B$@q0hgup2rMd{rJUmw9)bS@+7?&y literal 0 HcmV?d00001 diff --git a/Chapter02(Serial)/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS/obj/SerialCommChatPocketPC_CS.csproj.FileList.txt b/Chapter02(Serial)/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS/obj/SerialCommChatPocketPC_CS.csproj.FileList.txt new file mode 100644 index 0000000..7f9b872 --- /dev/null +++ b/Chapter02(Serial)/SerialCommChatPocketPC_CS/SerialCommChatPocketPC_CS/obj/SerialCommChatPocketPC_CS.csproj.FileList.txt @@ -0,0 +1,8 @@ +obj\Debug\ResolveAssemblyReference.cache +obj\Debug\SerialCommChatPocketPC_CS.Form1.resources +obj\Debug\SerialCommChatPocketPC_CS.Properties.Resources.resources +obj\Debug\SerialCommChatPocketPC_CS.csproj.GenerateResource.Cache +bin\Debug\SerialCommChatPocketPC_CS.exe +bin\Debug\SerialCommChatPocketPC_CS.pdb +obj\Debug\SerialCommChatPocketPC_CS.exe +obj\Debug\SerialCommChatPocketPC_CS.pdb diff --git a/Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS.sln b/Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS.sln new file mode 100644 index 0000000..0942811 --- /dev/null +++ b/Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SerialCommChat_CS", "SerialCommChat_CS\SerialCommChat_CS.csproj", "{DEBC6FA8-87D2-45E9-A52F-074096E22D30}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {DEBC6FA8-87D2-45E9-A52F-074096E22D30}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DEBC6FA8-87D2-45E9-A52F-074096E22D30}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DEBC6FA8-87D2-45E9-A52F-074096E22D30}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DEBC6FA8-87D2-45E9-A52F-074096E22D30}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS.suo b/Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS.suo new file mode 100644 index 0000000000000000000000000000000000000000..a5b97f5ddf495efc4873f24a24b1dd130bc01d48 GIT binary patch literal 19968 zcmeI4TWnlM8OP5iX_~f_v`Gjdgk%Y!B(!#I$1zUQOYF6sq&SymlQ__Yu(6MwjlEv8 zyUs;Pq3Q!yQFv)dBfX4eyU>R^1@DAW^;2z+ez`ek7fZ=yO2;2{>09FF4 zfOi3_fp-IIfVF_+L$HqP_W|pH4L}rlKd=$_0H8W5-r3$Yj|<6xLr#XjJY&)COmfaT z=NO6bWi?Xc(Wf!5RW7dl!$e&=khCMw>o#sYcx zb*`uo@Idmba@a{aIcMA%bW)u2&Jm6-GY6Wo>4Va`3&_x3p@jC-~8-zQ=hwc{}-Jvr8oS?`3aA%sr)@AFL7gw ze3l#Ak?6||Pp93c%uJePnWaVnTA|I2VGk4!Nn8eeUE~bkKFn zk%DR}?`ET0qcPcnxfFf>XCQ`@Cy?L_k~EE!xW=02oGA8f63L1hyOPJkrMMr%>Lid+ z7a2_>R|lyzjEp6D<09Krre21cVeFrTZW%P_9HuX_|I<29`oMPripLD*EHov-J&f$T zb#d$aXan|N@}gKpr5t}R+T=pRI6TN0Ugc}ju^Ia-dn(%)w*QK+{t2j*Zt!#d8`jm6X$hO_Q{Y!OKCeTq8%~{x~C%fs%wXz&XqN!yF|~Ic$`?WWwp;y*QTR zFM;J9p+#{lfkd99uKJ;xQKtil(as3>QEa>Qb4x54b3Uq_Nxxlw3{$r`!gNF*d$T(*h^XlcH2J}z1N3nv6^xbO6q>;X&q0Q<|sb* z?7ID0vCX20?AaP1EdTxeuPyP_< z{zv3bH7^R=|0s1&7X<78HtrNYNxsVBF6#KvSt|J;plJTLl6T6%gvI}1>S~T+N*hwq zg=}>2*XL|SDxSuzS?8QGCP`$a`Lhl^&$KJX`$UL3t*C3x1PGeqU*Jwb>Im%x1*w{R zmjdK<2er8VueGnv&_7x+7mZg#<2w30uo!EKC;uBE{PyzAns zo4+petj+0KN}g60WSYU$^hAF6m#=iLcLAGdU~ulcnVr%!ew%;w#ygRF2XOoiYdb4e~7wk zv6(7I&_7{K8k0XVYxAsK35xpdw>si~4PN0^DZUB5^7nra+B0HsPtxZJsL@#Z@v7BLiK(;V<*QL z;XsQC!P-rL-p;*3vg5N-sr<_{H05X8*ZfcOX^TA^e!u*QZ~p>wW7)%$vk5O%I)chM z9;HWZCb-eDRylS>ex&g-7uuEi%8awiX6hl`3ePt+rZSq&Coygy;?1hzo`HN8*3`#BgQ(JQE_vC*gT60o- z8W#W4)cvjfd{(opy;sbl8Sfa@Q1-We5qd&Ag{h0EMq3sZ09U?FYSTx9pJ&%b%zTeGox`*QkcC6ndeSUjf8R`5JVavE|8 z@nAMHuOov(59qU{{3=lh4H+y8Wy%Dr!?QT*>n@ zg-A0&wyuLNv;o_AS4`;JT#UDBZn4|QdfhD^r6_ejCokjUl8vbRaj;SuuQxP@?jg@p z^o4feLVGT>v%=0rihD3hBdLY!jZKV=LxEpTv{={yh>zz?214uPt$T>W#Wx&+_Y0X+1x^yRR#~{`LPHQtFL~t}SnsZSnKA zwQQe^{~Lcls{5~n;=A3~=+UeUX(`S2y+@yXY!TwI{#aa_ghP~D-R>(F)hxF!2fPgk zj#HTt2_gRTp8p7g(_hEijN*TGP1n^oOXmof8{LPZ{UpWRCN@AXP1oNESzfJ^yA)+Y{vGclX9)FTu!LJ3Bd_(OvzB+s>HmRPhu);rQwP#&U|1 zUqy_gto12IR0L#q+#KO|DLa|h9b(lmMr5L*^|N*&bFH-PEL>@YQR@+kgDgF1&c#(j z^O}R++t|cq{he%(uSB`dnB8f1E@F4-hnYvU(vrWmN-VSc8h!W_n?1*UQ{p_E=EYu~ zjTVP4HaX;*i`yC36!NAO`xIww!0X{C1Frq!6Uev(x1E)l_JyO${<@(WCHj^0^`pe* zcl?~V*>X>Q+Ip@lZ%XrXH&PEli1+^0ixAaIs{9Wz CDkw?- literal 0 HcmV?d00001 diff --git a/Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS/Form1.Designer.cs b/Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS/Form1.Designer.cs new file mode 100644 index 0000000..92071a5 --- /dev/null +++ b/Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS/Form1.Designer.cs @@ -0,0 +1,211 @@ +namespace SerialCommChat_CS +{ + partial class Form1 + { + ///

+ /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.Label2 = new System.Windows.Forms.Label(); + this.txtPhoneNumber = new System.Windows.Forms.TextBox(); + this.btnDialNumber = new System.Windows.Forms.Button(); + this.GroupBox1 = new System.Windows.Forms.GroupBox(); + this.btnAnswerCall = new System.Windows.Forms.Button(); + this.txtDataReceived = new System.Windows.Forms.RichTextBox(); + this.btnDisconnect = new System.Windows.Forms.Button(); + this.btnConnect = new System.Windows.Forms.Button(); + this.lblMessage = new System.Windows.Forms.Label(); + this.btnSend = new System.Windows.Forms.Button(); + this.txtDataToSend = new System.Windows.Forms.TextBox(); + this.cbbCOMPorts = new System.Windows.Forms.ComboBox(); + this.Label1 = new System.Windows.Forms.Label(); + this.GroupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // Label2 + // + this.Label2.AutoSize = true; + this.Label2.Location = new System.Drawing.Point(6, 22); + this.Label2.Name = "Label2"; + this.Label2.Size = new System.Drawing.Size(78, 13); + this.Label2.TabIndex = 10; + this.Label2.Text = "Phone Number"; + // + // txtPhoneNumber + // + this.txtPhoneNumber.Location = new System.Drawing.Point(85, 19); + this.txtPhoneNumber.Name = "txtPhoneNumber"; + this.txtPhoneNumber.Size = new System.Drawing.Size(99, 20); + this.txtPhoneNumber.TabIndex = 9; + // + // btnDialNumber + // + this.btnDialNumber.Location = new System.Drawing.Point(190, 17); + this.btnDialNumber.Name = "btnDialNumber"; + this.btnDialNumber.Size = new System.Drawing.Size(75, 23); + this.btnDialNumber.TabIndex = 11; + this.btnDialNumber.Text = "Dial Number"; + this.btnDialNumber.UseVisualStyleBackColor = true; + this.btnDialNumber.Click += new System.EventHandler(this.btnDialNumber_Click); + // + // GroupBox1 + // + this.GroupBox1.Controls.Add(this.Label2); + this.GroupBox1.Controls.Add(this.btnAnswerCall); + this.GroupBox1.Controls.Add(this.txtPhoneNumber); + this.GroupBox1.Controls.Add(this.btnDialNumber); + this.GroupBox1.Location = new System.Drawing.Point(12, 290); + this.GroupBox1.Name = "GroupBox1"; + this.GroupBox1.Size = new System.Drawing.Size(352, 50); + this.GroupBox1.TabIndex = 22; + this.GroupBox1.TabStop = false; + this.GroupBox1.Text = "Bluetooth Handset"; + // + // btnAnswerCall + // + this.btnAnswerCall.Location = new System.Drawing.Point(271, 17); + this.btnAnswerCall.Name = "btnAnswerCall"; + this.btnAnswerCall.Size = new System.Drawing.Size(75, 23); + this.btnAnswerCall.TabIndex = 12; + this.btnAnswerCall.Text = "Answer Call"; + this.btnAnswerCall.UseVisualStyleBackColor = true; + this.btnAnswerCall.Click += new System.EventHandler(this.btnAnswerCall_Click); + // + // txtDataReceived + // + this.txtDataReceived.Location = new System.Drawing.Point(12, 63); + this.txtDataReceived.Name = "txtDataReceived"; + this.txtDataReceived.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.Vertical; + this.txtDataReceived.Size = new System.Drawing.Size(352, 168); + this.txtDataReceived.TabIndex = 21; + this.txtDataReceived.Text = ""; + // + // btnDisconnect + // + this.btnDisconnect.Location = new System.Drawing.Point(291, 5); + this.btnDisconnect.Name = "btnDisconnect"; + this.btnDisconnect.Size = new System.Drawing.Size(75, 23); + this.btnDisconnect.TabIndex = 20; + this.btnDisconnect.Text = "Disconnect"; + this.btnDisconnect.UseVisualStyleBackColor = true; + this.btnDisconnect.Click += new System.EventHandler(this.btnDisconnect_Click); + // + // btnConnect + // + this.btnConnect.Location = new System.Drawing.Point(210, 5); + this.btnConnect.Name = "btnConnect"; + this.btnConnect.Size = new System.Drawing.Size(75, 23); + this.btnConnect.TabIndex = 19; + this.btnConnect.Text = "Connect"; + this.btnConnect.UseVisualStyleBackColor = true; + this.btnConnect.Click += new System.EventHandler(this.btnConnect_Click); + // + // lblMessage + // + this.lblMessage.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.lblMessage.Location = new System.Drawing.Point(12, 37); + this.lblMessage.Name = "lblMessage"; + this.lblMessage.Size = new System.Drawing.Size(352, 23); + this.lblMessage.TabIndex = 18; + // + // btnSend + // + this.btnSend.Location = new System.Drawing.Point(289, 261); + this.btnSend.Name = "btnSend"; + this.btnSend.Size = new System.Drawing.Size(75, 23); + this.btnSend.TabIndex = 17; + this.btnSend.Text = "Send"; + this.btnSend.UseVisualStyleBackColor = true; + this.btnSend.Click += new System.EventHandler(this.btnSend_Click); + // + // txtDataToSend + // + this.txtDataToSend.Location = new System.Drawing.Point(12, 237); + this.txtDataToSend.Multiline = true; + this.txtDataToSend.Name = "txtDataToSend"; + this.txtDataToSend.Size = new System.Drawing.Size(273, 47); + this.txtDataToSend.TabIndex = 16; + // + // cbbCOMPorts + // + this.cbbCOMPorts.FormattingEnabled = true; + this.cbbCOMPorts.Location = new System.Drawing.Point(122, 7); + this.cbbCOMPorts.Name = "cbbCOMPorts"; + this.cbbCOMPorts.Size = new System.Drawing.Size(80, 21); + this.cbbCOMPorts.TabIndex = 15; + // + // Label1 + // + this.Label1.AutoSize = true; + this.Label1.Location = new System.Drawing.Point(12, 10); + this.Label1.Name = "Label1"; + this.Label1.Size = new System.Drawing.Size(104, 13); + this.Label1.TabIndex = 14; + this.Label1.Text = "Available COM Ports"; + // + // Form1 + // + this.AcceptButton = this.btnSend; + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.SystemColors.Control; + this.ClientSize = new System.Drawing.Size(378, 349); + this.Controls.Add(this.GroupBox1); + this.Controls.Add(this.txtDataReceived); + this.Controls.Add(this.btnDisconnect); + this.Controls.Add(this.btnConnect); + this.Controls.Add(this.lblMessage); + this.Controls.Add(this.btnSend); + this.Controls.Add(this.txtDataToSend); + this.Controls.Add(this.cbbCOMPorts); + this.Controls.Add(this.Label1); + this.Name = "Form1"; + this.Text = "Serial Chat"; + this.Load += new System.EventHandler(this.Form1_Load); + this.GroupBox1.ResumeLayout(false); + this.GroupBox1.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + internal System.Windows.Forms.Label Label2; + internal System.Windows.Forms.TextBox txtPhoneNumber; + internal System.Windows.Forms.Button btnDialNumber; + internal System.Windows.Forms.GroupBox GroupBox1; + internal System.Windows.Forms.Button btnAnswerCall; + internal System.Windows.Forms.RichTextBox txtDataReceived; + internal System.Windows.Forms.Button btnDisconnect; + internal System.Windows.Forms.Button btnConnect; + internal System.Windows.Forms.Label lblMessage; + internal System.Windows.Forms.Button btnSend; + internal System.Windows.Forms.TextBox txtDataToSend; + internal System.Windows.Forms.ComboBox cbbCOMPorts; + internal System.Windows.Forms.Label Label1; + } +} + diff --git a/Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS/Form1.cs b/Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS/Form1.cs new file mode 100644 index 0000000..09d7424 --- /dev/null +++ b/Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS/Form1.cs @@ -0,0 +1,123 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace SerialCommChat_CS +{ + public partial class Form1 : Form + { + private System.IO.Ports.SerialPort serialPort = + new System.IO.Ports.SerialPort(); + + public Form1() + { + InitializeComponent(); + } + + private void btnConnect_Click(object sender, EventArgs e) + { + if (serialPort.IsOpen) + { + serialPort.Close(); + } + try + { + serialPort.PortName = cbbCOMPorts.Text; + serialPort.BaudRate = 9600; + serialPort.Parity = System.IO.Ports.Parity.None; + serialPort.DataBits = 8; + serialPort.StopBits = System.IO.Ports.StopBits.One; + // serialPort.Encoding = System.Text.Encoding.Unicode; + serialPort.Open(); + lblMessage.Text = cbbCOMPorts.Text + " connected."; + btnConnect.Enabled = false; + btnDisconnect.Enabled = true; + } + catch (Exception ex) + { + MessageBox.Show(ex.ToString()); + } + } + + private void DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) + { + txtDataReceived.BeginInvoke(new myDelegate(updateTextBox)); + } + + public delegate void myDelegate(); + public void updateTextBox() + { + //---for receiving plan ASCII text--- + //txtDataReceived.AppendText(serialPort.ReadExisting()); + //txtDataReceived.ScrollToCaret(); + + //---UNICODE work-around--- + int bytesToRead = serialPort.BytesToRead; + char[] ch = new char[bytesToRead]; + int bytesRead = 0; + bytesRead = serialPort.Read(ch, 0, bytesToRead); + string str = new string(ch, 0, bytesRead); + txtDataReceived.AppendText(str); + txtDataReceived.ScrollToCaret(); + } + + private void btnDisconnect_Click(object sender, EventArgs e) + { + try + { + serialPort.Close(); + lblMessage.Text = serialPort.PortName + " disconnected."; + btnConnect.Enabled = true; + btnDisconnect.Enabled = false; + } + catch (Exception ex) + { + MessageBox.Show(ex.ToString()); + } + } + + private void btnSend_Click(object sender, EventArgs e) + { + try + { + serialPort.Write(txtDataToSend.Text + Environment.NewLine); + txtDataReceived.AppendText(">" + txtDataToSend.Text + Environment.NewLine); + txtDataReceived.ScrollToCaret(); + txtDataToSend.Text = string.Empty; + } + catch (Exception ex) + { + MessageBox.Show(ex.ToString()); + } + } + + private void Form1_Load(object sender, EventArgs e) + { + // set the event handler for the DataReceived event + serialPort.DataReceived += + new System.IO.Ports.SerialDataReceivedEventHandler(DataReceived); + + // display all the serial port names on the local computer + string[] portNames = System.IO.Ports.SerialPort.GetPortNames(); + for (int i = 0; i <= portNames.Length - 1; i++) + { + cbbCOMPorts.Items.Add(portNames[i]); + } + btnDisconnect.Enabled = false; + } + + private void btnDialNumber_Click(object sender, EventArgs e) + { + serialPort.Write("ATDT " + txtPhoneNumber.Text + Environment.NewLine); + } + + private void btnAnswerCall_Click(object sender, EventArgs e) + { + serialPort.Write("AT*EVA" + Environment.NewLine); + } + } +} \ No newline at end of file diff --git a/Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS/Form1.resx b/Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS/Form1.resx new file mode 100644 index 0000000..19dc0dd --- /dev/null +++ b/Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS/Form1.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS/Program.cs b/Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS/Program.cs new file mode 100644 index 0000000..3fc30a2 --- /dev/null +++ b/Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS/Program.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace SerialCommChat_CS +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form1()); + } + } +} \ No newline at end of file diff --git a/Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS/Properties/AssemblyInfo.cs b/Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..710f252 --- /dev/null +++ b/Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("SerialCommChat_CS")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("SerialCommChat_CS")] +[assembly: AssemblyCopyright("Copyright © 2006")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("6cbcfd0b-b0bd-4c55-a0c8-265162b1f734")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS/Properties/Resources.Designer.cs b/Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS/Properties/Resources.Designer.cs new file mode 100644 index 0000000..9b350a7 --- /dev/null +++ b/Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace SerialCommChat_CS.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SerialCommChat_CS.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS/Properties/Resources.resx b/Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS/Properties/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS/Properties/Settings.Designer.cs b/Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS/Properties/Settings.Designer.cs new file mode 100644 index 0000000..396720a --- /dev/null +++ b/Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace SerialCommChat_CS.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS/Properties/Settings.settings b/Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS/SerialCommChat_CS.csproj b/Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS/SerialCommChat_CS.csproj new file mode 100644 index 0000000..692ae00 --- /dev/null +++ b/Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS/SerialCommChat_CS.csproj @@ -0,0 +1,78 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {DEBC6FA8-87D2-45E9-A52F-074096E22D30} + WinExe + Properties + SerialCommChat_CS + SerialCommChat_CS + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + Form + + + Form1.cs + + + + + Designer + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + \ No newline at end of file diff --git a/Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS/bin/Debug/SerialCommChat_CS.exe b/Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS/bin/Debug/SerialCommChat_CS.exe new file mode 100644 index 0000000000000000000000000000000000000000..3fcd6d0531533df91f2f79206ab0237c9350cbea GIT binary patch literal 24576 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 TBcLY!&!}P9UAq3eeA)j4ZC9R* literal 0 HcmV?d00001 diff --git a/Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS/obj/Debug/SerialCommChat_CS.Form1.resources b/Chapter02(Serial)/SerialCommChat_CS/SerialCommChat_CS/obj/Debug/SerialCommChat_CS.Form1.resources new file mode 100644 index 0000000000000000000000000000000000000000..06c24d06c1cab750788146ce052b37770f3fa530 GIT binary patch literal 180 zcmX?i>is@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYis@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYPPLRo7^bn#kic2*_s z7nJ-=f1@AMe`se!8j2%IMsPIR**$w^jy&Jl z=5-}|atZhj@?)4oE+J19AWLajz}vCXfEyEmaH{etNd7)n7E)*IBJf{T6E0JgbT#6P zL&j&EVzn*#kD}Vks|7lkB_pFXT~EWnNggm;7>Qs)$#?JcXcbgBF6KPP= zhzUZ@`qgGVb$^$ZO6Pf)P5o#*Zaf;h;2&W(Bgn-JwwBhlKzC-O$`r`;r5fBRbQqDr st9~i6Y??c~KiK{py#4vz_gQkOeU%e#?}PtC4Tn@)Aqyk(X}nvIF8nK9Ih4nA~~`h2STiu?Moy}kz_jtQ+w~dYw0Fe zcjeu^wiGpv)R;`&3~4ZgM}RhAXdxYjkn#x66bgX`2oxA5p)F}BgieP?$dGiJHaPvx z+1>k)+zg%Rbo#g}@7e#H|NQ4a=lkEg*F$f-n?gj?fcxc_i9U@dUweeUGMPtqbNgqT z=@YTXH+)(RKE7dmGVkcqwl!fJQ+n1Y7A;rLn7Umm>iMGHKRl*SSvfPce0ltG-}J}; z(Vz;^#|uV(P}|egteRAms1p+1lis!8PakJ~k0-yx^P45?zg+i$Le7^aVlcu7&vLft zbi?jpP8}!O&p<4`=82X;c6J}prHk`kiPwn`LHUY;=MaJ`<(e}tn0F*Wbljb|#ZNr_ zONUn}+p)9Y#kb=~u+ARbRo5O!Qnp#Jpvb<`JZ{z-!CiIjA?mGS>&ZF-bp+}N)Dfs7 zP)DGSKplZP0(AuH2-Feye}urae<kS{B{5k!qYc+_|3K9>`v#M91=}L-p ztn5_O1UpcM9ngmOl@#vSNZLFz$k*sfLZPiq+8k0`*OjU*9^TeWp1@ioj%lGJ z;)}z-P-g>uErNo4Y0j%4y%p~f8Z>7eCmSV+Lx23%uq4-W68caOX;hMzu{2hZBKAN5 zP9rIHaV`&}%OxpQG)uCbEv%^M;^^L>&2dGRjw~SLJ?7ZCHfw{(gt@f6)!7Kv+EkI* z!vNO0ydr2n(7xQ+%vx7e3FFqQE1dmiE`wJQsBDhoZa>(*vc@tC?bB73MJwCBs>ZSi zV}WHxO@9Q~wzt&SV!3@!l`R&uU*FzVV@rfh)wb-1s=VavHfxLLGBetRFyIV39S~XQ z4jhVLh#nl*1TG7mdy$yi@FHRk;Oy7vkS`!`DX+KsK9Sij1P;1{_6Clgm zTY~_ZYqe4p2kjqLMaypLE7(RYlq|QEsx&wYmOv@OWkF3+W<8fldbP2j3?(yw65X*D zO77w9%i6E2iIs)+j;iWeu*Q0gXO|fXT>mgSK~3ypZFS(0m^oPG5sx8#6T)3rQyq)# z!&TL>U`ezhTou@sGR`8~1=tK4CM z-ok_6H8q_{tX&d##1maTEe5vpTv@$4v&Ib33tm{3HPE}3Hw?r;fAP{ zFp9MjM!=WYX@s8iRw_vcFkA@3w%22l*NE#fleb#0tuPjL7MROhlb$RoY{y;Ns#|&S z*PLsSeQOIRldoq@tfH8`@vno{VPEnsbUiGmEm$O2$+`|Y*qSs&WV;}uJyOh9(B>qR z9>}a-&hX0V^FZ9{s|Z@H{t9!MHBe#Nti2V++UKPi)hg5WK}KXh@`AaU8=}=pd)nMi zZ5~5UwZtiGy#X1?>p`xdr#LiHz?WzP-TOIefwSr+ILZx zV6iLXFodjl_^pUYHMK7Df{e6=tpkuRi?l|aVI-D&He=QZ7{3DR22OV{w#VQBfCh*@ zxPqiM=LIX+jzZa&G&eA*lb>qq_{1nb4B==wn~)^&*IcNf*I%}J-^c1w;i5pc)Z zS1$mU@CM(3%WImDSVVlVDk;MZi{^NVqQBmBY=AK;AUK&ylue0qvoH?lX$ zBcSotrYm0s$E2^JNIV?5*LoA4S5Tzw#->R4u6)~(3!1lwexe4Wjt}@~+kYqlp-~&G zO4t&Rgxzr}P<$`rzX+6$n<$CRV4PZ$zrzm)PKT3dQM7Ha507#jXA-DD_Th(k+a69H zhmMP8*XB8=<1#I2K!PqQ*C#-~_4Q{TQFy)$cVTSSam}gJsOeZGJ8L@S)Tn9XOna+7 zCcHFwzEMA-0 zwaeI%-LbQ4_f_3y=heG6Ev>9nbn{bYQ2UtaYT~9xMtb`BAN%~j)$iW1H}ooEw7qYF zrx?5)ox8SU-5_eD0_f#v$W3R6?#6Qv6V0YE*UlFw9M<@|l{g0ilT8Q5==agSJgscn zcQB3FjouA@6=vB@y#*`7%DAAa4zK=zia}2Qs;(mFaP646crGCH32MW=8aMidJW(x| zD}R4xeay)s^E{9H5rpYZI*Ts&AvzChA3?gAzDJKB{Sy5QbemeEn(002b`_^@sPoW# zQs}cn8#I<|7CHyoOdrzTrG@DW8rykN(l>|B!p@A)Cqj>g!t}h*tqsc?!gP($0}U*n z5c+#U-!Jr2LccBamqMEwS#w9@#>U$yjgbh;jW;%i>D{2s^sUBEA^i+;!=!~-zCO&g zZxp&W{Aj3|GU3}1(Hv-)?u9%~e;Pgy6rT(~7EaLfpmACgVKlCboTZP`A&k>Fy#9YrOwA0;iuw{pe4ONz?9qb64J3mH43M|?V}-zq4gU{ zLpHA(%i-lEG>-}NCge4OTZO`xkd1OJ;8ue!LmRiyZlI&+gQ^qdzoT}8KCP|={b$t! zx?CFoZPPg2rKLf8Bt0zjjT-BllAhAI)LCr^^lr!%{ke7n?B5@nqY)i0(d}!}DgpUX z;ocq{R;}PZ=yO@M4&3K_&QdzKuL$=QdQf$vFTW(*0zC{XA^LWbaNQv`L-f3G3-mSZ zAo8Bx!g&kyyml0^za-opq(TX-93wK3F3^h5L2%#nxlQ0=l)KU^*9ESLzV36c1Gk)h z?QuJ@<%cJ72PfLZ!zRG`Ug-&|5a%NeNUrFP(_xcS)ynr{vJxJ zb9BGZ2ZTNZ+D)I4^p}J_CiFW(e<1WnLjOtVb3$JPy^CTht?r=~&;+doy_YsfdW+B) zbQ091y2C#O9S%QBTOfG>cUr~O5%nN)Tck(yh-O;o4ML9yHH7B9wE8H|NS8H~IZxs#DzbxxHc`_&Pe zMXo{bjSORqd@6EC-LJk2$ph-=pe@uAeY5%u%I4IU)b8j_pvR&o)pyj{=nU-K8$F|1 z=)=)&(1)XJ`HN9lQ;$azbW(h75qgq-5`Bw0NzX!Vs28H=kiHOw&(svV2edu*R!BM| zy(jh#q=#Y&dQKgQy%#o*$GXv<3$b(RMfKL${gB)ddJsB)5_=f*v$4;q=iuR&;rU<0 z(6Z|5D0`Bgg#HHYx!4b&^Bc(7+7F=_ivL7y(HM=Bl#Kr)a(Bmnsq%C<{%h5xl_D>y z-N;Q~Zuleg)*kJlc%#;%eJ>u@(%R4BMQwvbw1u#hRw>#4Z04q zM~Yrcp8)NnZ-QPgI%7iLBs44Xo9V~Mb?E0>AJ(%ULHq4OZ>RgPPI4_@7Ri_CcDe-b zHh--Bh<-zj>Q(B)>Kp2N>VnE^8hUmZ(0$cz}Na>z0PUklZ}OHt?*9ksG0g zc^(bb7xwtbt6YlagsGLCzliMY64_AB#_26hyq>eKxL!A8av6MMuQm_+qE|NcDThpfP=1qt8TJ}`eQWct-?KcbNgyEV5 zZT|Tglw4PKGr>lZyj>s-XKpgHuFs_o=ZiV(w3A}Xo_!j^_A;L}9Jg%K-#_+Q#S{67 zl5M!yj#AI`G&Y@*4(jSP95XOni6}@78AW5lw8{4Oyx;@neb`AEh5Rj^Wq*I0E}pQ; z%D#+JS=X{@!gP-?3U|umAG%_eBbUTgXXKcOJ47oGz$Rx}jC{1Nxs<-62fGFb@`%&B%?z64Z zG%E**E>`F%I;Ty$&nOgVG@qTUGT3jp#;BP!^QX+5X9`DxVv!pU<>0p@3z@=@={P`^ zrDJ9>$IfusaZ5OOp0T*vY$nq;JTzk2uH(6np5&cE(!(iF>~&5~lOz39k^`pzSC5UI zai!j4eQ5lf{jON;X+^nON~P%>dS?(F>;Pgv8sC)fz0XNcKQ?F?e&_*;73B(WzARll zh2syUdz{%~7QF-Am?X{MW(;`SYfj{gzS=-B=ck6y{FF0K7$}e~I<8U7n$pAiJsAa0 zAFWaIL;;N;W599DsZ3#ZZ@ysq$Fv?7r-)1mBeBQNT#^yk@eX0BbkQ|2#DV>(JWhhN zuawVKtf2W0<(+({U{+*-Wxs1L%^0_Fh@3L)o0n$wS<|z2eqz#HnuVz&SIS-_gFC-b zoLyQ1ov<<^EY0pWovfXoW~i2Cj_2L#n0!z$UM7l`g9!+u(9D!3CXAZUJsBo89=@0@ z{bRHbB|D0yu*+C_0-07u&4Mu_DW~Ghs8>(|bn}^fA@5d&>09qZRsGgfDzHxbOw1SP z&NC0Xwo-0y=Lx6x8^v6~L@h3Jdu?mVmjvxDy|c`m zG72S=26B1KjJ-A{^IF6fWsJGJO5|jM1B{gR<~lAzXinF*3N%)7rZJHW8naf3X9D+F zPsz2$FbxKP_uIy4EDLoMx;C!_!Fh98>|V~ z(Ai5yVa%N^n7tUYeO3YUy-X?|2sRnHoIm1yf1wi$NLd8DC>-j^<-D4V%$RFUSI@6w zS;SfBHEhT8u)_9QHr~HT{gPG9`_ot1U0Ep$SUhMj@3;Ya90*TehAhAXMTRyU!a zR_e)S&1u(PD;T7`(gLy?)#x$!S)*X~s z03lwCWuV!2%V^zbK4NTBm7XhQa4ayu8g}e|u+L(;2t;EgWHkW@BfD6!tn84-$*lbH=Sc z!!}(Bu^ibz@l@WnifAJ*j=yzV z)ZNo~kLZx)?dqmXchbrcI*YgB+1@fZHr_KnX(N)#q*JwhBM-T%k;mIm^k>Zam=p`L zY>xr}_+Fd{Rzpl!*p10{49c?C^!I?B}7f6n>g!cuv+TiMN)UwJzC^}hca^dbdh zCs3t9G&F|ZW>X%gxdKiR7ER%=k0!ypc#qOYW0b;=|83+3=*3=&93*+YGm-E`Pu$4hn!>~7k92?%@g>6+E0>fALASweM7eKjgZcDF> zUR|nbuUMF3+}rd;F*7PDw7QPx(%Ajn(CdksdT1Q&K8`wQIj1{lfDTcQ9Q$^@{8vwW z^QCvb;q!O@bnxk8&vaAt;aiR#THF2fxllN<8u!|eP6}^*6RVl5#o1LQ);2_$2U!b^ z^$ogG8WJ0DZ^pd^_cq*JxOd>*9o98nux9?1`_E@8&NnhfJ3N)<{GYJ z4I5s=Mw`PRE%OVUj&iZ)<~@q83iedNm`sgZR>4VOQniW`g<0N{)UcZ=RqzJO^V z;(wdKfmb2!D5=E!ds^n-->6e!{(ktPn)w+CB~~X^YYh>^=+*r|RQYG|P(*3bk6m}{ zwwCY5uVH7RQBUQQ-s3a;NX&mpOg`!{4|!RSd5_0E;Sad*vSps^hu-6vMtrlG|Aoi= z0+4IC{qUdjq%YuwL349+m{iLGkcnuCg+?u+1H8mS4BF9%9*V9HMfs`Z8EIg?xe?JU zGy-9i4Z%XQ78c8i1#Z&y&Ft{PT3{T#G#m-7Z;omWga&N{NyKi%=ewaib{~#)!c7G; za4DC!Qr^A|xcieUHq-eD>^sYXF-*nX8c>GDAE;V zZBcaj&TJ-oBG;MOmg&sowsmKB?AT^>X0P71edms@o!c{ACw5)cjqfDfnAD~yQ9d>3 zfBAr}Z}05fNz|&S#aqs*=65tc>XLFu;7up4%lQ5GxYl~uHm0#RF0Z^;lCWD9-QfSf zX;6PV?)&h8_&$8A86E2%JM}kr9%^{UGkt&1cvC9f3Lm|6K_1 zS9v1*PJX_&M(_K5=SAeK$6J6Kj}!fhH!uG6D-GKxoC3yh9zBHfz$j8_oLUZmPlN77 zny)W3JbS_WS|r;bNW3S0k0%#)kiNth;L$I#Lpa;mu*0Vuy!6H?>I6jRF~72P6YEC5df=X9JZ<)rw^ zb*7*q=U$u|7t3^d02@9X?+O?fY=eO``!wvAV>H>P zpkOdzIpF3a(ExWr|?RYzfGJ(IBdeNS{sWIUX1V6QlHrsh_fY^MI{GlT zWu;{nmjev-tByb&fjRC9f3Lm|FaR;sK9tIs$bB g>Il>ks3TBEppHNtfjRBk)VMqpuBr`D+#7nJXi(9MI z#fq!8=!4Z&ySlYiYf-U_yDnY3);?WzYg_wlx5ZtxyVZ7aA0Nuf{{H7O^JPfFEuo@0 z@Xr4`_uKov=RN0q`6_Cw8(907fTef#pkE@^%` z-KTm4Vol4dQ&p*WV{NRiI$2*|y~c(#G$tG3jZL+2MK(3nCRV44YvQTe)rojxadj#f zpK7cgzpAz_o*G|0wW=mry{;RK*$^ z=UM;p_x;7P!d0&ozA&1! z-R8Zp;^D-MpVWMD!80Gsdi|!xNA8u{ko#Ge^benUt8wzji(cA2uJ-PiyAY;H(7+Fe zMnEH>QBY4vlc{-BeocxdQj@0%)8w20Y2tcAeW1S3$0B{K}P!%}eU^9g8E-QSv{L!3gUBS()RZ5~vgk z>j25M6nL)8AF8ZN#wF{LdC9uhJ7am4-jV(p2T7N7Iy(aGHUC|feCa1khyP&3^k3YW z|K#@mnu1Pu42*ze?jvX)Mv?XbUdKPf0#JehwS=%-(s~`1?SqkJvUIvn;0Va(Y7hJG z#ecl&t^wuozu*4VXYbp!?7=5LfnDuvQVS!{UiyF2sdry;U7xOZ-MVf5fU>^(w8VG1 zV_*c@YyLae|6^dXTWI3P?|=M0%Y1N!Hhg7MtIC_5cd^7Is*bcUN(%ON&w!GP~^Orfo z)oI=UZ5u-F2A*F>{pWzO*O^q zi_4OAb@A$^+GHYCe14n@q}poE?X&Th)h23^>r=&2M=3@(k6VN3L4N+r=e@V{siprq zZ~L(BdCx!g^a>4pMNl400Q2DynJl_L;L)B(8EpsmunU*P^B-JM&Bo%^PcyydZ`m>SY7tTDEp zi`!;li{sar{(JdrulY~@bH91BcmI6&j?3>n`IV|ajnh0&b>lS!W{~?g3+9)hD!9~- z*UF|uSu&A8M=UR^tF2y33XNTrWSqRp=hF@fqJY>_#Nv`fdld~vZ9k0DQUPIi$)n#>A zZe3fX^l)=6m|xUe!9rixx`vuqQ(V(LD@p$}9*@$#HRMwspHAbb%!bcJ=KH25U@qB^~$+W+{_+%i3%6;B~`Gubf{x{Tz%6Ov2 z3xV2LL;K!=l*gx2_!h!;xwfw`>syw`52fw0(R9wg<$-=v-%0I^IMo(vVcU;1!Q9zP z#$rwmWaEv*|4Fg`-h6T6*JaZkjQuxt%E%9twk`V)ekpjxjd@`BE>?Hpy84yzMn7|h zC*!hL5ZPcUBzt8HD2JL1Q1`~kPSIG)P7#Ct{{4^BeLhy~s1%JnLtX+g5qZM7Rgl8C1k-6M*Jf;HeJU>vLlSAk97mEdjQT5t;pKc&A5dimdWS&xU`L;eXm zBzG*xf8vqF|K6VR-P>w9DBR=O*ivlI|ltx(9g+tYx3{o z54T_KC;yvUlz-d4qbL6wMwaw~3cs!&mi=dSnYV+yt=XFWx7ycr0Q=9U^Y)+Se}c1P zpLX*<#-RZDF0ktn9t^C8WD3=iT>~0;R(hYtmx~^8_S4bX|NW4G@(%l_o%VlE9Mb;J z%Xe@L$-mBL+C%;{{P{V1^xXa5tA2t&RAoWJ>&pY||CGmF?FQ>?NW;|A2+Z0bNPA-baYRrCFYgstHdX3(%jTT~t zGz&NROfI_zkqr^f*OB|b`+dI;a{uSk=kEW0m%}HAvWKF(*>gz-EkDxoIYDdtzyAyM zp{@O&PnWy@TYUukzXP@1uMK^je#I`$INtjzxYqB3%w5v*1xdp@T?(TN;IAR2_h~%u zP*jU+gXhU?d=NAw8=EeS)yH)%tbQ-1%(o!D$9Yev-{RG9zFPb`qdDBO9e?g{i|hAD z%JWY9zt?=fk7)nbT*iH!dtIHU`wBt!eFc9C)j2bfS|4vLi`CT~>YlTCoqvu!r}myb zc|%v{=&FAk%3=ekJ+EKKwGV!ra5>)TPiub90CoNr1@$)ogTWynlome>1*d>TU>P_J zybv4?%03wZ)_}}qIth*fuLDPeH-p$Q=}q8Ra0^J8=?B45@H^lH@FkEPbovc&BKRIS z3H%5=3+zrqr-FmPbHMT7G_V{z7hD9+1g`{Vf!BkyHN6Qe2k!@GgHM2S!0q7qpzayw zgTDh8fO#n43h*?LKBkYxp7RRoIiri+b4~=S@y`Ys)AS-R4%UOK!0W-);6`vQ_#mh~ z=hI+4s6P-%fIkD7i}X7nwq*K4@G7upeh{n!i@>YFN#J_$0ubIvF9ELwYeD8PeKmMJ zcsqC__zf`4|L=e|fiHqz1b+^G3H(p+%V6GdL2wJ$2mA`C^T1odv%uTH^TCbaV(_bA z9e4-00sIi^#9C#P_PvE`a8{pT$cfoIfdq8+AeIh#SKJaw#0dO?MxS_1ia^;_}ki%?@S(vkYO5K`Mzmg@3-*7F6>nUKm*do)gZ7OEVLm-?@|l~$xS zD^6peaZ-NuM>Nj)RhP;e?5GU%eICy9kc|FDt^>RGiI{sXyl8U!H(Gk`X854ooMXcN z<{kp}pp4+A-rz~Zp9U6!{XxRa8D?LTub6sHHFfo*biZaupV~b^BzToP)M5S}Y>Fzz zu|AkJqaR55=A5(-NImAflzP%p`~$$jAZx8zOSIOUjbCfc1z;4s3?z+NJBEPhC$py9 z0FJ6?;aa zu|y4%+PVp}CBmcDJ@{uA$A^SfciV1 zncy&R7RZ>GHSrv<9RK;?9MIM&UKZb;0ZEo61LE0nnYL>(_k+cRp&%iO>#6ZXRW+ zKl8ynZ~>@MsQ?*wvz}^97UCzZIl~n%XpTs0&T>g>&T=mVD@nHuTnt_gD&6NCUIAW0 zxNW=Upa{AE8Uv{xc0R0}wLVAclePaN<}N6=PfMsneWD$vPqZT~&Zz>`2ilXS9Rcl0 zuL75Yt3kE37F>bT$_!JyitJ|+n-0vka1%-9c-;ROD39cm1eUh~&T z_);(h+CD6z-UaBLfrNTllV0qFl%0caz_K&pV=_D@{;+$1h`H-h+ru&=n?>`%7^cw? z#%8f~RW>Wb+Vm0gx2w5jFwUlo&x2~&4WKP!x+!BfVbX1TAUWM{$-xWaY0Z)0m95}5 zNIbL)%BNuiA?eDCpgL#+^eD6gdJEbOorG|Vgcd+G&@GVOYnX5_?@myU+UA;M_F;a1 z(?HpB8bj|Wx}XOh6SX?twA{ZXToFseR>!H;?*Hn*X(Uo!pI-Y$<%3v4Zz`^D@}%@b;FJ)9k$g{UN&C@fOT4<5hsJ z%Z@|Yy1J%yjd4Y)olO+73sN4RPW@9n#kJV~w)VjJ@D?74~`M}Kc2UY4V+8OQoxaISB6akY6N z=iuHyu=`{6TjTaeN))fzzC|))qc)Ye+R#mDH37asKCMk5-BD<4xL&3VrM2yeWZJ3e zFM{Oyk{2>Ms=Ia+xZRL+!dAy8k|#ZHhhB&N3!3HXE(5y~Uk=*3W&iccl;MUbh>}L{ z)bxW&AkCj2$2C05Nv^yjUxA)Yes`|jDgU1y`LBRuCNRHR6Y?YW-5brhc;D-V4e*(q zc+orfrr=^chA;Tw$MTS#IygDo|E}Jz2RaAxJP3b4*+jWdClJsNDuSfj zHP>^Y6_9Kc@tb&Y6SM_-6nYxk0lfmf3GISDfc8S&=xkpo3hA9u*&^kT?6WFp4WzYS z46_ls2YLwdE{}foH2z5DZ@7zD|GK#W^?%nb%-8Kq5WzOfH);EKAO8o{yNR@VcSOZ} ziyz@voc~wO|DnUdrUdSJT>P`nf12~xyL6){lSiF#+47wKVi*5_^WW_J6)xS69sakA zf6>Li;L4XlN09jzp-={ru)>AE;IP!Cf5Z8YbLE`vFz&)ncYbVaQ;yCtRo(**-*(}V z7I>PdjB71EoGqG3%>(s^T{wR<9O0fL`I(YGZi&U za44P@N@%NY6&;ROUs`qPR%3!0tw#mXW;K|E={AzL8udw&|5h7%fQUgsFD-lGB<#Gh zg%x9#&rUQoUc3CFWUbzm?;Q*?@tVpm?ggMzf>EKclC$(`f9XW+2eN7NLNAMi)8_>? zeaR%P<2L;^%FYW~eo^1&wP{>lw&T8C(v^Acg$tk7hPkwpb$?{*(fj0idSNr?Wpkg; z#=Cq|WY61t)6fC*r`b!~K97xac{p_NdGyY8UeNq9-siD#E>A2w4qJ_EwtSK8^V&2n z@5*d_dQaH&Ep&nG^Vm3-r#hP_%8VbW>-_%Pk&fV>H-8kFXhBVzM#)x?Z6I4)c7*h? z=riQh^-s0S3qmh$&{MB7q#H82x+bfm`mq5sdZwH|s>*rk-RHGwoW8*@^Ll=x&)dSw z3qG$+MHSQe$D}u&tv0ko>JBozYc9TdEDVosBbphrDuKcYl+H<p&N$x(jgJDn-^QL0yk#HEUQc~`XVD#)P}a5BCw;^qD4jfK zW=UCzy-vuK*>WAd%wA9>ZiG}v^!ZI~*Wtb+Q0zZp5R^=rFtKFT?Ae@mJXib&l_BTP zR;?@>H>1( zbnp9WD{;EV)cL(!Za&>l&b3kd#p%9~J2B&O^XcC0^R2|`-L_?|#OZ!$WGivH_c^_l zIK8j#`yl@HPVLe;w4Vpbtapmj`LaI)56881Hn51a2Ra*wAU!&ZlT-iSg(~nq1$E$8 zDY6QnDx(0JeT<_6>o&^Z=vKz(H#)FG4CW``^C>~#zcXaG$+DE#$}SpGfcy5Hj6(Fz z#&!O7_y}w+E{)ujlF+lA>bqkP6Ms76dDW- tfrdgw&@gB?Gy+mPMnT%gjDbc&;~@3B(;a)?tLdDx&JpMwf%Y4L{|8 _ +Partial Public Class Form1 + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + private mainMenu1 As System.Windows.Forms.MainMenu + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.mainMenu1 = New System.Windows.Forms.MainMenu + Me.btnConnect = New System.Windows.Forms.Button + Me.Label3 = New System.Windows.Forms.Label + Me.cbbCOMPorts = New System.Windows.Forms.ComboBox + Me.txtGPSData = New System.Windows.Forms.TextBox + Me.Label2 = New System.Windows.Forms.Label + Me.btnDisconnect = New System.Windows.Forms.Button + Me.SuspendLayout() + ' + 'btnConnect + ' + Me.btnConnect.Location = New System.Drawing.Point(157, 3) + Me.btnConnect.Name = "btnConnect" + Me.btnConnect.Size = New System.Drawing.Size(80, 20) + Me.btnConnect.TabIndex = 12 + Me.btnConnect.Text = "Connect" + ' + 'Label3 + ' + Me.Label3.Location = New System.Drawing.Point(3, 5) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(59, 20) + Me.Label3.Text = "COM Port" + ' + 'cbbCOMPorts + ' + Me.cbbCOMPorts.Items.Add("COM1") + Me.cbbCOMPorts.Items.Add("COM2") + Me.cbbCOMPorts.Items.Add("COM3") + Me.cbbCOMPorts.Items.Add("COM4") + Me.cbbCOMPorts.Items.Add("COM5") + Me.cbbCOMPorts.Items.Add("COM6") + Me.cbbCOMPorts.Items.Add("COM7") + Me.cbbCOMPorts.Items.Add("COM8") + Me.cbbCOMPorts.Items.Add("COM9") + Me.cbbCOMPorts.Location = New System.Drawing.Point(68, 3) + Me.cbbCOMPorts.Name = "cbbCOMPorts" + Me.cbbCOMPorts.Size = New System.Drawing.Size(83, 22) + Me.cbbCOMPorts.TabIndex = 11 + ' + 'txtGPSData + ' + Me.txtGPSData.Location = New System.Drawing.Point(3, 51) + Me.txtGPSData.Multiline = True + Me.txtGPSData.Name = "txtGPSData" + Me.txtGPSData.ScrollBars = System.Windows.Forms.ScrollBars.Vertical + Me.txtGPSData.Size = New System.Drawing.Size(234, 214) + Me.txtGPSData.TabIndex = 14 + ' + 'Label2 + ' + Me.Label2.Location = New System.Drawing.Point(3, 28) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(135, 20) + Me.Label2.Text = "Data from GPS" + ' + 'btnDisconnect + ' + Me.btnDisconnect.Location = New System.Drawing.Point(157, 25) + Me.btnDisconnect.Name = "btnDisconnect" + Me.btnDisconnect.Size = New System.Drawing.Size(80, 20) + Me.btnDisconnect.TabIndex = 16 + Me.btnDisconnect.Text = "Disconnect" + ' + 'Form1 + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.AutoScroll = True + Me.ClientSize = New System.Drawing.Size(240, 268) + Me.Controls.Add(Me.btnDisconnect) + Me.Controls.Add(Me.Label2) + Me.Controls.Add(Me.txtGPSData) + Me.Controls.Add(Me.btnConnect) + Me.Controls.Add(Me.Label3) + Me.Controls.Add(Me.cbbCOMPorts) + Me.Menu = Me.mainMenu1 + Me.Name = "Form1" + Me.Text = "Form1" + Me.ResumeLayout(False) + + End Sub + Friend WithEvents btnConnect As System.Windows.Forms.Button + Friend WithEvents Label3 As System.Windows.Forms.Label + Friend WithEvents cbbCOMPorts As System.Windows.Forms.ComboBox + Friend WithEvents txtGPSData As System.Windows.Forms.TextBox + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents btnDisconnect As System.Windows.Forms.Button + +End Class diff --git a/Chapter02(Serial)/VirtualEarth/GPSReceiver/Form1.resx b/Chapter02(Serial)/VirtualEarth/GPSReceiver/Form1.resx new file mode 100644 index 0000000..20d2efa --- /dev/null +++ b/Chapter02(Serial)/VirtualEarth/GPSReceiver/Form1.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + Pocket_PC + + + True + + \ No newline at end of file diff --git a/Chapter02(Serial)/VirtualEarth/GPSReceiver/Form1.vb b/Chapter02(Serial)/VirtualEarth/GPSReceiver/Form1.vb new file mode 100644 index 0000000..1062e06 --- /dev/null +++ b/Chapter02(Serial)/VirtualEarth/GPSReceiver/Form1.vb @@ -0,0 +1,58 @@ +Imports System.IO + +Public Class Form1 + + Dim WithEvents serialPort As New IO.Ports.SerialPort + + Const FILE_NAME = "\My Documents\Personal\GPS.dat" + Private Sub DataReceived( _ + ByVal sender As Object, _ + ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) _ + Handles serialPort.DataReceived + + txtGPSData.BeginInvoke(New _ + myDelegate(AddressOf updateTextBox), _ + New Object() {}) + End Sub + + Public Delegate Sub myDelegate() + Public Sub updateTextBox() + Try + Dim data As String = serialPort.ReadExisting + txtGPSData.Text = _ + data & _ + txtGPSData.Text + '---Using a streamWriter to write to a file + Dim sw As StreamWriter + sw = New StreamWriter(FILE_NAME, True, System.Text.Encoding.ASCII) + sw.WriteLine(data) + sw.Close() + Catch ex As Exception + MsgBox("Error") + End Try + + End Sub + + Private Sub btnConnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConnect.Click + Try + If serialPort.IsOpen Then + serialPort.Close() + End If + With serialPort + .PortName = cbbCOMPorts.Text + .BaudRate = 9600 + .Parity = IO.Ports.Parity.None + .DataBits = 8 + .StopBits = IO.Ports.StopBits.One + End With + serialPort.Open() + MsgBox("Port opened successfully!") + Catch ex As Exception + MsgBox(ex.ToString) + End Try + End Sub + + Private Sub btnDisconnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDisconnect.Click + serialPort.Close() + End Sub +End Class diff --git a/Chapter02(Serial)/VirtualEarth/GPSReceiver/GPSReceiver.suo b/Chapter02(Serial)/VirtualEarth/GPSReceiver/GPSReceiver.suo new file mode 100644 index 0000000000000000000000000000000000000000..f9f1c94844bc8b536cf6e5b1bf64d544d7fe532a GIT binary patch literal 2560 zcmeHHJxjw-6g{!F;2`MIp^F*oprD%$qQoi%KT0dQWT|aztM-GW72U)^)WQGY;_h#7 zaI}+i{TG7Rcy4Nnm;@~dQtS;k_rCMaeedPI+}nH{Z{6I*p7BK%5JKA?LF5yz&=+-N z3>cy#9kUq-58_z2D=V~7veQ?xY$UquZK6R)_ph9cn#4Y6?*(k!@n(y|8 zfXGGdw)L8PP(qwP{UE2fV-@>Ia`!!Y2^NTDUt^1MPmI~UX<<2kxexC)rTl? zf6)Rm9A~KpX1rk@L}eG0eO>Vod;t0M*mueDi3@_)QF~#wD)G6EC>u_4gzZMZ-LFEVFiVtfeyRM*4^al~q(ho;E|Q&Zkpf7TG&Q zN|?gB!!D4sM$d58F&KM5b`>>_S7=SnZ}BbbS?m%9eH}}jH|bk^boPxrSCoBqXeg3f z<4Bk)W~mz2$#bkC?wrRYJIlJCB!8Q}Np{0Q5`4?3$eC57$WAjZM=jyVS + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {AE18DC1A-A177-4B46-8C1D-00C70D7947B2} + WinExe + GPSReceiver.Form1 + GPSReceiver + GPSReceiver + {68B1623D-7FB9-47D8-8664-7ECEA3297D4F};{F184B08F-C81C-45F6-A57F-5ABD9991F28F} + PocketPC + 4118C335-430C-497f-BE48-11C3316B135E + 5.01 + WindowsForms + GPSReceiver + v2.0 + + + + + true + full + true + true + bin\Debug\ + $(PlatformFamilyName)=TRUE + GPSReceiver.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + 512 + Off + true + true + + + pdbonly + false + true + true + bin\Release\ + $(PlatformFamilyName)=TRUE + GPSReceiver.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + 512 + Off + true + true + + + + + + + + + + + + + + + + + + Form + + + Form1.vb + Form + + + + True + True + Resources.resx + + + + + Designer + Form1.vb + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + + + + + + + + + \ No newline at end of file diff --git a/Chapter02(Serial)/VirtualEarth/GPSReceiver/GPSReceiver.vbproj.user b/Chapter02(Serial)/VirtualEarth/GPSReceiver/GPSReceiver.vbproj.user new file mode 100644 index 0000000..76bd09e --- /dev/null +++ b/Chapter02(Serial)/VirtualEarth/GPSReceiver/GPSReceiver.vbproj.user @@ -0,0 +1,5 @@ + + + 4118C335-430C-497f-BE48-11C3316B135Ed6518ffb-710f-11d3-99f2-00105a0df099 + + \ No newline at end of file diff --git a/Chapter02(Serial)/VirtualEarth/GPSReceiver/My Project/AssemblyInfo.vb b/Chapter02(Serial)/VirtualEarth/GPSReceiver/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..fc08f93 --- /dev/null +++ b/Chapter02(Serial)/VirtualEarth/GPSReceiver/My Project/AssemblyInfo.vb @@ -0,0 +1,36 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + diff --git a/Chapter02(Serial)/VirtualEarth/GPSReceiver/My Project/Resources.Designer.vb b/Chapter02(Serial)/VirtualEarth/GPSReceiver/My Project/Resources.Designer.vb new file mode 100644 index 0000000..8d9bbc3 --- /dev/null +++ b/Chapter02(Serial)/VirtualEarth/GPSReceiver/My Project/Resources.Designer.vb @@ -0,0 +1,59 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.42 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict Off +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the Strongly Typed Resource Builder + 'class via a tool like ResGen or Visual Studio.NET. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Module Resources + + Private _resMgr As System.Resources.ResourceManager + + Private _resCulture As System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As System.Resources.ResourceManager + Get + If (_resMgr Is Nothing) Then + Dim temp As System.Resources.ResourceManager = New System.Resources.ResourceManager("GPSReceiver.Resources", GetType(Resources).Assembly) + _resMgr = temp + End If + Return _resMgr + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As System.Globalization.CultureInfo + Get + Return _resCulture + End Get + Set + _resCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Chapter02(Serial)/VirtualEarth/GPSReceiver/My Project/Resources.resx b/Chapter02(Serial)/VirtualEarth/GPSReceiver/My Project/Resources.resx new file mode 100644 index 0000000..3e18af9 --- /dev/null +++ b/Chapter02(Serial)/VirtualEarth/GPSReceiver/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter02(Serial)/VirtualEarth/GPSReceiver/bin/Debug/GPSReceiver.exe b/Chapter02(Serial)/VirtualEarth/GPSReceiver/bin/Debug/GPSReceiver.exe new file mode 100644 index 0000000000000000000000000000000000000000..72074c32d6b036d48de9c2e3efca81b29311fa1a GIT binary patch literal 15872 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Ʌ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 + + + +GPSReceiver + + + + + + Returns the cached ResourceManager instance used by this class. + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + \ No newline at end of file diff --git a/Chapter02(Serial)/VirtualEarth/GPSReceiver/obj/Debug/GPSReceiver.Form1.resources b/Chapter02(Serial)/VirtualEarth/GPSReceiver/obj/Debug/GPSReceiver.Form1.resources new file mode 100644 index 0000000000000000000000000000000000000000..06c24d06c1cab750788146ce052b37770f3fa530 GIT binary patch literal 180 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Ʌ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 literal 0 HcmV?d00001 diff --git a/Chapter02(Serial)/VirtualEarth/GPSReceiver/obj/Debug/GPSReceiver.xml b/Chapter02(Serial)/VirtualEarth/GPSReceiver/obj/Debug/GPSReceiver.xml new file mode 100644 index 0000000..e313b03 --- /dev/null +++ b/Chapter02(Serial)/VirtualEarth/GPSReceiver/obj/Debug/GPSReceiver.xml @@ -0,0 +1,24 @@ + + + + +GPSReceiver + + + + + + Returns the cached ResourceManager instance used by this class. + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + \ No newline at end of file diff --git a/Chapter02(Serial)/VirtualEarth/GPSReceiver/obj/Debug/TempPE/My Project.Resources.Designer.vb.dll b/Chapter02(Serial)/VirtualEarth/GPSReceiver/obj/Debug/TempPE/My Project.Resources.Designer.vb.dll new file mode 100644 index 0000000000000000000000000000000000000000..6531bb7da18e05938fe03ed49a8a22b5a500e76d GIT binary patch literal 6144 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 + + My Virtual Earth + + + + + +
+ + diff --git a/Chapter02(Serial)/VirtualEarth/VirtualEarth/Form1.Designer.vb b/Chapter02(Serial)/VirtualEarth/VirtualEarth/Form1.Designer.vb new file mode 100644 index 0000000..0991bcd --- /dev/null +++ b/Chapter02(Serial)/VirtualEarth/VirtualEarth/Form1.Designer.vb @@ -0,0 +1,238 @@ + _ +Partial Class Form1 + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.components = New System.ComponentModel.Container + Me.btnClearPath = New System.Windows.Forms.Button + Me.btnShowPath = New System.Windows.Forms.Button + Me.WebBrowser1 = New System.Windows.Forms.WebBrowser + Me.Timer1 = New System.Windows.Forms.Timer(Me.components) + Me.GroupBox1 = New System.Windows.Forms.GroupBox + Me.btnGotoPoint = New System.Windows.Forms.Button + Me.txtLongitude = New System.Windows.Forms.TextBox + Me.txtLatitude = New System.Windows.Forms.TextBox + Me.Label3 = New System.Windows.Forms.Label + Me.Label2 = New System.Windows.Forms.Label + Me.GroupBox2 = New System.Windows.Forms.GroupBox + Me.txtDataReceived = New System.Windows.Forms.TextBox + Me.btnConnect = New System.Windows.Forms.Button + Me.cbbCOMPorts = New System.Windows.Forms.ComboBox + Me.Label1 = New System.Windows.Forms.Label + Me.lblMessage = New System.Windows.Forms.Label + Me.GroupBox3 = New System.Windows.Forms.GroupBox + Me.GroupBox1.SuspendLayout() + Me.GroupBox2.SuspendLayout() + Me.GroupBox3.SuspendLayout() + Me.SuspendLayout() + ' + 'btnClearPath + ' + Me.btnClearPath.Location = New System.Drawing.Point(6, 42) + Me.btnClearPath.Name = "btnClearPath" + Me.btnClearPath.Size = New System.Drawing.Size(233, 23) + Me.btnClearPath.TabIndex = 1 + Me.btnClearPath.Text = "Clear Path" + Me.btnClearPath.UseVisualStyleBackColor = True + ' + 'btnShowPath + ' + Me.btnShowPath.Location = New System.Drawing.Point(6, 19) + Me.btnShowPath.Name = "btnShowPath" + Me.btnShowPath.Size = New System.Drawing.Size(233, 23) + Me.btnShowPath.TabIndex = 2 + Me.btnShowPath.Text = "Show Path" + Me.btnShowPath.UseVisualStyleBackColor = True + ' + 'WebBrowser1 + ' + Me.WebBrowser1.Location = New System.Drawing.Point(2, 3) + Me.WebBrowser1.MinimumSize = New System.Drawing.Size(20, 20) + Me.WebBrowser1.Name = "WebBrowser1" + Me.WebBrowser1.ScrollBarsEnabled = False + Me.WebBrowser1.Size = New System.Drawing.Size(460, 380) + Me.WebBrowser1.TabIndex = 9 + ' + 'Timer1 + ' + Me.Timer1.Interval = 500 + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.btnGotoPoint) + Me.GroupBox1.Controls.Add(Me.txtLongitude) + Me.GroupBox1.Controls.Add(Me.txtLatitude) + Me.GroupBox1.Controls.Add(Me.Label3) + Me.GroupBox1.Controls.Add(Me.Label2) + Me.GroupBox1.Location = New System.Drawing.Point(468, 3) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(245, 104) + Me.GroupBox1.TabIndex = 11 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Current Location:" + ' + 'btnGotoPoint + ' + Me.btnGotoPoint.Location = New System.Drawing.Point(141, 71) + Me.btnGotoPoint.Name = "btnGotoPoint" + Me.btnGotoPoint.Size = New System.Drawing.Size(98, 23) + Me.btnGotoPoint.TabIndex = 13 + Me.btnGotoPoint.Text = "Goto Point" + Me.btnGotoPoint.UseVisualStyleBackColor = True + ' + 'txtLongitude + ' + Me.txtLongitude.Location = New System.Drawing.Point(67, 45) + Me.txtLongitude.Name = "txtLongitude" + Me.txtLongitude.Size = New System.Drawing.Size(172, 20) + Me.txtLongitude.TabIndex = 12 + ' + 'txtLatitude + ' + Me.txtLatitude.Location = New System.Drawing.Point(67, 19) + Me.txtLatitude.Name = "txtLatitude" + Me.txtLatitude.Size = New System.Drawing.Size(172, 20) + Me.txtLatitude.TabIndex = 11 + ' + 'Label3 + ' + Me.Label3.AutoSize = True + Me.Label3.Location = New System.Drawing.Point(7, 48) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(54, 13) + Me.Label3.TabIndex = 10 + Me.Label3.Text = "Longitude" + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Location = New System.Drawing.Point(16, 22) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(45, 13) + Me.Label2.TabIndex = 9 + Me.Label2.Text = "Latitude" + ' + 'GroupBox2 + ' + Me.GroupBox2.Controls.Add(Me.txtDataReceived) + Me.GroupBox2.Controls.Add(Me.btnConnect) + Me.GroupBox2.Controls.Add(Me.cbbCOMPorts) + Me.GroupBox2.Controls.Add(Me.Label1) + Me.GroupBox2.Location = New System.Drawing.Point(468, 113) + Me.GroupBox2.Name = "GroupBox2" + Me.GroupBox2.Size = New System.Drawing.Size(245, 159) + Me.GroupBox2.TabIndex = 12 + Me.GroupBox2.TabStop = False + Me.GroupBox2.Text = "GPS" + ' + 'txtDataReceived + ' + Me.txtDataReceived.Location = New System.Drawing.Point(6, 43) + Me.txtDataReceived.Multiline = True + Me.txtDataReceived.Name = "txtDataReceived" + Me.txtDataReceived.ScrollBars = System.Windows.Forms.ScrollBars.Both + Me.txtDataReceived.Size = New System.Drawing.Size(233, 107) + Me.txtDataReceived.TabIndex = 14 + Me.txtDataReceived.WordWrap = False + ' + 'btnConnect + ' + Me.btnConnect.Location = New System.Drawing.Point(164, 14) + Me.btnConnect.Name = "btnConnect" + Me.btnConnect.Size = New System.Drawing.Size(75, 23) + Me.btnConnect.TabIndex = 13 + Me.btnConnect.Text = "Connect" + Me.btnConnect.UseVisualStyleBackColor = True + ' + 'cbbCOMPorts + ' + Me.cbbCOMPorts.FormattingEnabled = True + Me.cbbCOMPorts.Location = New System.Drawing.Point(78, 16) + Me.cbbCOMPorts.Name = "cbbCOMPorts" + Me.cbbCOMPorts.Size = New System.Drawing.Size(80, 21) + Me.cbbCOMPorts.TabIndex = 12 + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.Location = New System.Drawing.Point(21, 19) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(51, 13) + Me.Label1.TabIndex = 11 + Me.Label1.Text = "GPS Port" + ' + 'lblMessage + ' + Me.lblMessage.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.lblMessage.Location = New System.Drawing.Point(471, 354) + Me.lblMessage.Name = "lblMessage" + Me.lblMessage.Size = New System.Drawing.Size(240, 21) + Me.lblMessage.TabIndex = 15 + ' + 'GroupBox3 + ' + Me.GroupBox3.Controls.Add(Me.btnShowPath) + Me.GroupBox3.Controls.Add(Me.btnClearPath) + Me.GroupBox3.Location = New System.Drawing.Point(468, 278) + Me.GroupBox3.Name = "GroupBox3" + Me.GroupBox3.Size = New System.Drawing.Size(245, 73) + Me.GroupBox3.TabIndex = 13 + Me.GroupBox3.TabStop = False + Me.GroupBox3.Text = "Recorded Path" + ' + 'Form1 + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.BackColor = System.Drawing.Color.Khaki + Me.ClientSize = New System.Drawing.Size(718, 385) + Me.Controls.Add(Me.lblMessage) + Me.Controls.Add(Me.GroupBox3) + Me.Controls.Add(Me.GroupBox2) + Me.Controls.Add(Me.GroupBox1) + Me.Controls.Add(Me.WebBrowser1) + Me.Name = "Form1" + Me.Text = "Microsoft Virtual Earth" + Me.GroupBox1.ResumeLayout(False) + Me.GroupBox1.PerformLayout() + Me.GroupBox2.ResumeLayout(False) + Me.GroupBox2.PerformLayout() + Me.GroupBox3.ResumeLayout(False) + Me.ResumeLayout(False) + + End Sub + Friend WithEvents btnClearPath As System.Windows.Forms.Button + Friend WithEvents btnShowPath As System.Windows.Forms.Button + Friend WithEvents WebBrowser1 As System.Windows.Forms.WebBrowser + Friend WithEvents Timer1 As System.Windows.Forms.Timer + Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox + Friend WithEvents btnGotoPoint As System.Windows.Forms.Button + Friend WithEvents txtLongitude As System.Windows.Forms.TextBox + Friend WithEvents txtLatitude As System.Windows.Forms.TextBox + Friend WithEvents Label3 As System.Windows.Forms.Label + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents GroupBox2 As System.Windows.Forms.GroupBox + Friend WithEvents GroupBox3 As System.Windows.Forms.GroupBox + Friend WithEvents btnConnect As System.Windows.Forms.Button + Friend WithEvents cbbCOMPorts As System.Windows.Forms.ComboBox + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents txtDataReceived As System.Windows.Forms.TextBox + Friend WithEvents lblMessage As System.Windows.Forms.Label + +End Class diff --git a/Chapter02(Serial)/VirtualEarth/VirtualEarth/Form1.resx b/Chapter02(Serial)/VirtualEarth/VirtualEarth/Form1.resx new file mode 100644 index 0000000..cce5ec2 --- /dev/null +++ b/Chapter02(Serial)/VirtualEarth/VirtualEarth/Form1.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/Chapter02(Serial)/VirtualEarth/VirtualEarth/Form1.vb b/Chapter02(Serial)/VirtualEarth/VirtualEarth/Form1.vb new file mode 100644 index 0000000..383f54b --- /dev/null +++ b/Chapter02(Serial)/VirtualEarth/VirtualEarth/Form1.vb @@ -0,0 +1,256 @@ + _ +Public Class Form1 + + '---index of the push pin--- + Private pushpin As Integer = 0 + + '---keeping track of the points--- + Private pointCounter As Integer + + '--used for remembering the lines read + ' from a file containing coordinates--- + Private lineIndex As Integer = 0 + Dim line() As String + + '---serial port for communicating with GPS receiver--- + Private WithEvents serialPort As New IO.Ports.SerialPort + + Private Sub Form1_Load( _ + ByVal sender As System.Object, _ + ByVal e As System.EventArgs) _ + Handles MyBase.Load + + '---display the available COM port on the computer--- + For i As Integer = 0 To _ + My.Computer.Ports.SerialPortNames.Count - 1 + cbbCOMPorts.Items.Add( _ + My.Computer.Ports.SerialPortNames(i)) + Next + + '--Load the Webbrowser control with the Virtual Earth Map--- + Dim fileContents As String + + '---remember to set the Copy to Output Directory + ' property of Map.html to "Copy if newer" + fileContents = My.Computer.FileSystem.ReadAllText( _ + Application.StartupPath & "\Map.html") + + WebBrowser1.DocumentText = fileContents + WebBrowser1.ObjectForScripting = Me + End Sub + + '---clear the plotted path by removing all pushpins--- + Private Sub btnClearPath_Click( _ + ByVal sender As System.Object, _ + ByVal e As System.EventArgs) _ + Handles btnClearPath.Click + For i As Integer = 0 To pushpin + removePushpin(i) + Next + End Sub + + '---plot a path from a GPS data file--- + Private Sub btnShowPath_Click( _ + ByVal sender As System.Object, _ + ByVal e As System.EventArgs) _ + Handles btnShowPath.Click + + Dim fileContents As String = String.Empty + '---let user choose a file--- + Dim openFileDialog1 As New OpenFileDialog() + openFileDialog1.InitialDirectory = "c:\" + openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*" + openFileDialog1.FilterIndex = 2 + openFileDialog1.RestoreDirectory = True + + '---Load the content of the selected file--- + If openFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then + fileContents = My.Computer.FileSystem.ReadAllText(openFileDialog1.FileName) + End If + + '---split the content various lines using the $ as the delimiter--- + line = fileContents.Split("$") + lineIndex = 0 + Timer1.Enabled = True + End Sub + + '---go to a particular location on the map--- + Private Sub gotoPosition( _ + ByVal lat As Double, _ + ByVal lng As Double, _ + ByVal showPushpin As Boolean, _ + ByVal pushPinText As String) + + '---display map at specific location--- + Dim param() As Object = New Object() {lat, lng} + WebBrowser1.Document.InvokeScript("goto_map_position", param) + + '---if need to insert pushpin--- + If showPushpin Then + '---set the push pin--- + param = New Object() {pushpin, pushPinText, lat, lng} + WebBrowser1.Document.InvokeScript("addPushpin", param) + pushpin += 1 + End If + End Sub + + '---update the latitude and longitude on the TextBox controls--- + Public Sub mapPositionChange(ByVal lat As Double, ByVal lng As Double) + txtLatitude.Text = lat + txtLongitude.Text = lng + End Sub + + '---remove a pushpin--- + Private Sub removePushpin(ByVal id As Integer) + Dim param() As Object = New Object() {id} + WebBrowser1.Document.InvokeScript("removePushpin", param) + End Sub + + '---set the map to a particular location--- + Private Sub btnGotoPoint_Click( _ + ByVal sender As System.Object, _ + ByVal e As System.EventArgs) _ + Handles btnGotoPoint.Click + + Dim lat, lng As Double + '---get the latitude and longitude--- + lat = txtLatitude.Text + lng = txtLongitude.Text + ' gotoPosition(lat, lng, False, "") + gotoPosition(lat, lng, True, "X") + End Sub + + '---for ploting a path--- + Private Sub Timer1_Tick( _ + ByVal sender As System.Object, _ + ByVal e As System.EventArgs) _ + Handles Timer1.Tick + + If lineIndex = 0 Then pointCounter = 1 + '---plot a point in the path--- + While (lineIndex <= line.Length - 1) + If line(lineIndex).StartsWith("GPGGA") AndAlso _ + processGPSData(line(lineIndex)) Then + lblMessage.Text = "Updating map...point " & pointCounter + pointCounter += 1 + Exit While + End If + lineIndex += 1 + End While + lineIndex += 1 + '---stop the Timer control when the end of the path is reached--- + If lineIndex > line.Length - 1 Then + Timer1.Enabled = False + lblMessage.Text = "Plotting completed." + End If + End Sub + + '---connect to a serial port to communicate with the GPS receiver--- + Private Sub btnConnect_Click( _ + ByVal sender As System.Object, _ + ByVal e As System.EventArgs) _ + Handles btnConnect.Click + If btnConnect.Text = "Connect" Then + btnConnect.Text = "Disconnect" + If serialPort.IsOpen Then + serialPort.Close() + End If + Try + With serialPort + .PortName = cbbCOMPorts.Text + .BaudRate = 9600 + .Parity = IO.Ports.Parity.None + .DataBits = 8 + .StopBits = IO.Ports.StopBits.One + End With + serialPort.Open() + lblMessage.Text = cbbCOMPorts.Text & " connected." + Catch ex As Exception + MsgBox(ex.ToString) + End Try + Else + btnConnect.Text = "Connect" + serialPort.Close() + End If + End Sub + + Private Sub DataReceived( _ + ByVal sender As Object, _ + ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) _ + Handles serialPort.DataReceived + txtDataReceived.BeginInvoke(New _ + myDelegate(AddressOf updateTextBox), _ + New Object() {}) + End Sub + + Public Delegate Sub myDelegate() + Public Sub updateTextBox() + Try + '---for receiving plain ASCII text--- + With txtDataReceived + Dim Data As String = serialPort.ReadExisting + .AppendText(Data) + .ScrollToCaret() + '---process only lines starting with $GPGGA--- + Dim GPSData As String = txtDataReceived.Lines( _ + txtDataReceived.Lines.Length - 2) + If GPSData.StartsWith("$GPGGA") Then + If Not processGPSData(GPSData) Then + lblMessage.Text = "No fix..." + End If + End If + End With + Catch ex As Exception + Console.WriteLine(ex.ToString) + End Try + End Sub + + Private Function processGPSData(ByVal str As String) As Boolean + 'SAMPLE - $GPGGA,092204.999,4250.5589,S,14718.5084,E,1,04,24.4,19.7,M,,,,0000*1F + ' 0 1 2 3 4 5 6 7 8 + ' str = "$GPGGA,092204.999,4250.5589,S,14718.5084,E,1,04,24.4,19.7,M,,,,0000*1F" + Try + '---separate the GPS data into various fields--- + Dim field() As String + field = str.Split(",") + Dim lat, lng As Double + Dim rawLatLng As Double + If field.Length < 15 Then Return False + + '---latitude--- + rawLatLng = Convert.ToDouble(field(2)) + lat = (rawLatLng \ 100) + _ + ((rawLatLng - ((rawLatLng \ 100) * 100)) / 60) + + '---latitude is negative if South--- + If field(3) = "S" Then + lat *= -1.0 + End If + + '---longitude--- + rawLatLng = Convert.ToDouble(field(4)) + lng = (rawLatLng \ 100) + _ + ((rawLatLng - ((rawLatLng \ 100) * 100)) / 60) + + '---longitude is negative if West--- + If field(5) = "W" Then + lng *= -1.0 + End If + + '---update map--- + If str.StartsWith("$") Then + '---live data from GPS--- + gotoPosition(lat, lng, False, "") + Else + '---recorded path--- + gotoPosition(lat, lng, True, "*") + End If + + lblMessage.Text = "Latitude: " & lat & " Longitude: " & lng + Return True + Catch + Return False + End Try + End Function + +End Class diff --git a/Chapter02(Serial)/VirtualEarth/VirtualEarth/Map.html b/Chapter02(Serial)/VirtualEarth/VirtualEarth/Map.html new file mode 100644 index 0000000..3827150 --- /dev/null +++ b/Chapter02(Serial)/VirtualEarth/VirtualEarth/Map.html @@ -0,0 +1,67 @@ + + + My Virtual Earth + + + + + + +
+ + diff --git a/Chapter02(Serial)/VirtualEarth/VirtualEarth/My Project/Application.Designer.vb b/Chapter02(Serial)/VirtualEarth/VirtualEarth/My Project/Application.Designer.vb new file mode 100644 index 0000000..e9c00fa --- /dev/null +++ b/Chapter02(Serial)/VirtualEarth/VirtualEarth/My Project/Application.Designer.vb @@ -0,0 +1,38 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.42 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + 'NOTE: This file is auto-generated; do not modify it directly. To make changes, + ' or if you encounter build errors in this file, go to the Project Designer + ' (go to Project Properties or double-click the My Project node in + ' Solution Explorer), and make changes on the Application tab. + ' + Partial Friend Class MyApplication + + _ + Public Sub New() + MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) + Me.IsSingleInstance = false + Me.EnableVisualStyles = true + Me.SaveMySettingsOnExit = true + Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses + End Sub + + _ + Protected Overrides Sub OnCreateMainForm() + Me.MainForm = Global.VirtualEarth.Form1 + End Sub + End Class +End Namespace diff --git a/Chapter02(Serial)/VirtualEarth/VirtualEarth/My Project/Application.myapp b/Chapter02(Serial)/VirtualEarth/VirtualEarth/My Project/Application.myapp new file mode 100644 index 0000000..1243847 --- /dev/null +++ b/Chapter02(Serial)/VirtualEarth/VirtualEarth/My Project/Application.myapp @@ -0,0 +1,11 @@ + + + true + Form1 + false + 0 + true + 0 + 0 + true + diff --git a/Chapter02(Serial)/VirtualEarth/VirtualEarth/My Project/AssemblyInfo.vb b/Chapter02(Serial)/VirtualEarth/VirtualEarth/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..f0ea66a --- /dev/null +++ b/Chapter02(Serial)/VirtualEarth/VirtualEarth/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Chapter02(Serial)/VirtualEarth/VirtualEarth/My Project/Resources.Designer.vb b/Chapter02(Serial)/VirtualEarth/VirtualEarth/My Project/Resources.Designer.vb new file mode 100644 index 0000000..7a62477 --- /dev/null +++ b/Chapter02(Serial)/VirtualEarth/VirtualEarth/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.42 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("VirtualEarth.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Chapter02(Serial)/VirtualEarth/VirtualEarth/My Project/Resources.resx b/Chapter02(Serial)/VirtualEarth/VirtualEarth/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Chapter02(Serial)/VirtualEarth/VirtualEarth/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter02(Serial)/VirtualEarth/VirtualEarth/My Project/Settings.Designer.vb b/Chapter02(Serial)/VirtualEarth/VirtualEarth/My Project/Settings.Designer.vb new file mode 100644 index 0000000..0c915bc --- /dev/null +++ b/Chapter02(Serial)/VirtualEarth/VirtualEarth/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.42 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.VirtualEarth.My.MySettings + Get + Return Global.VirtualEarth.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Chapter02(Serial)/VirtualEarth/VirtualEarth/My Project/Settings.settings b/Chapter02(Serial)/VirtualEarth/VirtualEarth/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Chapter02(Serial)/VirtualEarth/VirtualEarth/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Chapter02(Serial)/VirtualEarth/VirtualEarth/VirtualEarth.sln b/Chapter02(Serial)/VirtualEarth/VirtualEarth/VirtualEarth.sln new file mode 100644 index 0000000..c474fc4 --- /dev/null +++ b/Chapter02(Serial)/VirtualEarth/VirtualEarth/VirtualEarth.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "VirtualEarth", "VirtualEarth.vbproj", "{A596933E-3079-4620-8A00-6E703B30317B}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {A596933E-3079-4620-8A00-6E703B30317B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A596933E-3079-4620-8A00-6E703B30317B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A596933E-3079-4620-8A00-6E703B30317B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A596933E-3079-4620-8A00-6E703B30317B}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Chapter02(Serial)/VirtualEarth/VirtualEarth/VirtualEarth.suo b/Chapter02(Serial)/VirtualEarth/VirtualEarth/VirtualEarth.suo new file mode 100644 index 0000000000000000000000000000000000000000..86d01f28461b7339ab5d27b655fbc0e82b9640ce GIT binary patch literal 22016 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

Dng1SEXhnQjo2z!jb$%v$+HS8a z7WoT2SI?OV?=JTe^o^p|VZ2OP;9)pf{;=dzxo~}kmA!9C4>VrtJ?~+Uy>fnM6WXWW z;=MdPKLR%@+bX>&DTu^>b=w~=|828upZ3-A77ThMubVqM+ZI-kKMTLkAW8j1Ph|9}?sPn&$wr|*vSLr+1Jb8TX&XLn7q!NDVQ~6X; z@q78t&Jk`$cC*NC2FxZjiJJY;S$SLk>J(&D{5R0{6+0jZrN7R#PE|C2ckQF%-$bV_ z{b%F+p8R+>la+wm6mb|v=U?MDYIadat+us`bofwmUAnuF9UnFG@rB`g7${+8x%aNW+@msR2fAmtW1D3$={BlBAQ5 zeP>aia>#V-dnV3>4p=Tm!)KlmrtmYvTGObxIP2{(hYRfL_j9~3d%Tb#Mwz@ns<(ga zm}oZkX(!{qeOB>%bAH;xcF&vWdh*yhXLW4dSpE!I5&2Jplg8ujtK0cq@7}lnIqi9$ z&$#{j-|Ijn>bT1 z?RJyU&qm_E{q*=Br&sM)Njog$d$o2DPbw1EE{w9&S!%UaykG0Qj`s|&vhZ5R zto4L;9Q?fp>)hI-QC3)|c#DRT5a>*~{!aT2Fu ziEC?Wt(0_}iss!-J$)N};v%Ek_TuD3uir^zzgk;MDeMmps}9#0RXIroe;^ea-$l{U zz3{C6)wJkup89hKVegmD&O3?=9!ZUOS7JK3_b3+IKmSvW``8Eb=AVKYvDg?Ry0LsP z3r0OlsmyH98Aj#ay;{^h1zO$OtGiA{d{M3Iz2oVe5nURcmbHBPseE|vcu%$Xs2=<7 zoyW;M53CcDey+9m0^IS*7pOpQa=MWU=uXK}&;K#-Yg1X1>a2ON3VZ5gr6^_Mqb2iM zpMAlKw!wXbV2UWwry`FuPD(9~KUYcg$?AJw0IwZsb6`jRnV^HfX$@U$=?O@MrUXJJk4J4vpvn z3U`-A{D+AjP)Mk)patHkYxs U->)QtT9p~7i;Q!P8>GPh0fh-ZGXMYp literal 0 HcmV?d00001 diff --git a/Chapter02(Serial)/VirtualEarth/VirtualEarth/VirtualEarth.vbproj b/Chapter02(Serial)/VirtualEarth/VirtualEarth/VirtualEarth.vbproj new file mode 100644 index 0000000..6f7a28f --- /dev/null +++ b/Chapter02(Serial)/VirtualEarth/VirtualEarth/VirtualEarth.vbproj @@ -0,0 +1,114 @@ + + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {A596933E-3079-4620-8A00-6E703B30317B} + WinExe + VirtualEarth.My.MyApplication + VirtualEarth + VirtualEarth + WindowsForms + + + true + full + true + true + bin\Debug\ + VirtualEarth.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + VirtualEarth.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + + + + + + + + + + + + + + + Form + + + Form1.vb + Form + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + Designer + Form1.vb + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + PreserveNewest + + + PreserveNewest + + + + + \ No newline at end of file diff --git a/Chapter02(Serial)/VirtualEarth/VirtualEarth/bin/Debug/Copy of Map.html b/Chapter02(Serial)/VirtualEarth/VirtualEarth/bin/Debug/Copy of Map.html new file mode 100644 index 0000000..2af5188 --- /dev/null +++ b/Chapter02(Serial)/VirtualEarth/VirtualEarth/bin/Debug/Copy of Map.html @@ -0,0 +1,63 @@ + + + My Virtual Earth + + + + + +

+ + diff --git a/Chapter02(Serial)/VirtualEarth/VirtualEarth/bin/Debug/Map.html b/Chapter02(Serial)/VirtualEarth/VirtualEarth/bin/Debug/Map.html new file mode 100644 index 0000000..3827150 --- /dev/null +++ b/Chapter02(Serial)/VirtualEarth/VirtualEarth/bin/Debug/Map.html @@ -0,0 +1,67 @@ + + + My Virtual Earth + + + + + + +
+ + diff --git a/Chapter02(Serial)/VirtualEarth/VirtualEarth/bin/Debug/VirtualEarth.exe b/Chapter02(Serial)/VirtualEarth/VirtualEarth/bin/Debug/VirtualEarth.exe new file mode 100644 index 0000000000000000000000000000000000000000..78c1e701bb3a4cb25a2b1a80269d4706a8fb11e6 GIT binary patch literal 40960 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 literal 0 HcmV?d00001 diff --git a/Chapter02(Serial)/VirtualEarth/VirtualEarth/bin/Debug/VirtualEarth.pdb b/Chapter02(Serial)/VirtualEarth/VirtualEarth/bin/Debug/VirtualEarth.pdb new file mode 100644 index 0000000000000000000000000000000000000000..7c30942c580b05f330009ef3e15af5cd5067c298 GIT binary patch literal 75264 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 TBcLY!&!}P9UAq3eeA)j4ZC9R* literal 0 HcmV?d00001 diff --git a/Chapter02(Serial)/VirtualEarth/VirtualEarth/bin/Debug/VirtualEarth.xml b/Chapter02(Serial)/VirtualEarth/VirtualEarth/bin/Debug/VirtualEarth.xml new file mode 100644 index 0000000..33b7ec4 --- /dev/null +++ b/Chapter02(Serial)/VirtualEarth/VirtualEarth/bin/Debug/VirtualEarth.xml @@ -0,0 +1,24 @@ + + + + +VirtualEarth + + + + + + Returns the cached ResourceManager instance used by this class. + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + \ No newline at end of file diff --git a/Chapter02(Serial)/VirtualEarth/VirtualEarth/obj/Debug/TempPE/My Project.Resources.Designer.vb.dll b/Chapter02(Serial)/VirtualEarth/VirtualEarth/obj/Debug/TempPE/My Project.Resources.Designer.vb.dll new file mode 100644 index 0000000000000000000000000000000000000000..8c4cf1ad60764cccedae7958f155a2adb8825739 GIT binary patch literal 7680 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 literal 0 HcmV?d00001 diff --git a/Chapter02(Serial)/VirtualEarth/VirtualEarth/obj/Debug/VirtualEarth.Form1.resources b/Chapter02(Serial)/VirtualEarth/VirtualEarth/obj/Debug/VirtualEarth.Form1.resources new file mode 100644 index 0000000000000000000000000000000000000000..06c24d06c1cab750788146ce052b37770f3fa530 GIT binary patch literal 180 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 literal 0 HcmV?d00001 diff --git a/Chapter02(Serial)/VirtualEarth/VirtualEarth/obj/Debug/VirtualEarth.pdb b/Chapter02(Serial)/VirtualEarth/VirtualEarth/obj/Debug/VirtualEarth.pdb new file mode 100644 index 0000000000000000000000000000000000000000..7c30942c580b05f330009ef3e15af5cd5067c298 GIT binary patch literal 75264 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 literal 0 HcmV?d00001 diff --git a/Chapter02(Serial)/VirtualEarth/VirtualEarth/obj/Debug/VirtualEarth.xml b/Chapter02(Serial)/VirtualEarth/VirtualEarth/obj/Debug/VirtualEarth.xml new file mode 100644 index 0000000..33b7ec4 --- /dev/null +++ b/Chapter02(Serial)/VirtualEarth/VirtualEarth/obj/Debug/VirtualEarth.xml @@ -0,0 +1,24 @@ + + + + +VirtualEarth + + + + + + Returns the cached ResourceManager instance used by this class. + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + \ No newline at end of file diff --git a/Chapter02(Serial)/VirtualEarth/VirtualEarth/obj/VirtualEarth.vbproj.FileList.txt b/Chapter02(Serial)/VirtualEarth/VirtualEarth/obj/VirtualEarth.vbproj.FileList.txt new file mode 100644 index 0000000..d4518d0 --- /dev/null +++ b/Chapter02(Serial)/VirtualEarth/VirtualEarth/obj/VirtualEarth.vbproj.FileList.txt @@ -0,0 +1,12 @@ +bin\Debug\Map.html +obj\Debug\ResolveAssemblyReference.cache +obj\Debug\VirtualEarth.vbproj.GenerateResource.Cache +bin\Debug\VirtualEarth.exe +bin\Debug\VirtualEarth.pdb +bin\Debug\VirtualEarth.xml +obj\Debug\VirtualEarth.Form1.resources +obj\Debug\VirtualEarth.Resources.resources +obj\Debug\VirtualEarth.exe +obj\Debug\VirtualEarth.xml +obj\Debug\VirtualEarth.pdb +bin\Debug\Copy of Map.html diff --git a/Chapter02(Serial)/VirtualEarth_CS/Form1.Designer.cs b/Chapter02(Serial)/VirtualEarth_CS/Form1.Designer.cs new file mode 100644 index 0000000..b130a13 --- /dev/null +++ b/Chapter02(Serial)/VirtualEarth_CS/Form1.Designer.cs @@ -0,0 +1,257 @@ +namespace VirtualEarth_CS +{ + partial class Form1 + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.lblMessage = new System.Windows.Forms.Label(); + this.btnConnect = new System.Windows.Forms.Button(); + this.Label2 = new System.Windows.Forms.Label(); + this.txtDataReceived = new System.Windows.Forms.TextBox(); + this.cbbCOMPorts = new System.Windows.Forms.ComboBox(); + this.GroupBox3 = new System.Windows.Forms.GroupBox(); + this.btnShowPath = new System.Windows.Forms.Button(); + this.btnClearPath = new System.Windows.Forms.Button(); + this.GroupBox2 = new System.Windows.Forms.GroupBox(); + this.Label1 = new System.Windows.Forms.Label(); + this.btnGotoPoint = new System.Windows.Forms.Button(); + this.WebBrowser1 = new System.Windows.Forms.WebBrowser(); + this.txtLongitude = new System.Windows.Forms.TextBox(); + this.txtLatitude = new System.Windows.Forms.TextBox(); + this.Timer1 = new System.Windows.Forms.Timer(this.components); + this.Label3 = new System.Windows.Forms.Label(); + this.GroupBox1 = new System.Windows.Forms.GroupBox(); + this.GroupBox3.SuspendLayout(); + this.GroupBox2.SuspendLayout(); + this.GroupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // lblMessage + // + this.lblMessage.Location = new System.Drawing.Point(472, 351); + this.lblMessage.Name = "lblMessage"; + this.lblMessage.Size = new System.Drawing.Size(240, 21); + this.lblMessage.TabIndex = 20; + // + // btnConnect + // + this.btnConnect.Location = new System.Drawing.Point(164, 14); + this.btnConnect.Name = "btnConnect"; + this.btnConnect.Size = new System.Drawing.Size(75, 23); + this.btnConnect.TabIndex = 13; + this.btnConnect.Text = "Connect"; + this.btnConnect.UseVisualStyleBackColor = true; + this.btnConnect.Click += new System.EventHandler(this.btnConnect_Click); + // + // Label2 + // + this.Label2.AutoSize = true; + this.Label2.Location = new System.Drawing.Point(16, 22); + this.Label2.Name = "Label2"; + this.Label2.Size = new System.Drawing.Size(45, 13); + this.Label2.TabIndex = 9; + this.Label2.Text = "Latitude"; + // + // txtDataReceived + // + this.txtDataReceived.Location = new System.Drawing.Point(6, 43); + this.txtDataReceived.Multiline = true; + this.txtDataReceived.Name = "txtDataReceived"; + this.txtDataReceived.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.txtDataReceived.Size = new System.Drawing.Size(233, 107); + this.txtDataReceived.TabIndex = 14; + this.txtDataReceived.WordWrap = false; + // + // cbbCOMPorts + // + this.cbbCOMPorts.FormattingEnabled = true; + this.cbbCOMPorts.Location = new System.Drawing.Point(78, 16); + this.cbbCOMPorts.Name = "cbbCOMPorts"; + this.cbbCOMPorts.Size = new System.Drawing.Size(80, 21); + this.cbbCOMPorts.TabIndex = 12; + // + // GroupBox3 + // + this.GroupBox3.Controls.Add(this.btnShowPath); + this.GroupBox3.Controls.Add(this.btnClearPath); + this.GroupBox3.Location = new System.Drawing.Point(467, 275); + this.GroupBox3.Name = "GroupBox3"; + this.GroupBox3.Size = new System.Drawing.Size(245, 73); + this.GroupBox3.TabIndex = 19; + this.GroupBox3.TabStop = false; + this.GroupBox3.Text = "Recorded Path"; + // + // btnShowPath + // + this.btnShowPath.Location = new System.Drawing.Point(6, 19); + this.btnShowPath.Name = "btnShowPath"; + this.btnShowPath.Size = new System.Drawing.Size(233, 23); + this.btnShowPath.TabIndex = 2; + this.btnShowPath.Text = "Show Path"; + this.btnShowPath.UseVisualStyleBackColor = true; + this.btnShowPath.Click += new System.EventHandler(this.btnShowPath_Click); + // + // btnClearPath + // + this.btnClearPath.Location = new System.Drawing.Point(6, 42); + this.btnClearPath.Name = "btnClearPath"; + this.btnClearPath.Size = new System.Drawing.Size(233, 23); + this.btnClearPath.TabIndex = 1; + this.btnClearPath.Text = "Clear Path"; + this.btnClearPath.UseVisualStyleBackColor = true; + this.btnClearPath.Click += new System.EventHandler(this.btnClearPath_Click); + // + // GroupBox2 + // + this.GroupBox2.Controls.Add(this.txtDataReceived); + this.GroupBox2.Controls.Add(this.btnConnect); + this.GroupBox2.Controls.Add(this.cbbCOMPorts); + this.GroupBox2.Controls.Add(this.Label1); + this.GroupBox2.Location = new System.Drawing.Point(467, 113); + this.GroupBox2.Name = "GroupBox2"; + this.GroupBox2.Size = new System.Drawing.Size(245, 156); + this.GroupBox2.TabIndex = 18; + this.GroupBox2.TabStop = false; + this.GroupBox2.Text = "GPS"; + // + // Label1 + // + this.Label1.AutoSize = true; + this.Label1.Location = new System.Drawing.Point(21, 19); + this.Label1.Name = "Label1"; + this.Label1.Size = new System.Drawing.Size(51, 13); + this.Label1.TabIndex = 11; + this.Label1.Text = "GPS Port"; + // + // btnGotoPoint + // + this.btnGotoPoint.Location = new System.Drawing.Point(141, 71); + this.btnGotoPoint.Name = "btnGotoPoint"; + this.btnGotoPoint.Size = new System.Drawing.Size(98, 23); + this.btnGotoPoint.TabIndex = 13; + this.btnGotoPoint.Text = "Goto Point"; + this.btnGotoPoint.UseVisualStyleBackColor = true; + this.btnGotoPoint.Click += new System.EventHandler(this.btnGotoPoint_Click); + // + // WebBrowser1 + // + this.WebBrowser1.Location = new System.Drawing.Point(2, 3); + this.WebBrowser1.MinimumSize = new System.Drawing.Size(20, 20); + this.WebBrowser1.Name = "WebBrowser1"; + this.WebBrowser1.ScrollBarsEnabled = false; + this.WebBrowser1.Size = new System.Drawing.Size(460, 380); + this.WebBrowser1.TabIndex = 16; + // + // txtLongitude + // + this.txtLongitude.Location = new System.Drawing.Point(67, 45); + this.txtLongitude.Name = "txtLongitude"; + this.txtLongitude.Size = new System.Drawing.Size(172, 20); + this.txtLongitude.TabIndex = 12; + // + // txtLatitude + // + this.txtLatitude.Location = new System.Drawing.Point(67, 19); + this.txtLatitude.Name = "txtLatitude"; + this.txtLatitude.Size = new System.Drawing.Size(172, 20); + this.txtLatitude.TabIndex = 11; + // + // Timer1 + // + this.Timer1.Interval = 500; + this.Timer1.Tick += new System.EventHandler(this.Timer1_Tick); + // + // Label3 + // + this.Label3.AutoSize = true; + this.Label3.Location = new System.Drawing.Point(7, 48); + this.Label3.Name = "Label3"; + this.Label3.Size = new System.Drawing.Size(54, 13); + this.Label3.TabIndex = 10; + this.Label3.Text = "Longitude"; + // + // GroupBox1 + // + this.GroupBox1.Controls.Add(this.btnGotoPoint); + this.GroupBox1.Controls.Add(this.txtLongitude); + this.GroupBox1.Controls.Add(this.txtLatitude); + this.GroupBox1.Controls.Add(this.Label3); + this.GroupBox1.Controls.Add(this.Label2); + this.GroupBox1.Location = new System.Drawing.Point(467, 3); + this.GroupBox1.Name = "GroupBox1"; + this.GroupBox1.Size = new System.Drawing.Size(245, 104); + this.GroupBox1.TabIndex = 17; + this.GroupBox1.TabStop = false; + this.GroupBox1.Text = "Current Location:"; + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.Khaki; + this.ClientSize = new System.Drawing.Size(715, 386); + this.Controls.Add(this.lblMessage); + this.Controls.Add(this.GroupBox3); + this.Controls.Add(this.GroupBox2); + this.Controls.Add(this.WebBrowser1); + this.Controls.Add(this.GroupBox1); + this.Name = "Form1"; + this.Text = "Microsoft Virtual Earth"; + this.Load += new System.EventHandler(this.Form1_Load); + this.GroupBox3.ResumeLayout(false); + this.GroupBox2.ResumeLayout(false); + this.GroupBox2.PerformLayout(); + this.GroupBox1.ResumeLayout(false); + this.GroupBox1.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + internal System.Windows.Forms.Label lblMessage; + internal System.Windows.Forms.Button btnConnect; + internal System.Windows.Forms.Label Label2; + internal System.Windows.Forms.TextBox txtDataReceived; + internal System.Windows.Forms.ComboBox cbbCOMPorts; + internal System.Windows.Forms.GroupBox GroupBox3; + internal System.Windows.Forms.Button btnShowPath; + internal System.Windows.Forms.Button btnClearPath; + internal System.Windows.Forms.GroupBox GroupBox2; + internal System.Windows.Forms.Label Label1; + internal System.Windows.Forms.Button btnGotoPoint; + internal System.Windows.Forms.WebBrowser WebBrowser1; + internal System.Windows.Forms.TextBox txtLongitude; + internal System.Windows.Forms.TextBox txtLatitude; + internal System.Windows.Forms.Timer Timer1; + internal System.Windows.Forms.Label Label3; + internal System.Windows.Forms.GroupBox GroupBox1; + + } +} + diff --git a/Chapter02(Serial)/VirtualEarth_CS/Form1.cs b/Chapter02(Serial)/VirtualEarth_CS/Form1.cs new file mode 100644 index 0000000..c42e93c --- /dev/null +++ b/Chapter02(Serial)/VirtualEarth_CS/Form1.cs @@ -0,0 +1,236 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace VirtualEarth_CS +{ + [System.Runtime.InteropServices.ComVisibleAttribute(true)] + public partial class Form1 : Form + { + private int pushpin = 0; + + private int pointCounter; + + private int lineIndex = 0; + string[] line; + + private System.IO.Ports.SerialPort serialPort = new System.IO.Ports.SerialPort(); + + public Form1() + { + InitializeComponent(); + } + + private void btnGotoPoint_Click(object sender, EventArgs e) + { + double lat, lng; + lat = Convert.ToDouble(txtLatitude.Text); + lng = Convert.ToDouble(txtLongitude.Text); + gotoPosition(lat, lng, false, ""); + } + + private void Form1_Load(object sender, EventArgs e) + { + // set the event handler for the DataReceived event + serialPort.DataReceived += + new System.IO.Ports.SerialDataReceivedEventHandler(DataReceived); + + string[] portNames = System.IO.Ports.SerialPort.GetPortNames(); + for (int i = 0; i <= portNames.Length - 1; i++) + { + cbbCOMPorts.Items.Add(portNames[i]); + } + + string fileContents; + fileContents = System.IO.File.ReadAllText(Application.StartupPath + "\\Map.html"); + WebBrowser1.DocumentText = fileContents; + WebBrowser1.ObjectForScripting = this; + } + + private void btnClearPath_Click(object sender, EventArgs e) + { + for (int i = 0; i <= pushpin; i++) + { + removePushpin(i); + } + } + + private void btnShowPath_Click(object sender, EventArgs e) + { + string fileContents = string.Empty; + OpenFileDialog openFileDialog1 = new OpenFileDialog(); + openFileDialog1.InitialDirectory = "c:\\"; + openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"; + openFileDialog1.FilterIndex = 2; + openFileDialog1.RestoreDirectory = true; + if (openFileDialog1.ShowDialog() == DialogResult.OK) + { + fileContents = System.IO.File.ReadAllText(openFileDialog1.FileName); + } + + line = fileContents.Split('$'); + lineIndex = 0; + Timer1.Enabled = true; + } + + //---go to a particular location on the map--- + private void gotoPosition(double lat, double lng, bool showPushpin, string pushPinText) + { + object[] param = new object[] { lat, lng }; + WebBrowser1.Document.InvokeScript("goto_map_position", param); + if (showPushpin) + { + param = new object[] { pushpin, pushPinText, lat, lng }; + WebBrowser1.Document.InvokeScript("addPushpin", param); + pushpin += 1; + } + } + + //---update the latitude and longitude on the TextBox controls--- + public void mapPositionChange(double lat, double lng) + { + txtLatitude.Text = Convert.ToString(lat); + txtLongitude.Text = Convert.ToString(lng); + } + + //---remove a pushpin--- + private void removePushpin(int id) + { + object[] param = new object[] { id }; + WebBrowser1.Document.InvokeScript("removePushpin", param); + } + + private void Timer1_Tick(object sender, EventArgs e) + { + if (lineIndex == 0) + { + pointCounter = 1; + } + while ((lineIndex <= line.Length - 1)) + { + if (line[lineIndex].StartsWith("GPGGA") && processGPSData(line[lineIndex])) + { + lblMessage.Text = "Updating map...point " + pointCounter; + pointCounter += 1; + break; + } + lineIndex += 1; + } + lineIndex += 1; + if (lineIndex > line.Length - 1) + { + Timer1.Enabled = false; + lblMessage.Text = "Plotting completed."; + } + } + + private void btnConnect_Click(object sender, EventArgs e) + { + if (btnConnect.Text == "Connect") + { + btnConnect.Text = "Disconnect"; + if (serialPort.IsOpen) + { + serialPort.Close(); + } + try + { + serialPort.PortName = cbbCOMPorts.Text; + serialPort.BaudRate = 9600; + serialPort.Parity = System.IO.Ports.Parity.None; + serialPort.DataBits = 8; + serialPort.StopBits = System.IO.Ports.StopBits.One; + serialPort.Open(); + lblMessage.Text = cbbCOMPorts.Text + " connected."; + } + catch (Exception ex) + { + MessageBox.Show(ex.ToString()); + } + } + else + { + btnConnect.Text = "Connect"; + serialPort.Close(); + } + } + + private void DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) + { + txtDataReceived.BeginInvoke(new myDelegate(updateTextBox)); + } + + public delegate void myDelegate(); + public void updateTextBox() + { + try + { + string Data = serialPort.ReadExisting(); + txtDataReceived.AppendText(Data); + txtDataReceived.ScrollToCaret(); + string GPSData = txtDataReceived.Lines[txtDataReceived.Lines.Length - 2]; + if (GPSData.StartsWith("$GPGGA")) + { + if (!(processGPSData(GPSData))) + { + lblMessage.Text = "No fix..."; + } + } + } + catch (Exception ex) + { + Console.WriteLine(ex.ToString()); + } + } + + private bool processGPSData(string str) + { + try + { + string[] field; + field = str.Split(','); + double lat; + double lng; + double rawLatLng; + if (field.Length < 15) + { + return false; + } + + rawLatLng = Convert.ToDouble(field[2]); + lat = ((int)(rawLatLng / 100)) + ((rawLatLng - (((int)(rawLatLng / 100)) * 100)) / 60); + if (field[3] == "S") + { + lat *= -1; + } + + rawLatLng = Convert.ToDouble(field[4]); + lng = ((int)(rawLatLng / 100)) + ((rawLatLng - (((int)(rawLatLng / 100)) * 100)) / 60); + if (field[5] == "W") + { + lng *= -1; + } + + if (str.StartsWith("$")) + { + gotoPosition(lat, lng, false, ""); + + } else + { + gotoPosition(lat, lng, true, "*"); + + } + lblMessage.Text = "Latitude: " + lat + " Longitude: " + lng; + return true; + } + catch + { + return false; + } + } + } +} \ No newline at end of file diff --git a/Chapter02(Serial)/VirtualEarth_CS/Form1.resx b/Chapter02(Serial)/VirtualEarth_CS/Form1.resx new file mode 100644 index 0000000..cce5ec2 --- /dev/null +++ b/Chapter02(Serial)/VirtualEarth_CS/Form1.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/Chapter02(Serial)/VirtualEarth_CS/Map.html b/Chapter02(Serial)/VirtualEarth_CS/Map.html new file mode 100644 index 0000000..3827150 --- /dev/null +++ b/Chapter02(Serial)/VirtualEarth_CS/Map.html @@ -0,0 +1,67 @@ + + + My Virtual Earth + + + + + + +
+ + diff --git a/Chapter02(Serial)/VirtualEarth_CS/Program.cs b/Chapter02(Serial)/VirtualEarth_CS/Program.cs new file mode 100644 index 0000000..38e20f6 --- /dev/null +++ b/Chapter02(Serial)/VirtualEarth_CS/Program.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace VirtualEarth_CS +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form1()); + } + } +} \ No newline at end of file diff --git a/Chapter02(Serial)/VirtualEarth_CS/Properties/AssemblyInfo.cs b/Chapter02(Serial)/VirtualEarth_CS/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..9771a16 --- /dev/null +++ b/Chapter02(Serial)/VirtualEarth_CS/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("VirtualEarth_CS")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("VirtualEarth_CS")] +[assembly: AssemblyCopyright("Copyright © 2006")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("feec3c9c-42c9-407f-b8ea-602626948a74")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Chapter02(Serial)/VirtualEarth_CS/Properties/Resources.Designer.cs b/Chapter02(Serial)/VirtualEarth_CS/Properties/Resources.Designer.cs new file mode 100644 index 0000000..f1236ca --- /dev/null +++ b/Chapter02(Serial)/VirtualEarth_CS/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace VirtualEarth_CS.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("VirtualEarth_CS.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/Chapter02(Serial)/VirtualEarth_CS/Properties/Resources.resx b/Chapter02(Serial)/VirtualEarth_CS/Properties/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Chapter02(Serial)/VirtualEarth_CS/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter02(Serial)/VirtualEarth_CS/Properties/Settings.Designer.cs b/Chapter02(Serial)/VirtualEarth_CS/Properties/Settings.Designer.cs new file mode 100644 index 0000000..9b8bd67 --- /dev/null +++ b/Chapter02(Serial)/VirtualEarth_CS/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace VirtualEarth_CS.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/Chapter02(Serial)/VirtualEarth_CS/Properties/Settings.settings b/Chapter02(Serial)/VirtualEarth_CS/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/Chapter02(Serial)/VirtualEarth_CS/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Chapter02(Serial)/VirtualEarth_CS/VirtualEarth_CS.csproj b/Chapter02(Serial)/VirtualEarth_CS/VirtualEarth_CS.csproj new file mode 100644 index 0000000..dc6daf3 --- /dev/null +++ b/Chapter02(Serial)/VirtualEarth_CS/VirtualEarth_CS.csproj @@ -0,0 +1,83 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {09F1DE20-21FC-489B-A21B-AD82BF7DA2F9} + WinExe + Properties + VirtualEarth_CS + VirtualEarth_CS + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + Form + + + Form1.cs + + + + + Designer + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + PreserveNewest + + + + + \ No newline at end of file diff --git a/Chapter02(Serial)/VirtualEarth_CS/VirtualEarth_CS.sln b/Chapter02(Serial)/VirtualEarth_CS/VirtualEarth_CS.sln new file mode 100644 index 0000000..08f2d82 --- /dev/null +++ b/Chapter02(Serial)/VirtualEarth_CS/VirtualEarth_CS.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VirtualEarth_CS", "VirtualEarth_CS.csproj", "{09F1DE20-21FC-489B-A21B-AD82BF7DA2F9}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {09F1DE20-21FC-489B-A21B-AD82BF7DA2F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {09F1DE20-21FC-489B-A21B-AD82BF7DA2F9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {09F1DE20-21FC-489B-A21B-AD82BF7DA2F9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {09F1DE20-21FC-489B-A21B-AD82BF7DA2F9}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Chapter02(Serial)/VirtualEarth_CS/VirtualEarth_CS.suo b/Chapter02(Serial)/VirtualEarth_CS/VirtualEarth_CS.suo new file mode 100644 index 0000000000000000000000000000000000000000..9ade14b05ca9b1439fd7fc984fed7e9e0b3e40ba GIT binary patch literal 22016 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 literal 0 HcmV?d00001 diff --git a/Chapter02(Serial)/VirtualEarth_CS/bin/Debug/Map.html b/Chapter02(Serial)/VirtualEarth_CS/bin/Debug/Map.html new file mode 100644 index 0000000..3827150 --- /dev/null +++ b/Chapter02(Serial)/VirtualEarth_CS/bin/Debug/Map.html @@ -0,0 +1,67 @@ + + + My Virtual Earth + + + + + + +
+ + diff --git a/Chapter02(Serial)/VirtualEarth_CS/bin/Debug/VirtualEarth_CS.exe b/Chapter02(Serial)/VirtualEarth_CS/bin/Debug/VirtualEarth_CS.exe new file mode 100644 index 0000000000000000000000000000000000000000..9389bef1767d4894781f204bae85c9046a2cad72 GIT binary patch literal 28672 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
)kp_^?98&I;EeaCVEDH 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 EzZ8U3^Z)<= literal 0 HcmV?d00001 diff --git a/Chapter02(Serial)/VirtualEarth_CS/bin/Debug/VirtualEarth_CS.pdb b/Chapter02(Serial)/VirtualEarth_CS/bin/Debug/VirtualEarth_CS.pdb new file mode 100644 index 0000000000000000000000000000000000000000..3f3f9bf73767461348129453e3c2384410f81b57 GIT binary patch literal 32256 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 TBcLY!&!}P9UAq3eeA)j4ZC9R* literal 0 HcmV?d00001 diff --git a/Chapter02(Serial)/VirtualEarth_CS/obj/Debug/VirtualEarth_CS.Form1.resources b/Chapter02(Serial)/VirtualEarth_CS/obj/Debug/VirtualEarth_CS.Form1.resources new file mode 100644 index 0000000000000000000000000000000000000000..06c24d06c1cab750788146ce052b37770f3fa530 GIT binary patch literal 180 zcmX?i>is@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYis@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HY?^31vpRY+>l_lbQxem8r?-LO2-rH=EG{;<;&GX+7z@I zI^<|rFV<7__h_q9o`=~nkHX{jqp(YU2zxoXLeAmU%D$24Pp#6q2K8bk2X`7hMkMfN pP?4;f<_<;r^TXT8{f{7E$`$ub4!AwBdo~?$Zi|nzZE=pR^BaW+?)(4% literal 0 HcmV?d00001 diff --git a/Chapter02(Serial)/VirtualEarth_CS/obj/Debug/VirtualEarth_CS.exe b/Chapter02(Serial)/VirtualEarth_CS/obj/Debug/VirtualEarth_CS.exe new file mode 100644 index 0000000000000000000000000000000000000000..9389bef1767d4894781f204bae85c9046a2cad72 GIT binary patch literal 28672 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 EzZ8U3^Z)<= literal 0 HcmV?d00001 diff --git a/Chapter02(Serial)/VirtualEarth_CS/obj/Debug/VirtualEarth_CS.pdb b/Chapter02(Serial)/VirtualEarth_CS/obj/Debug/VirtualEarth_CS.pdb new file mode 100644 index 0000000000000000000000000000000000000000..3f3f9bf73767461348129453e3c2384410f81b57 GIT binary patch literal 32256 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 H?%MwVhnJ>K literal 0 HcmV?d00001 diff --git a/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/DBClass.vb b/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/DBClass.vb new file mode 100644 index 0000000..5968f0e --- /dev/null +++ b/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/DBClass.vb @@ -0,0 +1,179 @@ +'------------------------------------------------------------------------------- +'GrFinger Sample +'(c) 2005 Griaule Tecnologia Ltda. +'http://www.griaule.com +'------------------------------------------------------------------------------- +' +'This sample is provided with "GrFinger Fingerprint Recognition Library" and +'can't run without it. It's provided just as an example of using GrFinger +'Fingerprint Recognition Library and should not be used as basis for any +'commercial product. +' +'Griaule Tecnologia makes no representations concerning either the merchantability +'of this software or the suitability of this sample for any particular purpose. +' +'THIS SAMPLE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR +'IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +'OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +'IN NO EVENT SHALL GRIAULE BE LIABLE FOR ANY DIRECT, INDIRECT, +'INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +'NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +'DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +'THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +'(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +'THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +' +'You can download the free version of GrFinger directly from Griaule website. +' +'These notices must be retained in any copies of any part of this +'documentation and/or sample. +' +'------------------------------------------------------------------------------- + +' ----------------------------------------------------------------------------------- +' Database routines +' ----------------------------------------------------------------------------------- + +Imports System.Data.OleDb +Imports System.Runtime.InteropServices + +' Template data +Public Class TTemplate + ' Template itself + Public tpt As System.Array = Array.CreateInstance(GetType(Byte), GrFingerXLib.GRConstants.GR_MAX_SIZE_TEMPLATE) + + + ' Template size + Public Size As Long +End Class + +' Template list +Public Structure TTemplates + ' ID + Public ID As Integer + ' Template itself + Public template As TTemplate +End Structure + +Public Class DBClass + + ' the database we'll be connecting to + Const DBFile As String = "GrFingerSample.mdb" + Const ConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + + ' the connection object + Dim connection As New OleDbConnection + + ' Open connection + Public Function OpenDB() As Boolean + Dim filePath As String + Try + filePath = Application.StartupPath() & "\" & DBFile + connection = New OleDb.OleDbConnection(ConnectionString & filePath) + Return True + Catch + Return False + End Try + End Function + + ' Close conection + Public Sub closeDB() + connection.Close() + End Sub + + ' Clear database + Public Sub clearDB() + Dim sqlCMD As OleDbCommand = New OleDbCommand("DELETE FROM enroll", connection) + ' run "clear" query + sqlCMD.Connection.Open() + sqlCMD.ExecuteNonQuery() + sqlCMD.Connection.Close() + End Sub + + ' Add template to database. Returns added template ID. + Public Function AddTemplate(ByRef template As TTemplate) As Long + Dim da As New OleDbDataAdapter("select * from enroll", connection) + + ' Create SQL command containing ? parameter for BLOB. + da.InsertCommand = New OleDbCommand("INSERT INTO enroll (template) Values(?)", connection) + da.InsertCommand.CommandType = CommandType.Text + da.InsertCommand.Parameters.Add("@template", OleDbType.Binary, template.Size, "template") + + ' Open connection + connection.Open() + + ' Fill DataSet. + Dim enroll As DataSet = New DataSet + da.Fill(enroll, "enroll") + + ' Add a new row. + ' Create parameter for ? contained in the SQL statement. + Dim newRow As DataRow = enroll.Tables("enroll").NewRow() + newRow("template") = template.tpt + enroll.Tables("enroll").Rows.Add(newRow) + + ' Include an event to fill in the Autonumber value. + AddHandler da.RowUpdated, New OleDbRowUpdatedEventHandler(AddressOf OnRowUpdated) + + ' Update DataSet. + da.Update(enroll, "enroll") + connection.Close() + + ' return ID + Return newRow("ID") + End Function + + ' Event procedure for OnRowUpdated + Private Sub OnRowUpdated(ByVal sender As Object, ByVal args As OleDbRowUpdatedEventArgs) + ' Include a variable and a command to retrieve identity value + ' from Access database. + Dim newID As Integer = 0 + Dim idCMD As OleDbCommand = New OleDbCommand("SELECT @@IDENTITY", connection) + + If args.StatementType = StatementType.Insert Then + ' Retrieve identity value and store it in column + newID = CInt(idCMD.ExecuteScalar()) + args.Row("ID") = newID + End If + End Sub + + ' Returns a DataTable with all enrolled templates from database. + Public Function getTemplates() As TTemplates() + Dim ds As New DataSet + Dim da As New OleDbDataAdapter("select * from enroll", connection) + Dim ttpts As TTemplates() + Dim i As Integer + + ' Get query response + da.Fill(ds) + Dim tpts As DataRowCollection = ds.Tables(0).Rows + ' Create response array + ReDim ttpts(tpts.Count) + ' No results? + If tpts.Count = 0 Then Return ttpts + ' get each template and put results in our array + For i = 1 To tpts.Count + ttpts(i).template = New TTemplate + ttpts(i).ID = tpts.Item(i - 1).Item("ID") + ttpts(i).template.tpt = tpts.Item(i - 1).Item("template") + ttpts(i).template.Size = ttpts(i).template.tpt.Length + Next + Return ttpts + End Function + + ' Returns template with supplied ID. + Public Function getTemplate(ByVal id As Long) As Byte() + Dim ds As New DataSet + Dim da As New OleDbDataAdapter("select * from enroll where ID = " & id, connection) + Dim tpt As New TTemplate + + ' Get query response + da.Fill(ds) + Dim tpts As DataRowCollection = ds.Tables(0).Rows + ' No results? + If tpts.Count <> 1 Then Return Nothing + ' Deserialize template and return it + Return tpts.Item(0).Item("template") + End Function + +End Class diff --git a/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/FingerPrintReader.vbproj b/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/FingerPrintReader.vbproj new file mode 100644 index 0000000..dbda247 --- /dev/null +++ b/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/FingerPrintReader.vbproj @@ -0,0 +1,134 @@ + + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {B714CE33-585E-4ADD-9FBC-4192DA93C3A5} + WinExe + FingerPrintReader.My.MyApplication + FingerPrintReader + FingerPrintReader + WindowsForms + + + true + full + true + true + bin\Debug\ + FingerPrintReader.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + FingerPrintReader.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + + + + + + + + + + + + + + + + Form + + + Form1.vb + Form + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + + Designer + Form1.vb + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + {A9995C7C-77BF-4E27-B581-A4B5BBD90E50} + 1 + 0 + 0 + aximp + False + + + {A9995C7C-77BF-4E27-B581-A4B5BBD90E50} + 1 + 0 + 0 + tlbimp + False + + + + + + + + Always + + + + + \ No newline at end of file diff --git a/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/FingerPrintReader.vbproj.user b/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/FingerPrintReader.vbproj.user new file mode 100644 index 0000000..a1d742b --- /dev/null +++ b/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/FingerPrintReader.vbproj.user @@ -0,0 +1,5 @@ + + + ProjectFiles + + \ No newline at end of file diff --git a/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/Form1.Designer.vb b/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/Form1.Designer.vb new file mode 100644 index 0000000..d594d17 --- /dev/null +++ b/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/Form1.Designer.vb @@ -0,0 +1,234 @@ + _ +Partial Class Form1 + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.components = New System.ComponentModel.Container + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(Form1)) + Me.PictureBox1 = New System.Windows.Forms.PictureBox + Me.GroupBox1 = New System.Windows.Forms.GroupBox + Me.txtEmail = New System.Windows.Forms.TextBox + Me.Label5 = New System.Windows.Forms.Label + Me.txtContactNumber = New System.Windows.Forms.TextBox + Me.txtCompany = New System.Windows.Forms.TextBox + Me.txtName = New System.Windows.Forms.TextBox + Me.txtSSN = New System.Windows.Forms.TextBox + Me.Label4 = New System.Windows.Forms.Label + Me.Label3 = New System.Windows.Forms.Label + Me.Label2 = New System.Windows.Forms.Label + Me.Label1 = New System.Windows.Forms.Label + Me.lblMessage = New System.Windows.Forms.Label + Me.ListBox1 = New System.Windows.Forms.ListBox + Me.btnRegister = New System.Windows.Forms.Button + Me.AxGrFingerXCtrl1 = New AxGrFingerXLib.AxGrFingerXCtrl + Me.Timer1 = New System.Windows.Forms.Timer(Me.components) + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.GroupBox1.SuspendLayout() + CType(Me.AxGrFingerXCtrl1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'PictureBox1 + ' + Me.PictureBox1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D + Me.PictureBox1.Image = Global.FingerPrintReader.My.Resources.Resources.fingerprintreader + Me.PictureBox1.Location = New System.Drawing.Point(12, 12) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(160, 232) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage + Me.PictureBox1.TabIndex = 1 + Me.PictureBox1.TabStop = False + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.txtEmail) + Me.GroupBox1.Controls.Add(Me.Label5) + Me.GroupBox1.Controls.Add(Me.txtContactNumber) + Me.GroupBox1.Controls.Add(Me.txtCompany) + Me.GroupBox1.Controls.Add(Me.txtName) + Me.GroupBox1.Controls.Add(Me.txtSSN) + Me.GroupBox1.Controls.Add(Me.Label4) + Me.GroupBox1.Controls.Add(Me.Label3) + Me.GroupBox1.Controls.Add(Me.Label2) + Me.GroupBox1.Controls.Add(Me.Label1) + Me.GroupBox1.Location = New System.Drawing.Point(178, 92) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(336, 152) + Me.GroupBox1.TabIndex = 18 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "User's Particulars" + ' + 'txtEmail + ' + Me.txtEmail.Location = New System.Drawing.Point(144, 120) + Me.txtEmail.Name = "txtEmail" + Me.txtEmail.Size = New System.Drawing.Size(184, 20) + Me.txtEmail.TabIndex = 24 + ' + 'Label5 + ' + Me.Label5.AutoSize = True + Me.Label5.Location = New System.Drawing.Point(96, 120) + Me.Label5.Name = "Label5" + Me.Label5.Size = New System.Drawing.Size(32, 13) + Me.Label5.TabIndex = 23 + Me.Label5.Text = "Email" + ' + 'txtContactNumber + ' + Me.txtContactNumber.Location = New System.Drawing.Point(144, 96) + Me.txtContactNumber.Name = "txtContactNumber" + Me.txtContactNumber.Size = New System.Drawing.Size(104, 20) + Me.txtContactNumber.TabIndex = 22 + ' + 'txtCompany + ' + Me.txtCompany.Location = New System.Drawing.Point(144, 72) + Me.txtCompany.Name = "txtCompany" + Me.txtCompany.Size = New System.Drawing.Size(184, 20) + Me.txtCompany.TabIndex = 21 + ' + 'txtName + ' + Me.txtName.Location = New System.Drawing.Point(144, 48) + Me.txtName.Name = "txtName" + Me.txtName.Size = New System.Drawing.Size(184, 20) + Me.txtName.TabIndex = 20 + ' + 'txtSSN + ' + Me.txtSSN.Location = New System.Drawing.Point(144, 24) + Me.txtSSN.Name = "txtSSN" + Me.txtSSN.Size = New System.Drawing.Size(100, 20) + Me.txtSSN.TabIndex = 19 + ' + 'Label4 + ' + Me.Label4.AutoSize = True + Me.Label4.Location = New System.Drawing.Point(48, 96) + Me.Label4.Name = "Label4" + Me.Label4.Size = New System.Drawing.Size(84, 13) + Me.Label4.TabIndex = 18 + Me.Label4.Text = "Contact Number" + ' + 'Label3 + ' + Me.Label3.AutoSize = True + Me.Label3.Location = New System.Drawing.Point(80, 72) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(51, 13) + Me.Label3.TabIndex = 17 + Me.Label3.Text = "Company" + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Location = New System.Drawing.Point(8, 24) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(117, 13) + Me.Label2.TabIndex = 16 + Me.Label2.Text = "Social Security Number" + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.Location = New System.Drawing.Point(96, 48) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(35, 13) + Me.Label1.TabIndex = 15 + Me.Label1.Text = "Name" + ' + 'lblMessage + ' + Me.lblMessage.BackColor = System.Drawing.SystemColors.ControlLightLight + Me.lblMessage.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D + Me.lblMessage.Font = New System.Drawing.Font("Microsoft Sans Serif", 15.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblMessage.Location = New System.Drawing.Point(178, 12) + Me.lblMessage.Name = "lblMessage" + Me.lblMessage.Size = New System.Drawing.Size(336, 72) + Me.lblMessage.TabIndex = 17 + Me.lblMessage.Text = "Please place your index finger on the fingerprint reader" + ' + 'ListBox1 + ' + Me.ListBox1.Location = New System.Drawing.Point(12, 281) + Me.ListBox1.Name = "ListBox1" + Me.ListBox1.Size = New System.Drawing.Size(502, 95) + Me.ListBox1.TabIndex = 19 + ' + 'btnRegister + ' + Me.btnRegister.Location = New System.Drawing.Point(439, 252) + Me.btnRegister.Name = "btnRegister" + Me.btnRegister.Size = New System.Drawing.Size(75, 23) + Me.btnRegister.TabIndex = 21 + Me.btnRegister.Text = "Register" + Me.btnRegister.UseVisualStyleBackColor = True + ' + 'AxGrFingerXCtrl1 + ' + Me.AxGrFingerXCtrl1.Enabled = True + Me.AxGrFingerXCtrl1.Location = New System.Drawing.Point(41, 37) + Me.AxGrFingerXCtrl1.Name = "AxGrFingerXCtrl1" + Me.AxGrFingerXCtrl1.OcxState = CType(resources.GetObject("AxGrFingerXCtrl1.OcxState"), System.Windows.Forms.AxHost.State) + Me.AxGrFingerXCtrl1.Size = New System.Drawing.Size(32, 32) + Me.AxGrFingerXCtrl1.TabIndex = 22 + ' + 'Timer1 + ' + Me.Timer1.Interval = 5000 + ' + 'Form1 + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(527, 388) + Me.Controls.Add(Me.AxGrFingerXCtrl1) + Me.Controls.Add(Me.btnRegister) + Me.Controls.Add(Me.ListBox1) + Me.Controls.Add(Me.GroupBox1) + Me.Controls.Add(Me.lblMessage) + Me.Controls.Add(Me.PictureBox1) + Me.Name = "Form1" + Me.Text = "Visitor Identification System" + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.GroupBox1.ResumeLayout(False) + Me.GroupBox1.PerformLayout() + CType(Me.AxGrFingerXCtrl1, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + + End Sub + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox + Friend WithEvents txtEmail As System.Windows.Forms.TextBox + Friend WithEvents Label5 As System.Windows.Forms.Label + Friend WithEvents txtContactNumber As System.Windows.Forms.TextBox + Friend WithEvents txtCompany As System.Windows.Forms.TextBox + Friend WithEvents txtName As System.Windows.Forms.TextBox + Friend WithEvents txtSSN As System.Windows.Forms.TextBox + Friend WithEvents Label4 As System.Windows.Forms.Label + Friend WithEvents Label3 As System.Windows.Forms.Label + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents lblMessage As System.Windows.Forms.Label + Friend WithEvents ListBox1 As System.Windows.Forms.ListBox + Friend WithEvents btnRegister As System.Windows.Forms.Button + Friend WithEvents AxGrFingerXCtrl1 As AxGrFingerXLib.AxGrFingerXCtrl + Friend WithEvents Timer1 As System.Windows.Forms.Timer + +End Class diff --git a/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/Form1.resx b/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/Form1.resx new file mode 100644 index 0000000..2baddb4 --- /dev/null +++ b/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/Form1.resx @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACFTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5BeEhvc3QrU3RhdGUBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAAIQAAAAIB + AAAAAQAAAAAAAAAAAAAAAAwAAAAQBwAATwMAAE8DAAAL + + + + 17, 17 + + + 197 + + \ No newline at end of file diff --git a/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/Form1.vb b/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/Form1.vb new file mode 100644 index 0000000..f231369 --- /dev/null +++ b/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/Form1.vb @@ -0,0 +1,278 @@ +Imports GrFingerXLib + +Public Class Form1 + '---name of the database--- + Const DBFile = "GrFingerSample.mdb" + Const Logfile = "C:\Log.csv" + Const ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + + '---for an instance of the Util.vb class--- + Private myUtil As Util + '---for storing user’s ID--- + Private _UserID As Integer + '---database connection string--- + Private connection As System.Data.OleDb.OleDbConnection + + Private Sub Form1_Load( _ + ByVal sender As System.Object, _ + ByVal e As System.EventArgs) _ + Handles MyBase.Load + Dim err As Integer + ' initialize util class + myUtil = New Util(ListBox1, PictureBox1, AxGrFingerXCtrl1) + ' Initialize GrFingerX Library + err = myUtil.InitializeGrFinger() + ' Print result in log + If err < 0 Then + myUtil.WriteError(err) + Exit Sub + Else + myUtil.WriteLog( _ + "**GrFingerX Initialized Successfull**") + End If + + '---create a log file--- + If Not System.IO.File.Exists(Logfile) Then + System.IO.File.Create(Logfile) + End If + End Sub + + ' ----------------------------------------------------------------------------------- + ' GrFingerX events + ' ----------------------------------------------------------------------------------- + ' A fingerprint reader was plugged on system + Private Sub AxGrFingerXCtrl1_SensorPlug( _ + ByVal sender As System.Object, _ + ByVal e As AxGrFingerXLib._IGrFingerXCtrlEvents_SensorPlugEvent) _ + Handles AxGrFingerXCtrl1.SensorPlug + myUtil.WriteLog("Sensor: " & e.idSensor & ". Event: Plugged.") + AxGrFingerXCtrl1.CapStartCapture(e.idSensor) + End Sub + + ' A fingerprint reader was unplugged from system + Private Sub AxGrFingerXCtrl1_SensorUnplug( _ + ByVal sender As System.Object, _ + ByVal e As AxGrFingerXLib._IGrFingerXCtrlEvents_SensorUnplugEvent) _ + Handles AxGrFingerXCtrl1.SensorUnplug + myUtil.WriteLog("Sensor: " & e.idSensor & ". Event: Unplugged.") + AxGrFingerXCtrl1.CapStopCapture(e.idSensor) + End Sub + + ' A finger was placed on reader + Private Sub AxGrFingerXCtrl1_FingerDown( _ + ByVal sender As System.Object, _ + ByVal e As AxGrFingerXLib._IGrFingerXCtrlEvents_FingerDownEvent) _ + Handles AxGrFingerXCtrl1.FingerDown + myUtil.WriteLog("Sensor: " & e.idSensor & ". Event: Finger Placed.") + End Sub + + ' A finger was removed from reader + Private Sub AxGrFingerXCtrl1_FingerUp( _ + ByVal sender As System.Object, _ + ByVal e As AxGrFingerXLib._IGrFingerXCtrlEvents_FingerUpEvent) _ + Handles AxGrFingerXCtrl1.FingerUp + myUtil.WriteLog("Sensor: " & e.idSensor & ". Event: Finger removed.") + End Sub + + ' An image was acquired from reader + Private Sub AxGrFingerXCtrl1_ImageAcquired( _ + ByVal sender As System.Object, _ + ByVal e As AxGrFingerXLib._IGrFingerXCtrlEvents_ImageAcquiredEvent) _ + Handles AxGrFingerXCtrl1.ImageAcquired + + ' Copying aquired image + myUtil.raw.height = e.height + myUtil.raw.width = e.width + myUtil.raw.res = e.res + myUtil.raw.img = e.rawImage + + ' Signaling that an Image Event occurred. + myUtil.WriteLog("Sensor: " & e.idSensor & ". Event: Image captured.") + + ' display fingerprint image + myUtil.PrintBiometricDisplay(False, GRConstants.GR_DEFAULT_CONTEXT) + + '---extract the template from the fingerprint scanned--- + ExtractTemplate() + + '---identify who the user is--- + _UserID = IdentifyFingerprint() + If _UserID > 0 Then + '---user found--- + Beep() + btnRegister.Enabled = False + '---display user's information--- + GetUserInfo() + '---writes to log file--- + WriteToLog(_UserID) + Else + '---user not found--- + ClearDisplay() + btnRegister.Enabled = True + Beep() + lblMessage.Text = "User not found! Please register your information below" + End If + End Sub + + ' Extract a template from a fingerprint image + Private Function ExtractTemplate() As Integer + Dim ret As Integer + ' extract template + ret = myUtil.ExtractTemplate() + ' write template quality to log + If ret = GRConstants.GR_BAD_QUALITY Then + myUtil.WriteLog("Template extracted successfully. Bad quality.") + ElseIf ret = GRConstants.GR_MEDIUM_QUALITY Then + myUtil.WriteLog("Template extracted successfully. Medium quality.") + ElseIf ret = GRConstants.GR_HIGH_QUALITY Then + myUtil.WriteLog("Template extracted successfully. High quality.") + End If + If ret >= 0 Then + ' if no error, display minutiae/segments/directions into the image + myUtil.PrintBiometricDisplay(True, GRConstants.GR_NO_CONTEXT) + Else + ' write error to log + myUtil.WriteError(ret) + End If + Return ret + End Function + + + '---Identify a fingerprint; returns the ID of the user--- + Private Function IdentifyFingerprint() As Integer + Dim ret As Integer, score As Integer + score = 0 + ' identify it + ret = myUtil.Identify(score) + ' write result to log + If ret > 0 Then + myUtil.WriteLog("Fingerprint identified. ID = " & ret & ". Score = " & score & ".") + myUtil.PrintBiometricDisplay(True, GRConstants.GR_DEFAULT_CONTEXT) + ElseIf ret = 0 Then + myUtil.WriteLog("Fingerprint not Found.") + Else + myUtil.WriteError(ret) + End If + Return ret + End Function + + '---get user's information--- + Public Sub GetUserInfo() + Dim filePath As String + Try + filePath = Application.StartupPath() & "\" & DBFile + connection = New OleDb.OleDbConnection(ConnectionString & filePath) + connection.Open() + Dim reader As OleDb.OleDbDataReader + Dim command As OleDb.OleDbCommand = New OleDb.OleDbCommand + command.Connection = connection + '---retrieve user's particulars--- + command.CommandText = "SELECT * FROM Enroll WHERE ID=" & _UserID + reader = command.ExecuteReader(CommandBehavior.CloseConnection) + reader.Read() + + '---display user's particulars--- + lblMessage.Text = "Welcome, " & reader("name") + txtSSN.Text = reader("SSN") + txtName.Text = reader("Name") + txtCompany.Text = reader("Company") + txtContactNumber.Text = reader("ContactNumber") + txtEmail.Text = reader("Email") + + '---reset the timer to another 5 seconds--- + Timer1.Enabled = False + Timer1.Enabled = True + Catch ex As Exception + MsgBox(ex.ToString) + Finally + connection.Close() + End Try + End Sub + + + '---Register button--- + Private Sub btnRegister_Click( _ + ByVal sender As System.Object, _ + ByVal e As System.EventArgs) _ + Handles btnRegister.Click + '---first add the fingerprint--- + _UserID = EnrollFingerprint() + '---then add the particulars--- + AddNewUser() + '---clears the display--- + ClearDisplay() + '---writes to log file--- + WriteToLog(_UserID) + End Sub + + '---adds a fingerprint to the database; returns the ID of the user--- + Private Function EnrollFingerprint() As Integer + Dim id As Integer + ' add fingerprint + id = myUtil.Enroll() + ' write result to log + If id >= 0 Then + myUtil.WriteLog("Fingerprint enrolled with id = " & id) + Else + myUtil.WriteLog("Error: Fingerprint not enrolled") + End If + Return id + End Function + + '---Add a new user's information to the database--- + Public Sub AddNewUser() + Dim filePath As String + Try + filePath = Application.StartupPath() & "\" & DBFile + connection = New OleDb.OleDbConnection(ConnectionString & filePath) + connection.Open() + Dim command As OleDb.OleDbCommand = New OleDb.OleDbCommand + command.Connection = connection + + '---set the user's particulars in the table--- + Dim sql As String = "UPDATE enroll SET SSN='" & txtSSN.Text & "', " & _ + "Name='" & txtName.Text & "', " & _ + "Company='" & txtCompany.Text & "', " & _ + "ContactNumber='" & txtContactNumber.Text & "', " & _ + "Email='" & txtEmail.Text & "' " & _ + " WHERE ID=" & _UserID + command.CommandText = sql + command.ExecuteNonQuery() + MsgBox("User added successfully!") + connection.Close() + Catch ex As Exception + MsgBox(ex.ToString) + End Try + End Sub + + '---Clears the user's particulars--- + Public Sub ClearDisplay() + lblMessage.Text = _ + "Please place your index finger on the fingerprint reader" + PictureBox1.Image = My.Resources.fingerprintreader + + txtSSN.Text = String.Empty + txtName.Text = String.Empty + txtCompany.Text = String.Empty + txtContactNumber.Text = String.Empty + txtEmail.Text = String.Empty + End Sub + + '---the Timer control--- + Private Sub Timer1_Tick( _ + ByVal sender As System.Object, _ + ByVal e As System.EventArgs) _ + Handles Timer1.Tick + ClearDisplay() + Timer1.Enabled = False + End Sub + + Public Sub WriteToLog(ByVal ID As String) + '---write to a log file--- + Dim sw As New System.IO.StreamWriter( _ + Logfile, True, System.Text.Encoding.ASCII) + sw.WriteLine(id & "," & Now.ToString) + sw.Close() + End Sub + +End Class diff --git a/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/GrFingerSample.mdb b/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/GrFingerSample.mdb new file mode 100644 index 0000000000000000000000000000000000000000..ccc67acf540595f20f99e3b0980d49ab7138cfe0 GIT binary patch literal 147456 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 Zfam_|&xYkXIkcWgh=+4TjTp|${{ul@e#QU* literal 0 HcmV?d00001 diff --git a/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/My Project/Application.Designer.vb b/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/My Project/Application.Designer.vb new file mode 100644 index 0000000..ced615e --- /dev/null +++ b/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/My Project/Application.Designer.vb @@ -0,0 +1,38 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.42 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + 'NOTE: This file is auto-generated; do not modify it directly. To make changes, + ' or if you encounter build errors in this file, go to the Project Designer + ' (go to Project Properties or double-click the My Project node in + ' Solution Explorer), and make changes on the Application tab. + ' + Partial Friend Class MyApplication + + _ + Public Sub New() + MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) + Me.IsSingleInstance = false + Me.EnableVisualStyles = true + Me.SaveMySettingsOnExit = true + Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses + End Sub + + _ + Protected Overrides Sub OnCreateMainForm() + Me.MainForm = Global.FingerPrintReader.Form1 + End Sub + End Class +End Namespace diff --git a/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/My Project/Application.myapp b/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/My Project/Application.myapp new file mode 100644 index 0000000..1243847 --- /dev/null +++ b/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/My Project/Application.myapp @@ -0,0 +1,11 @@ + + + true + Form1 + false + 0 + true + 0 + 0 + true + diff --git a/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/My Project/AssemblyInfo.vb b/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..3ab8344 --- /dev/null +++ b/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/My Project/Resources.Designer.vb b/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/My Project/Resources.Designer.vb new file mode 100644 index 0000000..6e365f3 --- /dev/null +++ b/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/My Project/Resources.Designer.vb @@ -0,0 +1,70 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.42 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("FingerPrintReader.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + + Friend ReadOnly Property fingerprintreader() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("fingerprintreader", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + End Module +End Namespace diff --git a/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/My Project/Resources.resx b/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/My Project/Resources.resx new file mode 100644 index 0000000..304d85d --- /dev/null +++ b/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/My Project/Resources.resx @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\fingerprintreader.jpg;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/My Project/Settings.Designer.vb b/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/My Project/Settings.Designer.vb new file mode 100644 index 0000000..f907336 --- /dev/null +++ b/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.42 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.FingerPrintReader.My.MySettings + Get + Return Global.FingerPrintReader.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/My Project/Settings.settings b/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/Resources/fingerprintreader.jpg b/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/Resources/fingerprintreader.jpg new file mode 100644 index 0000000000000000000000000000000000000000..67a13f81cf38155cf55ab330162ab420b4c3401d GIT binary patch literal 6174 zcmaJ_bx>T(o4vTZI|KdL<1&D+D61d~ARq#O#nS^k?g0d^KbYG=0R#XU z007pf&;fw^%EHOa60qoaiXc4B13>^bIyyQAIyMFdHUSnU76Az!HZ~p!IS~;F5fM2V zA@LIk$;havX{o8mn3$eFXJQiM=jRs`{Rap*SXel?IQY1@_{6w)xWvTx1O)iRG{nRt z#Kbhrlw?n!WTt1NrKM%0XJut(W@Y8$ARs(V^B*80A)}xopdtK?f5J~45s{Hl@Bsv*zj~mfp(3OGH4XtlL?S?D;6-_* zPKas>dFDdoAD>s-$!CT(E~UZ9Pb?6SkY6Xww4zx+(q-=Ynpu#Pg#bW&;zCA5#X$KV zdIUrQBnIABgz6AJWYcF)1R6w)wVh@z0SWxXDC7BcngWk=05;Oow+N63014n+ivb-0 zT?&xG_rnjONB-{yQg^#0nXvv;sr+rfYPJwp&cF=OAP80oDmv#iZ@0p`n=TV)#k;ZB ze*_X`TTAE{J)WQR=HGO-O5vCO&G5hI{!ioBH@&jBxyzA5aOM~mvi{}i=pvw=y*%1jG2XEQ zZO(VBytw6C+(oeuZf`chc7Ak3hKA(uIQ=N_Ll(CYCGn#ZWIt83A|Y`ZXVCEowPtY+ zdo%VjbRxlNPu7Fr;pj$3w}UEv*^On{Qrv9kGWBL;uYsq1BcTs4U!#^x383Z}s}|Q1 zyip1M-~|F7bScexy|@C~@EgeFU0fF9XyjIaPF@NcE&Kw*sn` z?SdBz>N5CmrFT?>~bmiEm$0 zHTkex<(>?gq0KO~yG^Azyugo&kx(ql zh2-SQAZE(0#NyBrCQy>u5ZNrq9Hokp@CY~>txzS}df>N`d`FY|+_5;+PNmX4CrlFK zcc7f62zSE~u}b@>rJP@oA@e8S6P|QIb7isTevn@^r=zc?@0sauTl$j0mLV}lNMgTU z^apz|6N9rw%YUfGznoHzeCg2a{j?(TX7z#0l6Vp2!Z<;S`-Rk2y(5YG#dAkq&s}8z zhVTJh%P*00Txyiix`73+;)GIc!}?s@1`;=Ci*sBg=(Ne!y~GKl`qaELR4MDk_0F)# z=#MVQ4t4-O9#H;m8QH6wY-rL5&p{daoO1iT*04>`Y@x-&T*PPA%19#pj0N0y>fjyn ziOTqR%TC@XG~G?akQ_AIM;+upeq#)1k&${)1NDNVS6Qd;R`RP;=9S|JDBP^z0dAxhx(zDAKqWGH`fs;~ijh!6#b(Oq}e{L}c1#C95 ze^k#N&|kz#-#>qj1?>np-1U1uz;=N#f0U!R04m;|{^jhezU2x}GCMFx`08NIx<%JU zgVi(Dk<^CknkVf1TV4fa$lq^QQpXUR~~R~K(8O*Ds8c6`vg^ z+bi`PEb-)+8IfMSjgLZsVS!S1vN4UI)0j5#ypIC6y6!pp@#p&dE+Xd1Oj8&~3l4jE z0tuVR-V3hwk}K1z`3mfu&tf?mt=%16y-T>Q1NbgA>@>9xQ~hX?N={R9q^c=nO6+e^ zkE73#eK9Yb9?()cR@_v*AAw=lrq6eh72gEz+8gT|d^X|;yE^q`kSt7YCF}e<96E^$ z5@l_lg}&aDeX~N{mU6U_RChQpyAB|F;%d)$i#+gXOP_TI+-98$032r1lWm@Sxt7vsxRJl)TziUlMS# z=C?PXd@)n#a;Mr@6EN$}da{MOlHS=aS(}yj9t1)@E3~+ZHl3Xw6Mzmb?IfLw45}Dg z(&?=^it7qVxP4zG#CRjF*nMS1%cLPtyXHX6s+Aer{ZdiPk2Iq~Nm$yBxD5K~YhI+u zb{5wDZyop+kL*KoR{inWeA9ulqE6OZ2DE_86h37!QW<9jD{5z->9&0Pi6K%eM)9jhD5T^Y9(s6w z-|jcGSjO6uGF-_?Wi#X;rf9m#@V1~36c|*|G@vs62q@h;syXs$*1O&}?l)T$ z)kB#JWfJs@{=JT?rzH@@AAy>(tErGLH|`#NrDa!xoc%pRwY)9|SW4mI-F$TXm|n^e zFSoWqy;n>RQsvJ^@I^?98X6PKXDu8^O1gD(PAj))Yq^v?&7GZ~TR~ixEMQ@kZ$;vH z-(f?8*FWTF95$Qr-f!04IN!ZfSiDQU_ki~Jz87wd>WzHSNIzXq$B|O4Dh6U);~+X& z^=SE_)7%}BcJ=C)PV$$C3Q+M+wbqT`-cc}js+9fJz&fT_NHEyg@coLkWO|b`VhOXs zNLVGhfH+eDv^viWI`~|gsqPCNA&C7>9sf`b>ph*WNZZ8cEWCZ;J5sI} zhQ=(1vNfNG*{{X7x~45mI%5QBv>7K!8`G|Gr|l0iL-E6x&uY)a{aPP^ltSJ=oFu)` z#^J-uA{lNu`a!y!Srcv5ZjGHisaKb$4LhP9CXWDzuX-&KrQ1^mqIVT(j}=-jsU}-g z2+P)(MP={V4!_RkF05-UQl0g+`$RHxtqy=QBbiqJBNhG?59yzeciG_)Lwffd-fNTE z=0qC2eOZZ`{4q;bK26zkAL>hJYHaS*+gBbLbTgf=#*tC9N&X9z>`n_# zW8`M^MRS_1pkb!9QP$yGhhF$U0dD2(W%^xa!fX48cDS$>rJTg8phbNyy+WufZAIi$Ilwq(X@ zYLkW!s>Fb=X1jz$y@I(byi%uX5`M=ydRGl`n9iepUB|Cd0`}G|>{`nyG7%9UxiB2~ zK*BnZ%k%-hf1`8lcbI?N7WJn$gv(8BZ5x-RNWk#$*@syx&DRH29K&Z)%pTU%7wr45 zvY9K6fY||6Ozg|_UOi`@DtHz`Be%;oP+)i?_&9{+5Te`j-ijoc4X~y?JY8l!pe)_5Pf&}Q zj`DevhUCy2&cUEi<91wcrsP}pJ4}-RZlmb1h4LH)+|;J3BwS*(+Kd))E?D+)INP5Q z1m~uXp_r!%geCfO?W2^Le8$`^h|c5i6!hiN(j-j1&cg!zf|fFcDFA0T>hA6;tYDKX4)23Zzu65q$>Sr^NcSKiiXFvdS<+2>NkD3Nq#oIR`4`3v&e1jhFX!)uO6kb*u{b0 z7p%f^gvHy|2kVEoh~I}N1n@1g-*hHG|0BoJQ^9W6Er57jX)c)K{*6x8rxm?f!@5(M zu|zHH=V8yv<%iH%8*w}3A!=J9Wm3uw1U#BzKc{m01b&Lr<8*~v-e=8VXLEfHS7&1A zBc2bhn(Av~_(42GviYk%q_}t@UtX0&D(;#pT1&U3I8Sj^pX@lX>xGPFG+UU_+XB(K zpW7y zzn=Z(>D9{p$1D@T5ez8$?i#&P^hH?Vja+L1vRmCVc;L6WHx4~kQiT_T7#Kg84Vf9_ z?>h2p8EL$0)GY+PWiOExTv!Xjo3^5yoOO)2RD^A&#u;S#CG|!^fAe#ZpP0W z!tQX+pI=Q`whb9zQ8nj@TsKsgla@Bqv6bi!*Q~x-9Fp%?D!}S&50A{u<`YJC0^-8o zMZljHscdxUlAj=xJO0+d7WWdDdr9!EP&7)@UP+>J1TXkMBnRG0;nryoYOLe&juErp zm5`cakM>p-7P_-1$)Id*W3*GFFj=oALY~s4zCq5z9eAc(5P8TzM^-DBpw%X%xXTlh zxXVHGNw>dt*Kj;PFIOSyXOT$4T90q13x7q(wT#Ux1i@ZhsG~*}qV2jS`!!kmc8)); z8LP7G7%>~JsZ!Gi=OSXZQEW%|6>U;W$B6vQmp~8a0(4D7`iwa2O)42~}N;~NHc3&NAV{m?tpX52z$w~Xe6D!@bJv+hl9oPX9k9ZDt{ z1+i^kK1a!%vR`Y0Ca{DVLOgKg`df>i;hIn)Az+g8dzphS8|`bS%6@Y$3x6H?&=<%)>B2E`^Sh5(wFb<8Qe zQexxhH9rHQ+324yy)PJ1AyoV>6vnstzWi`e$<~Xqf@$P+HkwM`>v4^{fVkaQf%iUy z>w^dkii9NZm)^CwtKVoIpG>WYugU2d-Ku75y`B*zN@$#@hjBBZbTpu5|7<)%v9lb! z3RUrJM_m^Cqhwv&Amm30P#`40Fwtx3uOR^dQmZv;To(A=vsdl z8~_HaAU_N+Lb#+b#JQi5+uc{oi9Kd@<)pQ_x3HudggrrKPcGob>e%CI_}NI{Wgev& zq??4&KH{SvF?7_@Q~n}c+nb2VF3^unpX4sYxBrdO)hjn{k)zl$uLRI%f8}ju+$qn8 zVaKyL;-CyqJO5@G@LDnJq`y|^3{ykaCCj=y$JmLqiU4xym#i1=Y`CJ6B8$;vnL=T8 zQzAu;F*ht*`Zp0)nlc~Wl-ZEL0o=zSf zy-QrEH7*~2{%bN{A>(PW7GO5RZ>(0iUT;@+P+li37lh{!aGS0O(8o6wGB+q3ajvy+ zL4+$O0b(ZT3|*OQ=bX2k9@gk1@M1rt1Zqfz_i1YUHud0E6>t8&+O#n>jf>)5%^S`x z+MMuvH}vZ;=^L$m)z=e{*_zw*D@LWp*zls*G*j2FuZF2kX@l)-OZn8O`_KgTv8Y}t zcS@K;nJeJrHMb-Bq0WCc`x9$mZ?`&r^RDcdDr%>YnJ$~FL1+~FDI==tf0&m_;Zp?q zu`>^6ak7*t{gIZ@^Idf|5i1YSqlq8>Tzugm-O#Vpn(j>;7%uN8%MisgI-4L|Y%Jwj%%o>2hm`6{yp)MVt@z=yXP%7g4+2TT+TQZ7FEoV8`vZ(sMx|m_ z6^4Uu>$+NvFcS6c+4=H9Bg_M$8ORSctcn*V<@{SYzt}`Ge~b{g>OIIW`oZ}M1lEuk?QiPlgl|M?2KH96E=fJY3|_QsMA3}cHCV(b Ll_G-$KK}YIvw&6x literal 0 HcmV?d00001 diff --git a/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/Util.vb b/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/Util.vb new file mode 100644 index 0000000..bb25e06 --- /dev/null +++ b/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/Util.vb @@ -0,0 +1,321 @@ +'------------------------------------------------------------------------------- +'GrFinger Sample +'(c) 2005 Griaule Tecnologia Ltda. +'http://www.griaule.com +'------------------------------------------------------------------------------- +' +'This sample is provided with "GrFinger Fingerprint Recognition Library" and +'can't run without it. It's provided just as an example of using GrFinger +'Fingerprint Recognition Library and should not be used as basis for any +'commercial product. +' +'Griaule Tecnologia makes no representations concerning either the merchantability +'of this software or the suitability of this sample for any particular purpose. +' +'THIS SAMPLE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR +'IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +'OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +'IN NO EVENT SHALL GRIAULE BE LIABLE FOR ANY DIRECT, INDIRECT, +'INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +'NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +'DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +'THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +'(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +'THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +' +'You can download the free version of GrFinger directly from Griaule website. +' +'These notices must be retained in any copies of any part of this +'documentation and/or sample. +' +'------------------------------------------------------------------------------- + +' ----------------------------------------------------------------------------------- +' Support and fingerprint management routines +' ----------------------------------------------------------------------------------- + +Imports GrFingerXLib +Imports Microsoft.VisualBasic + +' Raw image data type. +Public Structure RawImage + ' Image data. + Public img As Object + ' Image width. + Public width As Long + ' Image height. + Public height As Long + ' Image resolution. + Public res As Long +End Structure + +Public Class Util + + ' Some constants to make our code cleaner + Public Const ERR_CANT_OPEN_BD As Integer = -999 + Public Const ERR_INVALID_ID As Integer = -998 + Public Const ERR_INVALID_TEMPLATE As Integer = -997 + + ' Importing necessary HDC functions + Private Declare Function GetDC Lib "user32" (ByVal hwnd As Int32) As Int32 + Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Int32, ByVal hdc As Int32) As Int32 + + ' The last acquired image. + Public raw As RawImage + ' The template extracted from last acquired image. + Public template As New TTemplate + ' Database class. + Public DB As DBClass + ' Reference to main form log. + Private _lbLog As ListBox + ' Reference to main form Image. + Private _pbPic As PictureBox + ' GrFingerX component + Private _GrFingerX As AxGrFingerXLib.AxGrFingerXCtrl + + ' ----------------------------------------------------------------------------------- + ' Support functions + ' ----------------------------------------------------------------------------------- + + ' This class creates an Util class with some functions + ' to help us to develop our GrFinger Application + Public Sub New(ByRef lbLog As ListBox, ByRef pbPic As PictureBox, ByRef GrFingerX As AxGrFingerXLib.AxGrFingerXCtrl) + _lbLog = lbLog + _pbPic = pbPic + _GrFingerX = GrFingerX + End Sub + + ' Write a message in box. + Public Sub WriteLog(ByVal message As String) + _lbLog.Items.Add(message) + _lbLog.SelectedIndex = _lbLog.Items.Count - 1 + _lbLog.ClearSelected() + End Sub + + ' Write and describe an error. + Public Sub WriteError(ByVal errorCode As Integer) + Select Case errorCode + Case GRConstants.GR_ERROR_INITIALIZE_FAIL + WriteLog("Fail to Initialize GrFingerX. (Error:" & errorCode & ")") + Case GRConstants.GR_ERROR_NOT_INITIALIZED + WriteLog("The GrFingerX Library is not initialized. (Error:" & errorCode & ")") + Case GRConstants.GR_ERROR_FAIL_LICENSE_READ + WriteLog("License not found. See manual for troubleshooting. (Error:" & errorCode & ")") + MessageBox.Show("License not found. See manual for troubleshooting.") + Case GRConstants.GR_ERROR_NO_VALID_LICENSE + WriteLog("The license is not valid. See manual for troubleshooting. (Error:" & errorCode & ")") + MessageBox.Show("The license is not valid. See manual for troubleshooting.") + Case GRConstants.GR_ERROR_NULL_ARGUMENT + WriteLog("The parameter have a null value. (Error:" & errorCode & ")") + Case GRConstants.GR_ERROR_FAIL + WriteLog("Fail to create a GDI object. (Error:" & errorCode & ")") + Case GRConstants.GR_ERROR_ALLOC + WriteLog("Fail to create a context. Cannot allocate memory. (Error:" & errorCode & ")") + Case GRConstants.GR_ERROR_PARAMETERS + WriteLog("One or more parameters are out of bound. (Error:" & errorCode & ")") + Case GRConstants.GR_ERROR_WRONG_USE + WriteLog("This function cannot be called at this time. (Error:" & errorCode & ")") + Case GRConstants.GR_ERROR_EXTRACT + WriteLog("Template Extraction failed. (Error:" & errorCode & ")") + Case GRConstants.GR_ERROR_SIZE_OFF_RANGE + WriteLog("Image is too larger or too short. (Error:" & errorCode & ")") + Case GRConstants.GR_ERROR_RES_OFF_RANGE + WriteLog("Image have too low or too high resolution. (Error:" & errorCode & ")") + Case GRConstants.GR_ERROR_CONTEXT_NOT_CREATED + WriteLog("The Context could not be created. (Error:" & errorCode & ")") + Case GRConstants.GR_ERROR_INVALID_CONTEXT + WriteLog("The Context does not exist. (Error:" & errorCode & ")") + + ' Capture error codes + + Case GRConstants.GR_ERROR_CONNECT_SENSOR + WriteLog("Error while connection to sensor. (Error:" & errorCode & ")") + Case GRConstants.GR_ERROR_CAPTURING + WriteLog("Error while capturing from sensor. (Error:" & errorCode & ")") + Case GRConstants.GR_ERROR_CANCEL_CAPTURING + WriteLog("Error while stop capturing from sensor. (Error:" & errorCode & ")") + Case GRConstants.GR_ERROR_INVALID_ID_SENSOR + WriteLog("The idSensor is invalid. (Error:" & errorCode & ")") + Case GRConstants.GR_ERROR_SENSOR_NOT_CAPTURING + WriteLog("The sensor is not capturing. (Error:" & errorCode & ")") + Case GRConstants.GR_ERROR_INVALID_EXT + WriteLog("The File have a unknown extension. (Error:" & errorCode & ")") + Case GRConstants.GR_ERROR_INVALID_FILENAME + WriteLog("The filename is invalid. (Error:" & errorCode & ")") + Case GRConstants.GR_ERROR_INVALID_FILETYPE + WriteLog("The file type is invalid. (Error:" & errorCode & ")") + Case GRConstants.GR_ERROR_SENSOR + WriteLog("The sensor raise an error. (Error:" & errorCode & ")") + + ' Our error codes + + Case ERR_INVALID_TEMPLATE + WriteLog("Invalid Template. (Error:" & errorCode & ")") + Case ERR_INVALID_ID + WriteLog("Invalid ID. (Error:" & errorCode & ")") + Case ERR_CANT_OPEN_BD + WriteLog("Unable to connect to DataBase. (Error:" & errorCode & ")") + Case Else + WriteLog("Error:" & errorCode) + End Select + End Sub + + ' Check if we have a valid template + Private Function TemplateIsValid() As Boolean + ' Check template size + Return template.Size > 0 + End Function + + ' ----------------------------------------------------------------------------------- + ' Main functions for fingerprint recognition management + ' ----------------------------------------------------------------------------------- + + ' Initializes GrFinger ActiveX and all necessary utilities. + Public Function InitializeGrFinger() As Integer + Dim err As Integer + + DB = New DBClass + ' Open DataBase + If DB.OpenDB() = False Then Return ERR_CANT_OPEN_BD + ' Create a new Template + template.Size = 0 + ' Create a new raw image + raw.img = Nothing + raw.width = 0 + raw.height = 0 + ' Initializing library + err = _GrFingerX.Initialize() + If err < 0 Then Return err + Return _GrFingerX.CapInitialize() + End Function + + ' Finalizes and close the DB. + Public Sub FinalizeGrFinger() + ' finalize library + _GrFingerX.Finalize() + _GrFingerX.CapFinalize() + + ' close DB + DB.closeDB() + DB = Nothing + End Sub + + ' Display fingerprint image on screen + Public Sub PrintBiometricDisplay(ByVal biometricDisplay As Boolean, ByVal context As Integer) + + ' handle to finger image + Dim handle As System.Drawing.Image = Nothing + + ' screen HDC + Dim hdc As Integer = GetDC(0) + + If biometricDisplay Then + ' get image with biometric info + _GrFingerX.BiometricDisplay(template.tpt, raw.img, raw.width, raw.height, raw.res, hdc, handle, context) + Else + ' get raw image + _GrFingerX.CapRawImageToHandle(raw.img, raw.width, raw.height, hdc, handle) + End If + + ' draw image on picture box + If Not (handle Is Nothing) Then + _pbPic.Image = handle + _pbPic.Update() + End If + ' release screen HDC + ReleaseDC(0, hdc) + End Sub + + ' Add a fingerprint template to database + Public Function Enroll() As Integer + ' Checking if template is valid. + If TemplateIsValid() Then + ' Adds template to database and gets ID. + Return DB.AddTemplate(template) + Else + Return -1 + End If + End Function + + ' Extract a fingerprint template from current image + Function ExtractTemplate() As Integer + Dim ret As Integer + + ' set current buffer size for extract template + template.Size = template.tpt.Length + + ret = _GrFingerX.Extract(raw.img, raw.width, raw.height, raw.res, template.tpt, template.Size, GRConstants.GR_DEFAULT_CONTEXT) + ' if error, set template size to 0 + ' Result < 0 => extraction problem + If ret < 0 Then template.Size = 0 + Return ret + End Function + + ' Identify current fingerprint on our database + Public Function Identify(ByRef score As Integer) As Integer + Dim ret As Integer + Dim i As Integer + + ' Checking if template is valid. + If Not TemplateIsValid() Then Return ERR_INVALID_TEMPLATE + + ' Starting identification process and supplying query template. + + Dim tmpTpt As Array = Array.CreateInstance(GetType(Byte), template.Size) + Array.Copy(template.tpt, tmpTpt, template.Size) + ret = _GrFingerX.IdentifyPrepare(tmpTpt, GRConstants.GR_DEFAULT_CONTEXT) + ' error? + If ret < 0 Then Return ret + ' Getting enrolled templates from database. + Dim templates As TTemplates() = DB.getTemplates() + ' Iterate over all templates in database + For i = 1 To templates.Length + ' Comparing the current template. + If Not (templates(i - 1).template Is Nothing) Then + Dim tempTpt As Array = Array.CreateInstance(GetType(Byte), templates(i - 1).template.Size) + Array.Copy(templates(i - 1).template.tpt, tempTpt, templates(i - 1).template.Size) + ret = _GrFingerX.Identify(tempTpt, score, GRConstants.GR_DEFAULT_CONTEXT) + End If + ' Checking if query template and reference template match. + If ret = GRConstants.GR_MATCH Then + Return templates(i - 1).ID + End If + If ret < 0 Then Return ret + Next + ' end of database, return "no match" code + Return GRConstants.GR_NOT_MATCH + End Function + + ' Check current fingerprint against another one in our database + Public Function Verify(ByVal id As Integer, ByRef score As Integer) As Integer + Dim tptref As System.Array + + ' Checking if template is valid. + If Not (TemplateIsValid()) Then Return ERR_INVALID_TEMPLATE + ' Getting template with the supplied ID from database. + tptref = DB.getTemplate(id) + ' Checking if ID was found. + If tptref Is Nothing Then Return ERR_INVALID_ID + ' Comparing templates. + Dim tempTpt As Array = Array.CreateInstance(GetType(Byte), template.Size) + Array.Copy(template.tpt, tempTpt, template.Size) + Return _GrFingerX.Verify(tempTpt, tptref, score, GRConstants.GR_DEFAULT_CONTEXT) + End Function + + ' Show GrFinger version and type + Public Sub MessageVersion() + Dim majorVersion As Integer = 0 + Dim minorVersion As Integer = 0 + Dim result As GRConstants + Dim vStr As String = "" + + result = _GrFingerX.GetGrFingerVersion(majorVersion, minorVersion) + If result = GRConstants.GRFINGER_FULL Then vStr = "FULL" + If result = GRConstants.GRFINGER_LIGHT Then vStr = "LIGHT" + If result = GRConstants.GRFINGER_FREE Then vStr = "FREE" + MessageBox.Show("The GrFinger DLL version is " & majorVersion & _ + "." & minorVersion & "." & vbCrLf & _ + "The license type is '" & vStr & "'.", "GrFinger Version") + End Sub + +End Class diff --git a/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/bin/Debug/AxInterop.GrFingerXLib.dll b/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/bin/Debug/AxInterop.GrFingerXLib.dll new file mode 100644 index 0000000000000000000000000000000000000000..1c9e361b9c0c791738359385aaa3fe7c63d70e7b GIT binary patch literal 11776 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 TBcLY!&!}P9UAq3eeA)j4ZC9R* literal 0 HcmV?d00001 diff --git a/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/bin/Debug/FingerPrintReader.xml b/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/bin/Debug/FingerPrintReader.xml new file mode 100644 index 0000000..7f5d8d4 --- /dev/null +++ b/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/bin/Debug/FingerPrintReader.xml @@ -0,0 +1,24 @@ + + + + +FingerPrintReader + + + + +

+ Returns the cached ResourceManager instance used by this class. + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + \ No newline at end of file diff --git a/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/bin/Debug/GrFingerSample.mdb b/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/bin/Debug/GrFingerSample.mdb new file mode 100644 index 0000000000000000000000000000000000000000..390b52645b6165100f0616ff0f81e5387b6b1699 GIT binary patch literal 147456 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 literal 0 HcmV?d00001 diff --git a/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/bin/Debug/Interop.GrFingerXLib.dll b/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/bin/Debug/Interop.GrFingerXLib.dll new file mode 100644 index 0000000000000000000000000000000000000000..9b7a79cc710ffc54b0032ddc06461ded887c30b8 GIT binary patch literal 15360 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 J<8_yT{{XzP>%{;7 literal 0 HcmV?d00001 diff --git a/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/obj/Debug/AxInterop.GrFingerXLib.dll b/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/obj/Debug/AxInterop.GrFingerXLib.dll new file mode 100644 index 0000000000000000000000000000000000000000..1c9e361b9c0c791738359385aaa3fe7c63d70e7b GIT binary patch literal 11776 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 GN%0>~@msh6 literal 0 HcmV?d00001 diff --git a/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/obj/Debug/FingerPrintReader.exe b/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/obj/Debug/FingerPrintReader.exe new file mode 100644 index 0000000000000000000000000000000000000000..0f3bddc66e5c127c29775837eb9c5a40ead69702 GIT binary patch literal 61440 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 bT~R}bzk-~m+Ma=*d2KTflI#@cv$N(e3Izin literal 0 HcmV?d00001 diff --git a/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/obj/Debug/FingerPrintReader.vbproj.ResolveComReference.cache b/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/obj/Debug/FingerPrintReader.vbproj.ResolveComReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..9b8397abaa86111e1bb2574a0e45e8c561aaf1ac GIT binary patch literal 567 zcmaJ-%}N6?5MJH>Y+HqbSH(SevxNRwDnb!lsTQr)wzNI$CA&M@hGsV<$rkDp^f5g9 z6oMc=j2E9k6HzY~6ZmGB%zWQ`F*Xdt_)tejeYQ3gj61~VOt4U*vxLw94X~Jrl05`2 z2#cFlRMxj-I|-Euhh_|kSbKRX)S}+vZEdd zMi=0)s0Sf%h<$LdKLtIq9rCLm&ODv`mdla;d zoT(tC;osJ*YRF$R9JH`68P9&ZwA3bZ%z+m*slx*3a<(7=a7!2Zen$d>$)$pi&bACJOyW;B~YgJdsfKjL-Nxh=h(^A&9 UvG@M?j9*tOdq|!RJ1?ukC;5e}YXATM literal 0 HcmV?d00001 diff --git a/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/obj/Debug/FingerPrintReader.xml b/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/obj/Debug/FingerPrintReader.xml new file mode 100644 index 0000000..7f5d8d4 --- /dev/null +++ b/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/obj/Debug/FingerPrintReader.xml @@ -0,0 +1,24 @@ + + + + +FingerPrintReader + + + + +

+ Returns the cached ResourceManager instance used by this class. + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + \ No newline at end of file diff --git a/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/obj/Debug/Interop.GrFingerXLib.dll b/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/obj/Debug/Interop.GrFingerXLib.dll new file mode 100644 index 0000000000000000000000000000000000000000..9b7a79cc710ffc54b0032ddc06461ded887c30b8 GIT binary patch literal 15360 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 J<8_yT{{XzP>%{;7 literal 0 HcmV?d00001 diff --git a/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/obj/Debug/TempPE/My Project.Resources.Designer.vb.dll b/Chapter03(Fingerprint)/FingerPrintReader/FingerPrintReader/obj/Debug/TempPE/My Project.Resources.Designer.vb.dll new file mode 100644 index 0000000000000000000000000000000000000000..241231b011993fb7425ffda51baf3af35de62526 GIT binary patch literal 7680 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 Ts(tqCQ~sL$y + + Debug + AnyCPU + 8.0.50727 + 2.0 + {F2811056-919E-4CF0-BB01-3E7DAF6DFEAF} + WinExe + Properties + FingerPrintReader_CS + FingerPrintReader_CS + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + Form + + + Form1.cs + + + + + Designer + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + {A9995C7C-77BF-4E27-B581-A4B5BBD90E50} + 1 + 0 + 0 + aximp + False + + + {A9995C7C-77BF-4E27-B581-A4B5BBD90E50} + 1 + 0 + 0 + tlbimp + False + + + + + Always + + + + + + \ No newline at end of file diff --git a/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/FingerPrintReader_CS.csproj.user b/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/FingerPrintReader_CS.csproj.user new file mode 100644 index 0000000..a1d742b --- /dev/null +++ b/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/FingerPrintReader_CS.csproj.user @@ -0,0 +1,5 @@ + + + ProjectFiles + + \ No newline at end of file diff --git a/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/Form1.Designer.cs b/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/Form1.Designer.cs new file mode 100644 index 0000000..2fcd540 --- /dev/null +++ b/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/Form1.Designer.cs @@ -0,0 +1,250 @@ +namespace FingerPrintReader_CS +{ + partial class Form1 + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1)); + this.lblMessage = new System.Windows.Forms.Label(); + this.Label3 = new System.Windows.Forms.Label(); + this.Label2 = new System.Windows.Forms.Label(); + this.Label1 = new System.Windows.Forms.Label(); + this.btnRegister = new System.Windows.Forms.Button(); + this.Timer1 = new System.Windows.Forms.Timer(this.components); + this.ListBox1 = new System.Windows.Forms.ListBox(); + this.GroupBox1 = new System.Windows.Forms.GroupBox(); + this.txtEmail = new System.Windows.Forms.TextBox(); + this.Label5 = new System.Windows.Forms.Label(); + this.txtContactNumber = new System.Windows.Forms.TextBox(); + this.txtCompany = new System.Windows.Forms.TextBox(); + this.txtName = new System.Windows.Forms.TextBox(); + this.txtSSN = new System.Windows.Forms.TextBox(); + this.Label4 = new System.Windows.Forms.Label(); + this.PictureBox1 = new System.Windows.Forms.PictureBox(); + this.axGrFingerXCtrl1 = new AxGrFingerXLib.AxGrFingerXCtrl(); + this.GroupBox1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.PictureBox1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.axGrFingerXCtrl1)).BeginInit(); + this.SuspendLayout(); + // + // lblMessage + // + this.lblMessage.BackColor = System.Drawing.SystemColors.ControlLightLight; + this.lblMessage.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; + this.lblMessage.Font = new System.Drawing.Font("Microsoft Sans Serif", 15F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.lblMessage.Location = new System.Drawing.Point(178, 12); + this.lblMessage.Name = "lblMessage"; + this.lblMessage.Size = new System.Drawing.Size(336, 72); + this.lblMessage.TabIndex = 23; + this.lblMessage.Text = "Please place your index finger on the fingerprint reader"; + // + // Label3 + // + this.Label3.AutoSize = true; + this.Label3.Location = new System.Drawing.Point(80, 72); + this.Label3.Name = "Label3"; + this.Label3.Size = new System.Drawing.Size(51, 13); + this.Label3.TabIndex = 17; + this.Label3.Text = "Company"; + // + // Label2 + // + this.Label2.AutoSize = true; + this.Label2.Location = new System.Drawing.Point(8, 24); + this.Label2.Name = "Label2"; + this.Label2.Size = new System.Drawing.Size(117, 13); + this.Label2.TabIndex = 16; + this.Label2.Text = "Social Security Number"; + // + // Label1 + // + this.Label1.AutoSize = true; + this.Label1.Location = new System.Drawing.Point(96, 48); + this.Label1.Name = "Label1"; + this.Label1.Size = new System.Drawing.Size(35, 13); + this.Label1.TabIndex = 15; + this.Label1.Text = "Name"; + // + // btnRegister + // + this.btnRegister.Location = new System.Drawing.Point(439, 252); + this.btnRegister.Name = "btnRegister"; + this.btnRegister.Size = new System.Drawing.Size(75, 23); + this.btnRegister.TabIndex = 26; + this.btnRegister.Text = "Register"; + this.btnRegister.UseVisualStyleBackColor = true; + this.btnRegister.Click += new System.EventHandler(this.btnRegister_Click); + // + // Timer1 + // + this.Timer1.Interval = 5000; + this.Timer1.Tick += new System.EventHandler(this.Timer1_Tick); + // + // ListBox1 + // + this.ListBox1.Location = new System.Drawing.Point(12, 281); + this.ListBox1.Name = "ListBox1"; + this.ListBox1.Size = new System.Drawing.Size(502, 95); + this.ListBox1.TabIndex = 25; + // + // GroupBox1 + // + this.GroupBox1.Controls.Add(this.txtEmail); + this.GroupBox1.Controls.Add(this.Label5); + this.GroupBox1.Controls.Add(this.txtContactNumber); + this.GroupBox1.Controls.Add(this.txtCompany); + this.GroupBox1.Controls.Add(this.txtName); + this.GroupBox1.Controls.Add(this.txtSSN); + this.GroupBox1.Controls.Add(this.Label4); + this.GroupBox1.Controls.Add(this.Label3); + this.GroupBox1.Controls.Add(this.Label2); + this.GroupBox1.Controls.Add(this.Label1); + this.GroupBox1.Location = new System.Drawing.Point(178, 92); + this.GroupBox1.Name = "GroupBox1"; + this.GroupBox1.Size = new System.Drawing.Size(336, 152); + this.GroupBox1.TabIndex = 24; + this.GroupBox1.TabStop = false; + this.GroupBox1.Text = "User\'s Particulars"; + // + // txtEmail + // + this.txtEmail.Location = new System.Drawing.Point(144, 120); + this.txtEmail.Name = "txtEmail"; + this.txtEmail.Size = new System.Drawing.Size(184, 20); + this.txtEmail.TabIndex = 24; + // + // Label5 + // + this.Label5.AutoSize = true; + this.Label5.Location = new System.Drawing.Point(96, 120); + this.Label5.Name = "Label5"; + this.Label5.Size = new System.Drawing.Size(32, 13); + this.Label5.TabIndex = 23; + this.Label5.Text = "Email"; + // + // txtContactNumber + // + this.txtContactNumber.Location = new System.Drawing.Point(144, 96); + this.txtContactNumber.Name = "txtContactNumber"; + this.txtContactNumber.Size = new System.Drawing.Size(104, 20); + this.txtContactNumber.TabIndex = 22; + // + // txtCompany + // + this.txtCompany.Location = new System.Drawing.Point(144, 72); + this.txtCompany.Name = "txtCompany"; + this.txtCompany.Size = new System.Drawing.Size(184, 20); + this.txtCompany.TabIndex = 21; + // + // txtName + // + this.txtName.Location = new System.Drawing.Point(144, 48); + this.txtName.Name = "txtName"; + this.txtName.Size = new System.Drawing.Size(184, 20); + this.txtName.TabIndex = 20; + // + // txtSSN + // + this.txtSSN.Location = new System.Drawing.Point(144, 24); + this.txtSSN.Name = "txtSSN"; + this.txtSSN.Size = new System.Drawing.Size(100, 20); + this.txtSSN.TabIndex = 19; + // + // Label4 + // + this.Label4.AutoSize = true; + this.Label4.Location = new System.Drawing.Point(48, 96); + this.Label4.Name = "Label4"; + this.Label4.Size = new System.Drawing.Size(84, 13); + this.Label4.TabIndex = 18; + this.Label4.Text = "Contact Number"; + // + // PictureBox1 + // + this.PictureBox1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; + this.PictureBox1.Image = global::FingerPrintReader_CS.Properties.Resources.fingerprintreader; + this.PictureBox1.Location = new System.Drawing.Point(12, 12); + this.PictureBox1.Name = "PictureBox1"; + this.PictureBox1.Size = new System.Drawing.Size(160, 232); + this.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.PictureBox1.TabIndex = 22; + this.PictureBox1.TabStop = false; + // + // axGrFingerXCtrl1 + // + this.axGrFingerXCtrl1.Enabled = true; + this.axGrFingerXCtrl1.Location = new System.Drawing.Point(29, 27); + this.axGrFingerXCtrl1.Name = "axGrFingerXCtrl1"; + this.axGrFingerXCtrl1.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("axGrFingerXCtrl1.OcxState"))); + this.axGrFingerXCtrl1.Size = new System.Drawing.Size(32, 32); + this.axGrFingerXCtrl1.TabIndex = 27; + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(527, 388); + this.Controls.Add(this.axGrFingerXCtrl1); + this.Controls.Add(this.lblMessage); + this.Controls.Add(this.btnRegister); + this.Controls.Add(this.ListBox1); + this.Controls.Add(this.GroupBox1); + this.Controls.Add(this.PictureBox1); + this.Name = "Form1"; + this.Text = "Form1"; + this.Load += new System.EventHandler(this.Form1_Load); + this.GroupBox1.ResumeLayout(false); + this.GroupBox1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.PictureBox1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.axGrFingerXCtrl1)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + internal System.Windows.Forms.Label lblMessage; + internal System.Windows.Forms.Label Label3; + internal System.Windows.Forms.Label Label2; + internal System.Windows.Forms.Label Label1; + internal System.Windows.Forms.Button btnRegister; + internal System.Windows.Forms.Timer Timer1; + internal System.Windows.Forms.ListBox ListBox1; + internal System.Windows.Forms.GroupBox GroupBox1; + internal System.Windows.Forms.TextBox txtEmail; + internal System.Windows.Forms.Label Label5; + internal System.Windows.Forms.TextBox txtContactNumber; + internal System.Windows.Forms.TextBox txtCompany; + internal System.Windows.Forms.TextBox txtName; + internal System.Windows.Forms.TextBox txtSSN; + internal System.Windows.Forms.Label Label4; + internal System.Windows.Forms.PictureBox PictureBox1; + private AxGrFingerXLib.AxGrFingerXCtrl axGrFingerXCtrl1; + } +} + diff --git a/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/Form1.cs b/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/Form1.cs new file mode 100644 index 0000000..a6b124a --- /dev/null +++ b/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/Form1.cs @@ -0,0 +1,319 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +using GrFingerXLib; + +namespace FingerPrintReader_CS +{ + public partial class Form1 : Form + { + + // ---name of the database--- + const string DBFile = "GrFingerSample.mdb"; + const string Logfile = "C:\\Log.csv"; + const string ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="; + Util myUtil; + int _UserID; + System.Data.OleDb.OleDbConnection connection; + + public Form1() + { + InitializeComponent(); + } + + private void Form1_Load(object sender, EventArgs e) + { + int err; + // initialize util class + myUtil = new Util(ListBox1, PictureBox1, null, null, null, null, null, null); + + axGrFingerXCtrl1.SensorPlug += new AxGrFingerXLib. + _IGrFingerXCtrlEvents_SensorPlugEventHandler(axGrFingerXCtrl1_SensorPlug); + axGrFingerXCtrl1.SensorUnplug += new AxGrFingerXLib. + _IGrFingerXCtrlEvents_SensorUnplugEventHandler(axGrFingerXCtrl1_SensorUnplug); + axGrFingerXCtrl1.FingerDown += new AxGrFingerXLib. + _IGrFingerXCtrlEvents_FingerDownEventHandler(axGrFingerXCtrl1_FingerDown); + axGrFingerXCtrl1.FingerUp += new AxGrFingerXLib. + _IGrFingerXCtrlEvents_FingerUpEventHandler(axGrFingerXCtrl1_FingerUp); + axGrFingerXCtrl1.ImageAcquired += new AxGrFingerXLib. + _IGrFingerXCtrlEvents_ImageAcquiredEventHandler(axGrFingerXCtrl1_ImageAcquired); + + // Initialize GrFingerX Library + err = myUtil.InitializeGrFinger(axGrFingerXCtrl1); + // Print result in log + if ((err < 0)) + { + myUtil.WriteError((GRConstants)err); + return; + } + else + { + myUtil.WriteLog("**GrFingerX Initialized Successfull**"); + } + // ---create a log file--- + if (!System.IO.File.Exists(Logfile)) + { + System.IO.File.Create(Logfile); + } + } + + // ----------------------------------------------------------------------------------- + // GrFingerX events + // ----------------------------------------------------------------------------------- + // A fingerprint reader was plugged on system + private void axGrFingerXCtrl1_SensorPlug(object sender, AxGrFingerXLib._IGrFingerXCtrlEvents_SensorPlugEvent e) + { + myUtil.WriteLog(("Sensor: " + + (e.idSensor + ". Event: Plugged."))); + axGrFingerXCtrl1.CapStartCapture(e.idSensor); + } + + // A fingerprint reader was unplugged from system + private void axGrFingerXCtrl1_SensorUnplug(object sender, AxGrFingerXLib._IGrFingerXCtrlEvents_SensorUnplugEvent e) + { + myUtil.WriteLog(("Sensor: " + + (e.idSensor + ". Event: Unplugged."))); + axGrFingerXCtrl1.CapStopCapture(e.idSensor); + } + + // A finger was placed on reader + private void axGrFingerXCtrl1_FingerDown(object sender, AxGrFingerXLib._IGrFingerXCtrlEvents_FingerDownEvent e) + { + myUtil.WriteLog(("Sensor: " + + (e.idSensor + ". Event: Finger Placed."))); + } + + // A finger was removed from reader + private void axGrFingerXCtrl1_FingerUp(object sender, AxGrFingerXLib._IGrFingerXCtrlEvents_FingerUpEvent e) + { + myUtil.WriteLog(("Sensor: " + + (e.idSensor + ". Event: Finger removed."))); + } + + // An image was acquired from reader + private void axGrFingerXCtrl1_ImageAcquired(object sender, AxGrFingerXLib._IGrFingerXCtrlEvents_ImageAcquiredEvent e) + { + // Copying aquired image + myUtil._raw.height = e.height; + myUtil._raw.width = e.width; + myUtil._raw.Res = e.res; + myUtil._raw.img = e.rawImage; + // Signaling that an Image Event occurred. + myUtil.WriteLog(("Sensor: " + + (e.idSensor + ". Event: Image captured."))); + // display fingerprint image + myUtil.PrintBiometricDisplay(false, GRConstants.GR_DEFAULT_CONTEXT); + // ---extract the template from the fingerprint scanned--- + ExtractTemplate(); + // ---identify who the user is--- + _UserID = IdentifyFingerprint(); + if ((_UserID > 0)) + { + // ---user found--- + btnRegister.Enabled = false; + GetUserInfo(); + // ---writes to log file--- + WriteToLog(_UserID.ToString()); + } + else + { + // ---user not found--- + ClearDisplay(); + btnRegister.Enabled = true; + lblMessage.Text = "User not found! Please register your information below"; + } + } + + // Extract a template from a fingerprint image + private int ExtractTemplate() + { + int ret; + // extract template + ret = myUtil.ExtractTemplate(); + // write template quality to log + if ((GRConstants)ret == GRConstants.GR_BAD_QUALITY) + { + myUtil.WriteLog("Template extracted successfully. Bad quality."); + } + else if ((GRConstants)ret == GRConstants.GR_MEDIUM_QUALITY) + { + myUtil.WriteLog("Template extracted successfully. Medium quality."); + } + else if ((GRConstants)ret == GRConstants.GR_HIGH_QUALITY) + { + myUtil.WriteLog("Template extracted successfully. High quality."); + } + if ((ret >= 0)) + { + // if no error, display minutiae/segments/directions into the image + myUtil.PrintBiometricDisplay(true, GRConstants.GR_NO_CONTEXT); + } + else + { + // write error to log + myUtil.WriteError((GRConstants)ret); + } + return ret; + } + + // ---Identify a fingerprint; returns the ID of the user--- + private int IdentifyFingerprint() + { + int ret; + int score; + score = 0; + // identify it + ret = myUtil.Identify(ref score); + // write result to log + if ((ret > 0)) + { + myUtil.WriteLog(("Fingerprint identified. ID = " + + (ret + (". Score = " + + (score + "."))))); + myUtil.PrintBiometricDisplay(true, GRConstants.GR_DEFAULT_CONTEXT); + } + else if ((ret == 0)) + { + myUtil.WriteLog("Fingerprint not Found."); + } + else + { + myUtil.WriteError((GRConstants)ret); + } + return ret; + } + + // ---get user's information--- + public void GetUserInfo() + { + string filePath; + try + { + filePath = (Application.StartupPath + ("\\" + DBFile)); + connection = new System.Data.OleDb.OleDbConnection((ConnectionString + filePath)); + connection.Open(); + System.Data.OleDb.OleDbDataReader reader; + System.Data.OleDb.OleDbCommand command = new System.Data.OleDb.OleDbCommand(); + command.Connection = connection; + // ---retrieve user's particulars--- + command.CommandText = ("SELECT * FROM Enroll WHERE ID=" + _UserID); + reader = command.ExecuteReader(CommandBehavior.CloseConnection); + reader.Read(); + // ---display user's particulars--- + lblMessage.Text = ("Welcome, " + reader["name"]); + txtSSN.Text = reader["SSN"].ToString(); + txtName.Text = reader["Name"].ToString(); + txtCompany.Text = reader["Company"].ToString(); + txtContactNumber.Text = reader["ContactNumber"].ToString(); + txtEmail.Text = reader["Email"].ToString(); + // ---reset the timer to another 5 seconds--- + Timer1.Enabled = false; + Timer1.Enabled = true; + } + catch (Exception ex) + { + MessageBox.Show(ex.ToString(), "Error"); + } + finally + { + connection.Close(); + } + } + + // ---Register button--- + private void btnRegister_Click(object sender, System.EventArgs e) + { + // ---first add the fingerprint--- + _UserID = EnrollFingerprint(); + // ---then add the particulars--- + AddNewUser(); + // ---clears the display--- + ClearDisplay(); + // ---writes to log file--- + WriteToLog(_UserID.ToString()); + } + + // ---adds a fingerprint to the database; returns the ID of the user--- + private int EnrollFingerprint() + { + int id; + // add fingerprint + id = myUtil.Enroll(); + // write result to log + if ((id >= 0)) + { + myUtil.WriteLog(("Fingerprint enrolled with id = " + id)); + } + else + { + myUtil.WriteLog("Error: Fingerprint not enrolled"); + } + return id; + } + + // ---Add a new user's information to the database--- + public void AddNewUser() + { + string filePath; + try + { + filePath = (Application.StartupPath + ("\\" + DBFile)); + connection = new System.Data.OleDb.OleDbConnection((ConnectionString + filePath)); + connection.Open(); + System.Data.OleDb.OleDbCommand command = new System.Data.OleDb.OleDbCommand(); + command.Connection = connection; + // ---set the user's particulars in the table--- + string sql = ("UPDATE enroll SET SSN=\'" + + (txtSSN.Text + ("\', " + ("Name=\'" + + (txtName.Text + ("\', " + ("Company=\'" + + (txtCompany.Text + ("\', " + ("ContactNumber=\'" + + (txtContactNumber.Text + ("\', " + ("Email=\'" + + (txtEmail.Text + ("\' " + (" WHERE ID=" + _UserID)))))))))))))))); + command.CommandText = sql; + command.ExecuteNonQuery(); + MessageBox.Show("User added successfully!", "Error"); + + } + catch (Exception ex) + { + MessageBox.Show(ex.ToString(), "Error"); + } + finally + { + connection.Close(); + } + } + + // ---Clears the user's particulars--- + public void ClearDisplay() + { + lblMessage.Text = "Please place your index finger " + "on the fingerprint reader"; + PictureBox1.Image = FingerPrintReader_CS. + Properties.Resources.fingerprintreader; + txtSSN.Text = String.Empty; + txtName.Text = String.Empty; + txtCompany.Text = String.Empty; + txtContactNumber.Text = String.Empty; + txtEmail.Text = String.Empty; + } + + public void WriteToLog(string ID) + { + // ---write to a log file--- + System.IO.StreamWriter sw = new System.IO.StreamWriter(Logfile, true, System.Text.Encoding.ASCII); + sw.WriteLine((ID + ("," + System.DateTime.Now.ToString()))); + sw.Close(); + } + + private void Timer1_Tick(object sender, EventArgs e) + { + ClearDisplay(); + Timer1.Enabled = false; + } + } +} \ No newline at end of file diff --git a/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/Form1.resx b/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/Form1.resx new file mode 100644 index 0000000..1ca3a10 --- /dev/null +++ b/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/Form1.resx @@ -0,0 +1,131 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACFTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5BeEhvc3QrU3RhdGUBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAAIQAAAAIB + AAAAAQAAAAAAAAAAAAAAAAwAAAAQBwAATwMAAE8DAAAL + + + \ No newline at end of file diff --git a/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/GrFingerSample.mdb b/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/GrFingerSample.mdb new file mode 100644 index 0000000000000000000000000000000000000000..2e62feff79c6e935eb5f6e49bb23daf07f0483cf GIT binary patch literal 147456 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 + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form1()); + } + } +} \ No newline at end of file diff --git a/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/Properties/AssemblyInfo.cs b/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..4b5f296 --- /dev/null +++ b/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("FingerPrintReader_CS")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("FingerPrintReader_CS")] +[assembly: AssemblyCopyright("Copyright © 2006")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("143f37f6-f391-4e45-a0de-7e40ceeab16c")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/Properties/Resources.Designer.cs b/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/Properties/Resources.Designer.cs new file mode 100644 index 0000000..136faab --- /dev/null +++ b/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/Properties/Resources.Designer.cs @@ -0,0 +1,70 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace FingerPrintReader_CS.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("FingerPrintReader_CS.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + internal static System.Drawing.Bitmap fingerprintreader { + get { + object obj = ResourceManager.GetObject("fingerprintreader", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/Properties/Resources.resx b/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/Properties/Resources.resx new file mode 100644 index 0000000..304d85d --- /dev/null +++ b/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/Properties/Resources.resx @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\fingerprintreader.jpg;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/Properties/Settings.Designer.cs b/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/Properties/Settings.Designer.cs new file mode 100644 index 0000000..3475c69 --- /dev/null +++ b/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace FingerPrintReader_CS.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/Properties/Settings.settings b/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/Resources/fingerprintreader.jpg b/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/Resources/fingerprintreader.jpg new file mode 100644 index 0000000000000000000000000000000000000000..67a13f81cf38155cf55ab330162ab420b4c3401d GIT binary patch literal 6174 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 Ll_G-$KK}YIvw&6x literal 0 HcmV?d00001 diff --git a/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/Util.cs b/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/Util.cs new file mode 100644 index 0000000..c606375 --- /dev/null +++ b/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/Util.cs @@ -0,0 +1,432 @@ +/* + ------------------------------------------------------------------------------- + GrFinger Sample + (c) 2005 Griaule Tecnologia Ltda. + http://www.griaule.com + ------------------------------------------------------------------------------- + + This sample is provided with "GrFinger Fingerprint Recognition Library" and + can't run without it. It's provided just as an example of using GrFinger + Fingerprint Recognition Library and should not be used as basis for any + commercial product. + + Griaule Tecnologia makes no representations concerning either the merchantability + of this software or the suitability of this sample for any particular purpose. + + THIS SAMPLE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL GRIAULE BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + You can download the free version of GrFinger directly from Griaule website. + + These notices must be retained in any copies of any part of this + documentation and/or sample. + + ------------------------------------------------------------------------------- +*/ + +// ----------------------------------------------------------------------------------- +// Support and fingerprint management routines +// ----------------------------------------------------------------------------------- + +using GrFingerXLib; +using System; +using System.Drawing; +using System.Data.OleDb; +using System.Windows.Forms; +using System.Runtime.InteropServices; + +// Raw image data type. +public struct TRawImage +{ + // Image data. + public object img; + // Image width. + public int width; + // Image height. + public int height; + // Image resolution. + public int Res; +}; + +public class Util +{ + + // Some constants to make our code cleaner + public const int ERR_CANT_OPEN_BD = -999; + public const int ERR_INVALID_ID = -998; + public const int ERR_INVALID_TEMPLATE = -997; + + // ----------------------------------------------------------------------------------- + // Support functions + // ----------------------------------------------------------------------------------- + + // This class creates an Util class with some functions + // to help us to develop our GrFinger Application + public Util(ListBox lbLog, PictureBox pbPic, + Button btEnroll, Button btnExtract, Button btIdentify, Button btVerify, + CheckBox cbAutoExtract, CheckBox cbAutoIdentify) + { + _lbLog = lbLog; + _pbPic = pbPic; + _btEnroll = btEnroll; + _btExtract = btnExtract; + _btIdentify = btIdentify; + _btVerify = btVerify; + _cbAutoExtract = cbAutoExtract; + _cbAutoIdentify = cbAutoIdentify; + _DB = null; + _tpt = null; + } + + ~Util() + { + } + + // Write a message in log box. + public void WriteLog(String msg) + { + _lbLog.Items.Add(msg); + _lbLog.SelectedIndex = _lbLog.Items.Count - 1; + _lbLog.ClearSelected(); + } + + // Write and describe an error. + public void WriteError(GrFingerXLib.GRConstants errorCode) + { + switch ((int)errorCode) + { + case (int)GRConstants.GR_ERROR_INITIALIZE_FAIL: + WriteLog("Fail to Initialize GrFingerX. (Error:" + errorCode + ")"); + return; + case (int)GRConstants.GR_ERROR_NOT_INITIALIZED: + WriteLog("The GrFingerX Library is not initialized. (Error:" + errorCode + ")"); + return; + case (int)GRConstants.GR_ERROR_FAIL_LICENSE_READ: + WriteLog("License not found. See manual for troubleshooting. (Error:" + errorCode + ")"); + MessageBox.Show("License not found. See manual for troubleshooting."); + return; + case (int)GRConstants.GR_ERROR_NO_VALID_LICENSE: + WriteLog("The license is not valid. See manual for troubleshooting. (Error:" + errorCode + ")"); + MessageBox.Show("The license is not valid. See manual for troubleshooting."); + return; + case (int)GRConstants.GR_ERROR_NULL_ARGUMENT: + WriteLog("The parameter have a null value. (Error:" + errorCode + ")"); + return; + case (int)GRConstants.GR_ERROR_FAIL: + WriteLog("Fail to create a GDI object. (Error:" + errorCode + ")"); + return; + case (int)GRConstants.GR_ERROR_ALLOC: + WriteLog("Fail to create a context. Cannot allocate memory. (Error:" + errorCode + ")"); + return; + case (int)GRConstants.GR_ERROR_PARAMETERS: + WriteLog("One or more parameters are out of bound. (Error:" + errorCode + ")"); + return; + case (int)GRConstants.GR_ERROR_WRONG_USE: + WriteLog("This function cannot be called at this time. (Error:" + errorCode + ")"); + return; + case (int)GRConstants.GR_ERROR_EXTRACT: + WriteLog("Template Extraction failed. (Error:" + errorCode + ")"); + return; + case (int)GRConstants.GR_ERROR_SIZE_OFF_RANGE: + WriteLog("Image is too larger or too short. (Error:" + errorCode + ")"); + return; + case (int)GRConstants.GR_ERROR_RES_OFF_RANGE: + WriteLog("Image have too low or too high resolution. (Error:" + errorCode + ")"); + return; + case (int)GRConstants.GR_ERROR_CONTEXT_NOT_CREATED: + WriteLog("The Context could not be created. (Error:" + errorCode + ")"); + return; + case (int)GRConstants.GR_ERROR_INVALID_CONTEXT: + WriteLog("The Context does not exist. (Error:" + errorCode + ")"); + return; + + // Capture error codes + + case (int)GRConstants.GR_ERROR_CONNECT_SENSOR: + WriteLog("Error while connection to sensor. (Error:" + errorCode + ")"); + return; + case (int)GRConstants.GR_ERROR_CAPTURING: + WriteLog("Error while capturing from sensor. (Error:" + errorCode + ")"); + return; + case (int)GRConstants.GR_ERROR_CANCEL_CAPTURING: + WriteLog("Error while stop capturing from sensor. (Error:" + errorCode + ")"); + return; + case (int)GRConstants.GR_ERROR_INVALID_ID_SENSOR: + WriteLog("The idSensor is invalid. (Error:" + errorCode + ")"); + return; + case (int)GRConstants.GR_ERROR_SENSOR_NOT_CAPTURING: + WriteLog("The sensor is not capturing. (Error:" + errorCode + ")"); + return; + case (int)GRConstants.GR_ERROR_INVALID_EXT: + WriteLog("The File have a unknown extension. (Error:" + errorCode + ")"); + return; + case (int)GRConstants.GR_ERROR_INVALID_FILENAME: + WriteLog("The filename is invalid. (Error:" + errorCode + ")"); + return; + case (int)GRConstants.GR_ERROR_INVALID_FILETYPE: + WriteLog("The file type is invalid. (Error:" + errorCode + ")"); + return; + case (int)GRConstants.GR_ERROR_SENSOR: + WriteLog("The sensor raise an error. (Error:" + errorCode + ")"); + return; + + // Our error codes + case ERR_INVALID_TEMPLATE: + WriteLog("Invalid Template. (Error:"+errorCode+")"); + return; + case ERR_INVALID_ID: + WriteLog("Invalid ID. (Error:"+errorCode+")"); + return; + case ERR_CANT_OPEN_BD: + WriteLog("Unable to connect to DataBase. (Error:"+errorCode+")"); + return; + + default: + WriteLog("Error:" + errorCode); + return; + } + } + + // Check if we have a valid template + private bool TemplateIsValid() { + // Check the template size and data + return ((_tpt._size > 0) && (_tpt._tpt != null)); + } + + // ----------------------------------------------------------------------------------- + // Main functions for fingerprint recognition management + // ----------------------------------------------------------------------------------- + + // Initializes GrFinger ActiveX and all necessary utilities. + public int InitializeGrFinger(AxGrFingerXLib.AxGrFingerXCtrl grfingerx) + { + GRConstants result; + + _grfingerx = grfingerx; + //Check DataBase Class. + if (_DB == null) + _DB = new DBClass(); + //Open DataBase + if(_DB.openDB()==false) + { + return ERR_CANT_OPEN_BD; + } + + //Create a new Template + if (_tpt == null) + _tpt = new TTemplate(); + + //Create a new raw image + _raw = new TRawImage(); + + //Initialize library + result = (GRConstants)_grfingerx.Initialize(); + if (result < 0) return (int)result; + return (int)_grfingerx.CapInitialize(); + } + + // Finalizes library and close DB. + public void FinalizeUtil() { + // finalize library + _grfingerx.Finalize(); + _grfingerx.CapFinalize(); + // close DB + _DB.closeDB(); + _raw.img = null; + _tpt = null; + _DB = null; + } + + // Display fingerprint image on screen + public void PrintBiometricDisplay(bool isBiometric, GrFingerXLib.GRConstants contextId) + { + // handle to finger image + System.Drawing.Image handle = null; + // screen HDC + IntPtr hdc = GetDC(System.IntPtr.Zero); + + if (isBiometric) { + // get image with biometric info + _grfingerx.BiometricDisplay(ref _tpt._tpt, + ref _raw.img,_raw.width,_raw.height,_raw.Res,hdc.ToInt32(), + ref handle,(int)contextId); + } else { + // get raw image + _grfingerx.CapRawImageToHandle(ref _raw.img,_raw.width, + _raw.height, hdc.ToInt32(), ref handle); + } + + // draw image on picture box + if (handle != null) + { + _pbPic.Image = handle; + _pbPic.Update(); + } + + // release screen HDC + ReleaseDC(System.IntPtr.Zero,hdc); + } + + // Add a fingerprint template to database + public int Enroll() + { + int id = 0; + // Checks if template is valid. + if (TemplateIsValid()) + { + // Adds template to database and returns template ID. + _DB.addTemplate(_tpt, ref id); + return id; + } + else + { + return -1; + } + } + + // Extract a fingerprint template from current image + public int ExtractTemplate() + { + int result; + + // set current buffer size for the extract template + _tpt._size = (int)GRConstants.GR_MAX_SIZE_TEMPLATE; + result = (int)_grfingerx.Extract( + ref _raw.img, _raw.width, _raw.height, _raw.Res, + ref _tpt._tpt,ref _tpt._size, + (int)GRConstants.GR_DEFAULT_CONTEXT); + // if error, set template size to 0 + if (result < 0) + { + // Result < 0 => extraction problem + _tpt._size = 0; + } + return result; + } + + // Identify current fingerprint on our database + public int Identify(ref int score) { + GRConstants result; + int id; + OleDbDataReader rs; + TTemplate tptRef; + + // Checking if template is valid. + if(!TemplateIsValid()) return ERR_INVALID_TEMPLATE; + // Starting identification process and supplying query template. + result = (GRConstants) _grfingerx.IdentifyPrepare(ref _tpt._tpt, + (int)GRConstants.GR_DEFAULT_CONTEXT); + // error? + if (result < 0) return (int)result; + // Getting enrolled templates from database. + rs = _DB.getTemplates(); + while(rs.Read()) + { + // Getting current template from recordset. + tptRef = _DB.getTemplate(rs); + + // Comparing current template. + result = (GRConstants) _grfingerx.Identify(ref tptRef._tpt, ref score,(int)GRConstants.GR_DEFAULT_CONTEXT); + + // Checking if query template and the reference template match. + if(result == GRConstants.GR_MATCH) + { + id = _DB.getId(rs); + rs.Close(); + return id; + } + else if (result < 0) + { + rs.Close(); + return (int)result; + } + } + + // Closing recordset. + rs.Close(); + return (int)GRConstants.GR_NOT_MATCH; + } + + // Check current fingerprint against another one in our database + public int Verify(int id, ref int score) { + TTemplate tptRef; + + // Checking if template is valid. + if(!TemplateIsValid()) return ERR_INVALID_TEMPLATE; + + // Getting template with the supplied ID from database. + tptRef = _DB.getTemplate(id); + + // Checking if ID was found. + if ((tptRef._tpt==null) || (tptRef._size == 0)) + { + return ERR_INVALID_ID; + } + + // Comparing templates. + return (int) _grfingerx.Verify(ref _tpt._tpt,ref tptRef._tpt, + ref score, (int)GRConstants.GR_DEFAULT_CONTEXT); + } + + // Show GrFinger version and type + public void MessageVersion() + { + byte majorVersion=0,minorVersion=0; + GRConstants result; + string vStr = ""; + + result = (GRConstants)_grfingerx.GetGrFingerVersion(ref majorVersion, + ref minorVersion); + if(result == GRConstants.GRFINGER_FULL) + vStr = "FULL"; + else if(result == GRConstants.GRFINGER_LIGHT) + vStr = "LIGHT"; + else if(result == GRConstants.GRFINGER_FREE) + vStr = "FREE"; + + MessageBox.Show("The GrFinger DLL version is " + + majorVersion + "." + minorVersion + ". \n" + + "The license type is '" + vStr + "'.","GrFinger Version"); + } + + //Importing necessary HDC functions + [DllImport("user32.dll",EntryPoint="GetDC")] + public static extern IntPtr GetDC(IntPtr ptr); + + [DllImport("user32.dll",EntryPoint="ReleaseDC")] + public static extern IntPtr ReleaseDC(IntPtr hWnd,IntPtr hDc); + + // Database class. + public DBClass _DB; + // The last acquired image. + public TRawImage _raw; + // Reference to main form Image. + public PictureBox _pbPic; + + // The template extracted from last acquired image. + private TTemplate _tpt; + // Reference to main form log. + private ListBox _lbLog; + //references Main form Auto Extract Check Box + private CheckBox _cbAutoExtract; + //references Main form Auto Identify Check Box + private CheckBox _cbAutoIdentify; + //references Main form enroll button + Button _btEnroll; + //references Main form extract button + Button _btExtract; + //references Main form identify button + Button _btIdentify; + //references Main form verify button + Button _btVerify; + // GrFingerX component + AxGrFingerXLib.AxGrFingerXCtrl _grfingerx; +}; diff --git a/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/bin/Debug/AxInterop.GrFingerXLib.dll b/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/bin/Debug/AxInterop.GrFingerXLib.dll new file mode 100644 index 0000000000000000000000000000000000000000..c89f63235dcf03703b1b92190a04797bcb6a5e4b GIT binary patch literal 11776 zcmeHNYiu0Xbw2ajon4A6k(6o4rmUqY$y`0C6-h~!;s+^Glvq;|B~lN|5v1YnkQ{4w zXEnQ|M9FNV#BrR&h3y}1;-IZk6bOW(Mx0cIjm8FSI8d6R4g%Csi#}YVcGJ3bnjp1+ zx=HJP=ib@b7bVN-uOc3D&fM?3?!D*Ud(Lo|dyYOu8WHKZKm3sBMLhZH6ZFR9JjAh; ze;T99k=NT_R7PHJAD?y#@x13wc~&-_vT`}M7@x4?-b^m;l-n$Iz13TNG<=P)wpVz#+-oJBVi-_X*rQx;P%H95-5G{QRV^;|8BE%nQ?6 zB7VzHA4(M>_g)3Cj0;6E*7Fduul2Yqu0En26;L#jm_J`UHkAxY z!}sspPNWF#$0yyY2h)6~Nfcc>p{nOFUR~>q02Z+x>OA8LL9||Alr7Ly=NStNDG(Ob z0_>4eA7Qp&EG(ozSX2vuN){NJI?q^GNP)1Z7GOdpiw3q}EG(ozSd<0SlGNxNQR}}@tFO5+-+;$cr~hQV{^CI2 zpu1}QKUb%(8!_F*2@{jxK33J*e5c;VZIT8pNu5^L>i=!MzTr0eJ#d^Bu=&YCHZ3={ zS+3Nqg{B+s(i_|KFJyDejcu|E*|b*JEU-_WskL!$Eg3AhufA2MzpPTfZr#6MtFO7s zeS-z}$-DLXw*~qkO4P1lSgnt3Oph5Z5{umKV!zkzm7aP#w@sR~Btz7PevsD6=jm8k zKW2<}u7GM0%b`T&>B5S}^k#DJ0KXw-ggRHEu|K@FC27)z+A)8=?5n~$X2e3Vup5_y zfK5v>LPNFVc&2O{3twj(?5UYzrrRz?6AnhhKEt%Gc04bXeb$V}MP9l7dHc6|I~N;( z4H}XL^`IZVRJAaG;yRCb>d4ZZpwx2=euxCEbYf|u1)R<3yawKz+L||MEh#wYd~MuF z8a9~HkW>gqSzPKlR&>|E#Mg#`uiw~M(pL!^S?a5uNH5VM61g(Zz1Q^7(jsk+$_lc+ z(XS-Bi%5mmf(=WZ+5FUWH|euES|1%M?~;6<`K3^TjV!= ztvC}nSNz`6q!qd_7Hnh|Ng8soAf;NtdRQswVMS~8unLuWh!FJduGhl~RO%sQ(7U%@ z58;q{A?yMo#IQ-6tsUh{V>=u_8U7C|BZs*PiDKjl3kmVTf4Uc z;GH7_`UIlc@tZ{diRUj7_l~im=j5hP(TLv1nO=&ZbQ~Nb6N!qqRmZM_!-IG(1AY|y zwqr-eonU2LfXd-pTNSt=`Y)x2kZ!TXh+~FjA%s-C?>vPk^D$nYleifpUWBz4GQ>n6 z=3`oPhZ<3%v{~%}-31z>yqW@i3^YuCh_0jbw$`OK(+~Am^(cMEV9h@R4O1(eMQJG1 z8;a6rLdQWbf`;i0@LTDF(A%L_S{i;E{A8H*cVkdtvO#a7S<^M6G!S8Ly9Lb%`h&D34E$l4GqPN~>uz<{}UTgFq4d;2cAC3aAmNixkMdB4kn8C}dZJEQ(ygvVRw{ z2I>{EK#C{KKf@Mm7erbNbAIDyyT->fpmJ+N4;7%qWd>K z>IVwZfB5Lr+C5mgMeVYOlRze|_R*KMA;j!HAN?*+l#T!qT~WTRjUcv<`{-qXUi8rw zZ4|P9@zERFA;f*zozm`I?IEnnh>w1zO(QQq;v>@Y)I!huD59UmUVFz!D}k2NvJUB` zN54RAG~%OSpp|sqN5}LLyw5)Gqmu%?<)hR3mmph$n!$7U0#FC_`RKRxC-F{r#z%jo zKa10L$wyc9OQ?JA`{-Zw%ao)favXd4x&9h$rAK|F8E?@2^pcNO7;n-}dQYJ5QqpLp zU3AYHw)-x9N}!C7h6MV$K%b+-#*d--f{z^ICp1hy@X@^SKK>5;Cm;Qm@eA5Rzx2^X zLsj;%d+Y_?JrQNUkFF?};d3lNSB=HW!2tcEahviWwcN!Fw(C%i`ZDR|p+NI8#&Rq` zSB*~Pc!1bTiteoNlCJV%2bz~Lhp7NvHF^{$KrlQ#I%*T|m;FFrru9CW*RskJ;48E?{HxQ`!dB7?Xd^FxYV`Y{ zIz1<(eZwt<~3eIAa{j3E2I6ChcJPS$H5PP@=j)pwPBiRaX2K9j| zqOBt5al2k~L}-o*&3Y+Y8T2(sL-c!~VSg6iKwA~wG|{gv`ZYu^A!46lVxJ~`6I7v> zg#Mp{YV;4FI=u&qp`u2Gs0mb|1gJ_|MEh~ke)3mpKP_y(dIMXHE<&mkYbta}P#MWz zFWc%p!>cb>kZU7HrgD$fwimW-M3s4vIImfPI-sYOQ=qLhCpZ^CFX7CxPDIeBX=Auh7?3{qL0sea?IrZLT;8`ni4$ZLTm0;>z+ZIvNS7 zn=rOU(Ah{UY%fG^QI~_$O5X=vu6EJw^blwVr9m60Umc)N(H|=VcxQSJbR9jS{DJa- zvQqs^<)=!gx#*Ks+VwWjR;)TtTAv(q=>wO+q=4TY0EGnt~3vIsi9QttF+^Fm1iUY2D(y=KeA6==Ui#Y^aj;wULVh56EXWd!5k|TBH z=BUv28CCi|ueA0;I{?0BfMtUhv_en7Dow$uS|*`h&G9X&nZr4!=vW!&tWD@kHU>N! ztAGfJZ!8AwLeX>QO0eJatT{Sld(Pw>4W|)SG)6r;Z+Uir5xZg_v+&iBjZINtt~4Ai z^L8z$32vR{fR(QpEl_#DR(`B#c}4JwGZ+S*V?{S#39VWCfOT5TecT;#GD2y@wbFt$ z&FwjRkyk2$%MG-wyC)U;^!7r7~R|D=_&3v|G83iiHS#fGfn_&dty1$(Coiyh)~ zYIne_dlF06Uzp3K4%h{pViN5EE0dY9QYUGLJ>}$vb3$!rF73CRv>XqecGAUZnzo&( z=^`O;GH4#g&3htOr181DjnnE`-rTs8wXsy$Jm%;*6EisMe#j5llNos+(R;zpPGsi% zDAlXZVAEyot^qfj$4Yu*wm0i=oFv2IQ+>eBSZ745P_{oH4OtDM2`A$e=gQKBOBM}e z3QoGLpf;7Gyri(JKiv)GCVt!Gc# zSb>xsaAw819YX@2xZ)Hu1>-8qFihGeH$l=Pw#lkAmbUH=TewpVaG3uoFaPv|1n^Y*K(HE6Od<6NF zRcMw(RLmFo9^*uZr<^OgNllj$Th__VAQd9-;j~f-?O_!=Etv&-DvKqr0#yo5E|ozR z5>I(q(j^6PE+IAyFtAxJ~zy*p6F7X#*(zu~R437-r0 z;wO!tE%?S|0-q$NsT-|cv^L{2#0_MDlN7upxIN&epx2GN2i9qtB;}T2%8^4w+!j77 zcIYgoLQO+xp$?Wgw+|3c(t;-PIk}K>>kKHZ7(}apmIwY^t+eqFq#pcDLPjfx(XTD6 zC1+Il&BHVMr>0stts4U$Zzy$kY++GWNVx}ml5&^St?Y4Bc&^b~x9em0l)4}36A`i~ zk8v&#&s(LeE~+afe+={E*%T2w_EDr68I2WXxeI=cbX`em(Jbb30Jf*me-_Uv;Bl-5 z_n1MO5>j^rJl+*$ts(T}!Y0tXOKL9UZ8vOluofN{?-Z-gYmmZ-seK3fVo$tUyxu8% zD(+xa^3b<qToltW31bC8iE)E{f~slI9isYntJ>%D{}oHNiB^5L$dO13$th7Kt0?k~Y(f!I27T zK7ar5&ouogy1l^{z_>jY4+|yV(UQ0+S}@~AJNgK56PM`KSYm|Ys?yfHL_U_uM_fKS z1#n5DnS^{~>sgvl}{aVDKilK3BnrCT;`+P1MfncNcZ-rl`+ zd+(O`=pK9&r(kG&-NC~iS6dHzR(`LW3*H-0hViGELY;#`O_2Mz9WUd`R_XtQh>j1q z-e4xP$8vJ=k2l*Ef5@};hpQ>xS84W1`~Ou0_`5lLr%H6bde~y`qfXcJS#LM)BPZnd zu#EY7RP6;lgzrXt+3?|06%OD(!ap#5eKc(m_?fU3%~~ zRp6EDQK=?yO`AkU=4%x`FT;P5+Xgx-x1p4yLB8A=@Q5Vbo#G#wSIV|he*Mv>@1~wVoh$B8(R1hKg?&9Ie zZ#a8FxoQ#hqoS3iTyeYbomO?_IYJ{C%LF7`2l?A|{+B@>^9X!Q36EUC@~C(`>M5G$ z>PT_iCq)1Ie7@uNUy2Qn=KnU1UJ(y|qjE928Bv#Oqf#4_yM;|ZRm zb#>RA)||7hXA>ykdS^Th|hn!2{8xQy}5)qf1dYG zX*nU#g36x+(w!?)gm~*zxjIPK9|{5F(YEUOh7|qD3Hjce)w0QuqP#7H2;xkH%jnku z1mexAGBkjQypr8;A>Kl`jD8&m2{KB4i++>9Hwk=`z&8nelfX9#e3QU834D{lHwk=` zz&8o}|49P4u7)43O&KC2Z4(Ju9Y6>V(y)XSJ?#MNb5}_Gn?HUthQ#S{8Fv{Wra+fp z0LxMVBPf7`fDsm0;!P?jfC}I)EC4jPiwdmiU0h&6?~(#3-fatD9gR0LxDijFZPtuO zAWQ$dE@9lEpeebEnLMBg>wY2-aLe!agvrOsH8z04*VsbXkb@Y(HFf}YNYL0L89m$q z|H$jPOlG@|G1970tSd8iZJ`@ z2#FNo0d|KN)dK`9bpzl5Q)B8MJ`3? z`E`Wu6yfKuBeb9hR^qQ#VMh^SzK-w`w2@)wejVW~MR@*ogbftIPx4hBCQ*dkuOfJ9 z8FuH_bK@BH`PXw>GHflAuT|~k#IXG;bKPrInwJ;#Pd4BK-H|!;8B9LqiI zh#37X`t%NPr$2qZ3pxOO9EJysBeNQBsIDPbm2CkiiNSH}-8i(QA3cokl0Z%+ccAqLPJ>&OK#POkOEX3y+r<112{S5qZl{} zob;#y4xtLDX#i{+^|%z+LNVLZYM>KnkK>q!<_SX*=pt=}jZh|RVlJ-@gPx6`)o+mb zMK9TFU=*q(P76pxfIOBWQ|0ghn&w_9dRa&`zL2)y2$@h``Su!UGZ1m0#zBeHszmn# zbTf&@9Yrs;5qSCPRhOb!5Pc5R>E#3o4?v?i6ZIMPkU?Yu>?a{f1FpnX?Sn3o(AJrG z#c(~v*EEOfOhx&qfsLgi&Vmg#3;1AkwLlzZUUj|@g@`srV6Oq|(OVJf#?MeE$N_c3 z-i#dx4n*I0YhumQfT5b2OY{vF$OKI!Y%ZdBxl0^5X>h>d6lf!Hssf7G2?%r<4|c)B zHrul^0kBvmbP$be2{4E`vS&Dulh^>N#a`e*wM_uQnU$E*GVb7IOj#);+`+$?HuOv< z?w~!U#NHh`(3EIpAQ*R$4$O~|z^=jl2^e?iOE3t=9c%~m2JGCFJcssz&jB4`^1&EE zDM20rTl&+2HH!*hk_Av`xqvAbfz^w&(8s14f236jhdG-_+XCUx6eBoH+CypwFmysLK)LcY*>1&}`@|6q+8| z8KHn&9U6vE&IcLcc0nlgxgMA01k)9uY)o}VxGL=JHDD?tP$-zZ!id7)lv7jy37~+X zeK`ZJ)l}5P6Ig{&1gtF_s6heHM<~Y(K`eKe|C+i(HguR*BgllY3NmQ{2YrEj7zPFG zNZ>*fffV#(IG@Z0Sx{fjv7~`4sw6mWg9ETL2>v-1<&?s!o!)gB=SP@V<-3YFV}^Vi zL;0Vp@=*mL%UYl1V8=;;cvj`>XcU$l7&f=-umLT zITrz*#GaK}pt%dcMS%K&ix4=nT{sZ92tBBl-fIY`Q!r>Q_N#-wgNRpC9OJlZDn;@= z5Hg753)aoOh{O|kt_}K@208(}f=h9agjTQ zR1uhb7-|G!Hp`Hw=>Z6wk}&x&P(j|n8uJ>`ykRxw!4M4PCf1l&kLIneF;5P8_L>B2 z36qZr2QERb+glJ5${M>FN^(w{Tqoo@N}h_VCzhfM%>B?XIaB(=&bWCH2(X&%z&OA;SkP{{UK!baz%HkK zoYeI;RB0Fj%StWMPfb8)_@pK9X8zyN88fl5&bXNy8AS+GiAKToy`~okj#`F}gFA8k zZh+Tf$8hl4Og{Fx0q)E$=HM<&KK8c(?#dqG;BF>NK6bVt!_Ab1-ol#Qz=qLt87z<* zp1D}U>9APS8#rpnz6IoJz5So+fH}z00paH-d!e!6_Tm$6k^#Qt%T8^g`bdTOr zz@7!}U=o$HWHgVJZ z0#gy6oeNC4e-8;WYhJm17tm;G8r;aM1URsmgg4Kgl{!q#NpD+F39iMwpboGH*z;)& z9a0Mzfz^N)&jAJ;oHQcMcL`8*RO)2 zh#4(KK=JFN*fshncALJK2aRSSF%SwsH5diKfD^`wG}({_SzxAS02jwxecWB2jm>mt zAzP#6a1h|A(N!hbh0td}F+0%S$zGd-r~|8Vvy%?hcv)E*BGSQ9!`BCIqrKjB27-zHS!Ps-Zxcp&D9- zI)A-!V4qf2g9%qR$7;18jQ!iF76iEEd{zquS{Z7gWjnW=e8^x;kSv3@BX{d&lp`)C>8dOF3Zy;*U% zGErE@h`xhnDAy;L3rhp&UXivCK$>A39MxYw238E3qACC&0$h(coP(orxS7kHfZuAY zBAiV!Vif`M*MR1hSdCkRyEz%SrFuUCNbBAANUjzmFdCcYOE4N<4PZKGe2I+)Spzm2 zXANL9)EdC3hBbguZ)yNzKO2KNv+G?=XxL0vXCyQPP_vWIL|rhpJj`-)G?tsa=7%b2 zv15$79DS91B2aM4tyUkx*|kRXQN+!NXj`o^gjZFDT~KKVm;ghlP8fmgZX?1JOa7T5 zP++C=pk?UPOs}Zer5xAaSK}Jt>EtU&?@ zce68)L;c~%Rd)agXGPXk4uB%oKn~$>NzEHFK*jKLoP%ji^$r*v~qL0{x{S1m$#zIE5K!L_zK*uf_`&aI3AC1eo3K4iH2IYR5wv_X)J1gL^T(%Pkpb%}DTa zl!80h9Ilv0z>V9F(0c$q1V`2C5cJ2@A?P2gL(uZ8Lr_|J2)h#+=FW}UG_LP3@ZHu1 z-|aq$vPCBu_L|963C$EPPU%hM;@El(7q@q(xSpPd2aojm9iPq@VIC_ZLmLCKtvmQC zQ*H@gm#{~GpHm{k1Whvw^0c!dFcl3$Y_5!9UzCSyReUZAw3WJJuf~1 zaX=>gcL#qVVqI-WHpSG;p)_?)(3^&RbsKn&iS(f1K+oGiFJ23}Epnd+1$1IyY#8Qv zx-#zb0pdBz&^U(f507sN1Phu12BY7^^^9lOAgH#$7lHamuyjwOHq2`~L4BYDI6qwg zMaFi2dx z!CGi_b>gNXO(~Ey6LY&QxNc4bTnB@En0)L;z0R-~pfKNkB{CBQff19Hbo84hV%+H! zH57B(@Z`FALsA(>y+Nw_4IX?JkJSZ45OYp9MD%QcBLa=JzcVKR3jaKKS&?$AQ#`2m_{s&l%3Ji(Lu@w#g zPDp>?r@4~kg7aWWN1`TK@c2Xp@g5|Y=-{3~e26!RB*}oI0EiMU6_z9&XglCYL7AU7s_2rMzE0~emLpj^X^`oFZsXKb`f1)+bd{g~XTc-N>r1&>e`YKUt0z*hE zvqBV6SCC}gR3m-K237mZVTELe#J5Npy9_{|7jv8e&(StX>{p)e7rcpcNID zDsB*~E*--<(v8v-V4hSwBC?R2;?$0;tJS^xkMr{ zk(is9n9Iye&180#=H`}mjy5)SHa3n9*7!Wk+QFf=v#WD$hx+v!HL73V-`CgI|GUZ` z65&~xnOR6JtfW#aTdAeg*49cUv$A!uwY9Ugb!kw`0e-a_$m_Yfy4I7syEkay?%uq4 zv*yh!X?$0)o5&=*cH|JB2QwBKk1yj@?8EVcC*;u|uuFeDhA$9`#1a!zGeFn`!#L0DtEU-U({^No3Gm&BenwXg5@SA%ERG}^L%uVKUgqn1@R ztg2m?i8-GKoyV8Kr1n)$_r=3ZYq;8WEsIuN*py-2KF{Ri%`T71rR&?tGUk>&NW3-e z;E-^)XKl`R`Vi&zan!VnA8WOKI(NjGzau}1+H`%z-@bUP$FS&7Tk>ySys`>n)4kT6 z(kHLA6=dRtt?NdJ%RSTwm)@)(_hc7+p0zF9_a^2|SIC^uz3bE7cYkkL@659b@=|i& zd*{NzLfhzYW~}?duU{UMyE=F7+tIXS%R=$#gzmMr&#HTkxLq%Ny88awb+_94ogDE; z#Oe1*QWJu`QCrw|?`6EM_KXrO5rfqU|gFtiN$GsMq+P$1- z`ruE6=uG@p@6x76x=an6^e*m6qszq&r|o`FxbfwS3er?oLH-Py>u+XrrmX#kd)?iY zOP;G=@GhEd>v-QUtz6Llz>N#&}P8Pl9|%WV{ex1*g5)B?-S(l z+~PwQ*31}V^8JkOrPq@x$fLdUc3)jQd+lnTSpHmcFSN}}5LO4{OR~?saV~#y|0YMT z9p3)w^c#m$h2wjlb6&ch|MpPgiN(K|6{ic1Y`FZ`Y316P{;LKb`f)+uX)_Nt^4k}> zVf?g)9s|1UVO^%?<+Kwz+HMJ+IpS!^kyUjSDMZ999j?ckWlu2b3KnM-e- zaST}bdjHF%&(FOsnc8~Xfno1sQ*C;#Vdl?E7yo3-{&3jurwc#sU%mX6=2gmTP2{3A zoBWSAW#Kl8xtYN(1_*N5q9{hP`@un%vlJn)a z5}&x;j$3oWJ!HKmrSXFRQTnd*={IM%bs1xtWZKhxnS9w%zo_N2d{=jF|Kp+PceC%l zYH#Z^@v_?NZWne}zXP|got3S7wqWRjo~w7(+POtJXie`8zqY&S@;v$MhteKLHf$T` z@LjLheOEtPK77d7rRtTox1YY~-@0&A?KzQU1tyN`E}y@Y^ZfkPq3KIvelP1IjhA?z zc6@0qDt?tM{JwX>y=-PtLIt^;*1Ccm9FXw*ih2W6uZhzMcFm-BwHEYOY%K6@uNv`3 z?8*f%T6rgKeG_2f;u2gU?s%*D+z~J9&i6Y0_)6TFYs=2wZD1mtHaPjyijznBuQ|0n zQd8ROx49DU3Nn&Eb&A{7M!P;VdbR3@*lV+I&q#akbZ+kvpB#_Fam#+2I;i+<$*HSL zm)Jfyb=Nj_klFjO6JvTy#b<{3dW-FTS>EoUd%+C18Fs}3&TM>HGN;w24eb>%J^jwz zQk0gSnODu!%s(Z6>P=-WZyUEG`BQA-lfo{`ExXv4C7pb8@Jz|_lW#_!nH4^9ZQ8zC zt1k|6yL36PzWwvRU3{l&4^H0v_|uc47dE{*`sU}efBaQJif0v1$p~=S^;0?1{Jg^t zez~jHT#23QvfJ*b!bazpyr1&t!-TjgnTiP$dhI;j=IPYG9FNN4v>oS99R1?t;+K6o z{c-=-cC|OyL~eT0<>Sc%HlLTfyF=hCYlMK>QDm>lNSr0%$t=jSDCIsPIdarETY z`KA7)8=iRY&QErG@1%GipL;InyR^dvH!sSIKMve6r`*cTqG;3NL51(`9pAF+*^T}) zo<;utFu!Zs_61ifBRjn z=rwH=isIt|OSbt9a&@{m{$uKy`@7E8b+R~nEbzdSH=~~o&DriX?A-TrBDRi>-tbP6 zdH)}y0Pu+?tU0H;8cM}XoKDFI-S|rdfd^mr_WfvmsgOyUGvf+uW$4#e*4PpiGO6w z)>`XdE+m((T(te%v@idaJ-8Gd*`#baB@++h?9QH@=y8!`PA= zWleKhulrLt^Kk2%%WjUmd#}G)S+^$(+&7+-W?w45_ptZVAy;3NtJ!rS1Iu<#qiAD%hiY4j}HvC#*I zG~2VPrQ1WxGpi2q6tjQKderm0*Zjn__mVF8g_~X38Q1%jVDN{Ft<`t$|2E+2++h>y zO)c7^IP%;5zUvB9cCWU-el9h$vRw4QB70E$_1+Fq;qCLSt`x_cw#se1^V6&uYz4V_Y1yAmI(OZ6t1w`~ShLH2t+(B}$Mb0g z`AxUr#=xJ#2E6HXW}4c2=)E^~r?O|waPfRyTtQrSJ#DeFCB!Ebp5ApMGsd@PyQ%L} z`gpuNU>hAu3|HDiw+HnqNa6chCns$5U-0%#X^MX&g` zy&jbvoU!Xq_T{`bKNr3=D_nG`=tRJM@1bR%Jbr&tEA!&j#HG5q4dV`W*-=t>uoR{s zyOu_8xtIR;c<8EwpI&_O?AU+*nI$XA?#Cz`jb>oHU>J0YQ!2=i!g>j%J$s(~IC$NM zo9}8J>(b`O$*u24htGL@C-TX@hs7&rPudo>TwrtD$FZIHl$=eE@>=_pkip+)IS?`E&++pXK z%>1(I*)MGhnRpX=xRCh*86iOAHItX;lGXVxMJPuG5*JM|8D-?{C1wt2A}s? zmka0RSQpLT^i!GRnLeJ6T3sF9{MO({?<&aBR^N4Lx1!-Xr@^iT3kwfr^FF#Yy}f^M zr!hUY-JkyO&6vJE3${O4y#2*qpN*Gi&3u*mDboMmkn6cC&&b1iu}j`3HF#lJ9Uy%<0uR`2`WK=9iKyNS`_f%SX=qxazwy;n>6kv(23j zH#bo{yR&si-`(l8hD<+N)YQ7e!Hqv1DHkt#f6-UPdOxavW^G`CV!+7uQNMpm>2$T$ z-PyNFhfZt%a%p+mkix=|Vf__m`D@os-C9AetiD_Bu)f!tpmrmdq`7ree(HZlnSAlp zTK=Bb8dX`>73)XNW;&hkQ+Qz8E%8OW@tJ8uU)P+)EsrSOyZlNwKmUZs_U73sBwJR|j9OsOh@9#W$*Yop*mmO~n zT08PwR_@YP9{cyd@+;}7OZS{Oc-@w@rSIp?FRI%oy>DLav>umQv}x90sIpItw6$H( z^}W}<-er~5b~)RB#fK$R=3RQVrqyV>gRM4sgYqYyTap3X3Gt&YdtQF7R75(u+%z1|bCx;(ire62& zwMjm)+sc-`TZ&==_U!$j?GrTR{@#iSX}L2y8HQlC~f~|`S7KG$Fy8@KjvJNu2enF zeeqagxJp*T{iZCq z2CX@^?U&=dP8I)s3kRyW+9iiqZFTx|b-|Mg5*YQy!$siYnLbK7&EMw-qg9gaE9Ja) zn(r+ic$xC|YaS%Gu&E%M`_KDfW#4-RX01#7uI(LnzHSfyxXoFfzt>vc`eAtJoUFQm z6LzF$+|XWF966PD&nL3!^H*z~0(yOCy`gimYkG@D0ry?*kNe%F_3A54>UylddOpnL z+N5~b(7XO|R~prw_R3}a+ryUw4y1?r3!2O7YpMu;T5$4y#7$+xIoIcScYZkb#&=`puFZ8m zrx|f}Y{r;(t+Y?VWxqC$DCo2)?YUprpt^Is77Si}Y=9#2WQPIo&Zj0VJk@U0tCBmH z>y_`VAf5{fQhQxpx%a1giK&FI%LhH^m$f46_P*~2pI7Dv42bG|^+~-` zQP+n}Je)ZD{3)2zTxqxV{15e~o$9wD{)}6E?OjhwW)DAos#o#!Wh?%2>@s=gUZc$c zLDsbW4=xEu*F9(J$S z=7`4qghU?OYtO^8XVx^cvzatu)<-YjkdI@vvfv>?65pKG|IT)%*= z^VFb&)32N=x0|}EV?fu~CGQ=5yNx^hvh~Q>`#k2KC~V*#^!#K@OGa{DT0yox`is|Y zfq$Q;fB&?mXaDHleM3r_RinOtaCO@58?o9K4KMs2b$jy8(J8GKZF#vc&97aD{Ye=i zdslVoZ1>&V^LgtxPKi1i>NI%ng@O-BmlIWMOxm0eyP-b4IC}CYq5F{NSD}$NW|TA& zjG9~Df8|cMtyz=GH? z_NIr_C!V}^D0+9XYud8a=_HEW6L(PyNA*Y$#6@k3>tHHgxF#j4gqdU|-@W{7XJx3Z zf-D~EuD^mh2Oa!Vc>z)=XdJJ-~^qQVLIlceU5q>{xliKFTwYaloWyIgt zEEd&HuVXG?cw?VVbPnrjpdo zqdGo}t6zWa>`e_~rp_MKQ$Azv`IA!f2mK$7E1VXi-QV}=pKT_!o3!AL`_hk{-~W&} zyzgj@+g025DQUNCAH0l^^;>f2)e`TL9i+|JwAu4F-Uz(k!A!qW6}S2O#QvGLrc6$E zvJ}lfcxKVG&1)N;m^$`B+lNbve;w5Fblw^#$MY_2v*stXdCco{^YE$(>Q4P9^t$r% z-n=DQ!lpZXj+SB`ht3cW2L)mWsDrvt^REwP~?fU=zeB?RHt<63KuADsIbMvgS2B#jkl25wVZ{(Jg1Rb5w!Xvhzn|$-2Cw<%!3Xi^>S&;bQ&!Q_w%gjP5 z$n=F3WZRUuEBmHbki9Ou>hzv@_=zH9$&1U2%F=F)?UDO#UgM#4ewcH|e8j~SpS7L=`c0GqCYZk52oO%)0z}Yo-$ync#DFNLQI*P|#$Q9?^9XHo4eZ778 zCI3vx=^&r@NxNM)b#!@qcWFZLy7W=a54FBk9(!}bCM(yMcdlKrHJLNG$#uoilRop? zjoLa#-E!ethmJ3Vrw`WC9PcxKe&Y9s);?&m*=ufG%-w;1u41&@$`=h z@fqPjd@$_atYvdJlYyt-GawuyC8Qo4X1oXYVQ?s-oCip<(JcDXrQ_{s0xf*7QGMNBzQ!i524bSfK=ZSe1~APXlaghBWUAHYi#Lq8m_01 zeKb4^5D_u4DFJ=uG#5i2F@ZxS^#CHIDIVAm9K`}_!1OT4Yfjog$`;_57YQi~NXY=l z3eKV=LSADm5156JlEE<;*bJIB{RA>f77gUd$VAa#2(87d zKyN2ATOe#JMt*|C$WMegpEM-#;wdCb4#Fd&95p;Q$lXX&`$!JBFB5Wu%OgX1Eg>bZ zLovxFUR%(sSUg5XipXwW5S+LeLsO&RkXc7a)o;jQIx)WRCQ!CM)sP8?RCpsUuPvhh z{TriC1=Ex*JfR0(h=S=3c`x;;-b^2O&!r!ny2HF=po#hc{+djevrLLnDwk1%zpIaj z*5LHe3#J%!sXa|$`+OnQgQki|I^UOPOXATLLmTGs+kn-N)2IIA2l5=rUVW;bpfmW* zJNi_zAQFyznK$OjEfd7^T!|y9G*H1d$jNSfYQF$eL*Q^Aa{Y(E7gF_`ahSISzC1aJ z)u-M7W?k|#O^qTZLSIPX`@2}qmZpBzr|Jk>Lf!|ODk6=AzPx(G7KatGkE95dyaptk zriw@glxs-NwZ*&4RKD9!81X39txV#nOQ#?;{N}t*&zR1Jw;*n!8axes5 ztOkp^1fhWZ1)-2Uf>1=>KnUY2j2{vLuTulQ3k?U-a1{+NL&%UjG#+J!IFle`2p2y> zAtxy0ER8pXi3USjK*%HiQ}HPpkyXDe_v)f&TM2pP&1#~Y8xY!EK9`HN`4Ztv6Z z84ce-sDuL-2sfdjjD}7$tV2T&8v4+%H4OtHyvB=$@D?utLSLeU@IH7KjLWF6@F2}i zpYjIq+M2$Gu!E_BsxZW`wBFn$8! zvv_YzU71qahd+?MrUujE-E2N(M^*p7tIUGkp3X2F*b7D|d zr97R~0x%1t3gC0RbPAljTqTX-hXI{RTy!r@r$X!H+K)jSU!|EXaFQ%>OaegUT0+>FuE+6u{)j7ToK{`GZ{)|B>Z6Oz}n)9DA zcdf4Qd3+78jBmm>lih>RNA`s8M1o~oAdHbA*l!i2sL$Lb#r1Ym)?_i;Yew zq4O&VtTXJu(>cRjP72#K(;*e2!qK92+c?ygbIq&i-yS*-k;nPhEbZolWl_EnBU1SG+YIr8M{eV35p;@ zIGi)){l-`_HjD$)iHT$eGR4el<|7=TYRM1gtN5?^-35t){({SbzXk6Ft%YI29>NTm zHS@r8jvXfBVCx1vQ567ez!y~P`O45<$up9dqL5PV|;8a9Fw_}w29vdfI{TnLK? zNny^D3wOaV^q9uKHjuzInBm8xUmN%wwvA?2$1|P*8%mF+#H-hU9}@eVUL*eJunD|l zxJ;x!EYJ{qduON+<6R+6e{H*IQgSj>?MO#hx~kYHSi$PJ?mcc7ERD>HIbv3c1l5}A~)O4jM&-qj9JQw9tZXiQ9Ea9~7iVq{ckL}E|~1%yS!2Zo1* zB*G#d^9{+^&~8!Tfw7?^T&>jw!E3Bh>SR1Rj?thToet^_?x#xbk7@5@od(WXtFx3D z>cJ|~omJ~p;hHoOmZejHRJ=Q}TsQOxS0|C`i5O^(R;SF;X}MydEDNLzVhhuPeAFo< zFt)Z?w2N~;C!(VwsA82#1$RVs;Wp zjwI@`btEw(3B{6_oD`U&)97n3Br7XOOw#Fjz!=8{fv7Qpo{7XXHkB%PF6pLJXMvV= zRA;CNRFaB!kZl&|6zB=JheI;+Xu}iZv?><*+i<8D&XpU-y(2SJAxVUWRU}AqB{dQ{ z5QGuPrhzG-X(Wbglqn=J%pm3-D1M5gO;o6|v>G-lBPWdlh_b5B5X;91;U6i)Wo7>> z8XU@3sBjt>q8XI+6+WsE{*gjl_CJ=7%l=Af>T3d%2jr+(RmxXLRKuy%IF7MwbYZAw zwC}P~H6%%w6{AW6>r}Cc!Qce?>s8knKQJXFLNy4BkYG?v)}Z9nL}N9mjj`}H2kVm< ziv;uv5v<9~)?`5!gBMkS9f1<)K)rxSvLQ!Hkdy{IO_h~Z79-)xBq*1Wl%cm04&ck( znsYZF;|6eC=y@@?93Su%nw)I(FouW^xQ1Nnj&!-Y&`c$GZd#W=fiz_^Sr?I$nFOp- zKxVcwD-WX)%1jmB6^aP1grAW^^Z7z64U(wx`G#0GWfqt{OIZEuH;^_UcY=*ibT`x+ z6aA|;Vc1m$WIc?esdR~-6GWIHUuzUM7%BHA1mWI8n46I?0zgaBy7- z@BV~QXPc~|);NLjuoQzRV^paboaZ8eTCFNGDI*U( zo8H?7>cC+q<-o9N$owKhFSQu%Z6$C0@S#w#1J&@#6zP5*>LhiBT4&Tu7@0sG;mSNsj*(QjbXRzb47><>DQ*<492vp) z8Ae8NB2T87parc-5V3AjvZ9l;uCFm*-fS71&+ z&?*%$!YAugDPdVDs$9;e8bCyabC+O{8PN~7P!OhOhN%Mju@IP#Xwty+!4`?4pJouL z8o{d^DG63)S5JXYrxO{X)>ckfa6rbt$pcmc>K&zHNl%z}j0!pqpJy4I9%v`DAA#^{ z*S|G|;e^Jbm-`PUFJG4auS{EvOLOBq&S<{EH;15~uzXqazc5uXE?j+*qSt}2NSIoK zCWYq0d;}Lr87i;=l`@kALkPXBPT?kksM_!zD64}zE+@FOCfksNk&?hj$7v(#CD*A` z#X+fKHG0#+EbLEes+3?(c9as9J0VG+!}?h-iG=aVFptg51ZAhHZiIl?#u+qD>FVJ@ zs(#9WYFLtl=Bkom#6fKaRWY~=04J-c^Q9nKQjZy-$%@WVv9O@X%+}?Rs_8a|l$ESW z0X3w>0u{kwVdykKV03225-=kb&dg|j1o#OorO)HmS1=zVDRd5oWWu=V7#aXh`}NZ` zy0FyyUyO78h^C0Cj;tnA4?!cLGrrGfC5jv^$S{TT$0SUVlZ~co4+04gAKc6618 zV^^k1uMbfwHWe0t`c!BZ42zYD07F8GDnyfsLj#>K0Q<0n09I2lr^Y0YZm1V2S!5mS=s@JlIb*rEtx;hpsAbDhsJI8k~h z(+v%UejA6Xg(5F2xgV>^0x5s)MXE;o%GEY@2>J+)9~Ui59x{>J%BPsGsrMj(s^_x+Gk2t35Pu%&QD?2Dq+#5$r=coQUoj#ln2LK8sTOL z-1zX>-WXlb!{6r9e_Q}}OupPetJ>?T{P=*@s0?hxb%d9t)o`9f4zEsYAPj?-sMQcx z13Ux5!7$p&Yj{218=&qa6kfMxp&ScOzX|M|ljK;^?<*zbBpm1^0j?6RJSeXwS_reC zypE>6tT_dqntxGG4$?`6T3|vz>oQPC1xh&pEnTMY89($^a00dnP>?dLR8fF?S%D(8xNi4v<(zZF$( zTn=r;wqYM|yrC9wmSNBhZlFNdiw+oNT|;~0zD`pKnxKO=b6@O8gL+aSu7SRl1HFHw zn)o%U*fI^!XcIP}MUdJ0m_0$$K=4LttK76u#mGEhJ- zkO%GgFVF}z(5NmY^arS=ND2K9w#hKTsG%*sI9aLc4LFtr_{M&whBA#lFB1l1Kn-}^ z;;3Y}>49N##CdsxJs6-Nz$<>42=-Gc?=?`fsM1@QD8bpnj&MXU9R3lra2SC)!5_(r zg;RkYNep<#P(oT8tQFmcy|RWupaoaUPrVhlCHOwtSESIOeAJ4xi5?KJTqY z@ST=MAOl{VFKdghRtxFs37>oW9IFS^hEn}}+K8is0<<(4{-HP0f}L|CH&P*X!7yp; z4QP$2cNHKDY<=r<7-1)7@!rO@A_XC#fj#KHc<5vLkn(=YMR zx(r{P;wa;oq^CxpQ#pK>Ee2?GgIFlY0PEmp-`&A$g;I~jNdijSbO$OKR0=qz zG=?(7#4y4Tu>xv~07wLFl?pzMhBFszA9{QEbZ2eDOop2mMo>LK?PbAJh5{xxKg76U zTp;bgCS&X|1Gk)34+1Ia=&TJTr|+ZoRkYBze2to+$3CY@n#O@Y3L$|YuTUs&oR88C zrE=t29stKjc{YuxTnsXxFeeUHT^cl}K~)aw-qjtfIhd%3vqLK)S1uy57Np7DB4MtU**Oqls%R(&NH?%ZoZ2YpuhQWQrY86 zy+)a$w&3g*#|oT9rh@%tfMsNWmU1Hvw@M%u;eg9|KR8`%lxj{$6V&`8LDOb(igUP!NfMrD2ATbD_IlLfk8-4_$tmk``Gz}aaK)Rs%2tPPHzXmiUTa z3||9G1fQk=|HpYxoUd{+Mvd{NnCLrE1GxDLsaLa}R@2hL|2<#)`8=z}v7iB*2BZF( z^FCF++Sm_~$S}}m^hGh$8(}IIe0p_nl(^BdW)9`RO$?Mr4&|UX36=N=Q$WuVkLr}Gk4)8C8~E>He(4+a zW5S{}_JceV9K)su9Vw{yvUM7f{5H6Eyp!LJ9~qG|Ba#U4Z?p>VkF*KsAFh*2c-D5- zPS!5^e|4X22ghQW>j*fhh zb$z}_CV{&XTynVV;Hm?c3tS#>){@7Fr1k$D4Y93hn%(n%PiuicbGVvdGo7t{xSKzB zYt7vPxLY813kB>jloSJzZg54z6$e)WTz%kD!f9FSJ{TzB-7B88Qu1^A#6sD5(>4fG z2_%>cff5516mUkkGp3v&r54K>###;nmJ{nt5V^G+L=GWMNUSpfj~&SLm_BXB4+6^n#ISpzBK;w<37AzRQZ9zz9ZA;dm$DiAXg2BiQ$l!z2mSt=0=p`lO(s3H}Ll&t-#h z)EV%&RILA^GrqdRFwV}DgIUmVJP^bz)Q3LSeHZ~$1gtX7Qc!U*<7`bCmK80Mz$ZDO z3km7LBVD_xlUa>cldAJJJoC&+QER-pCu6{d{wWw7G*YL*1H4Lr0-g+IsPIw0{^6X4 z6}RF(G!5DTRXbCGFSRaO3hc>>N}w{F^A7rKp;;RQWYaR;iRp zJ}r_#*r@o#fk&(>k9f)VmdfSLn>B;a!8`GYZB38M;B6|XjuwT81W6EAd=)g7vF{F# zwBf;L z+z(DP} za1ogei)?HeZpP^V=S!HJl!C*N!<+UfC2-uZU5va%>dT>YkvD^UF@@Vsfo~G{CV_7f f_$GmG68I*8ZxZ+>fo~G{CV_7f_$Gn>MG5>r>0h&_ literal 0 HcmV?d00001 diff --git a/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/bin/Debug/FingerPrintReader_CS.pdb b/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/bin/Debug/FingerPrintReader_CS.pdb new file mode 100644 index 0000000000000000000000000000000000000000..b70cd120da955d79d0a9626627b6f788bfddd550 GIT binary patch literal 50688 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 D@t44! literal 0 HcmV?d00001 diff --git a/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/bin/Debug/FingerPrintReader_CS.vshost.exe b/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/bin/Debug/FingerPrintReader_CS.vshost.exe new file mode 100644 index 0000000000000000000000000000000000000000..ce3f102c36be07551ba7c7fad64c8b24709bdb91 GIT binary patch literal 5632 zcmeHLX>3&26+Umg;MiccvX$*QEU{T$9osBr9ou8T!CO4GX{f1rGjlzDVoO|!Prgq~qltDz9r~?B;$Ix=|OT07mVmN>1Z}RE2drlP`Q)*5X zG<6uR8guNZqj#!d-Lh;?4GGnWTdHBHf%>4@X-9-MYENnj=gbf*dm1jLN#cftptQL=|aWNfvWlQP?*hWf2t+?Lo}%k$q{6hp9nL zgjRO$01v%$;r&I$YdXI8&)FG$2N&cn{PM~EIUlboSblZ6|HQ<{cD(w-H$Pi{GB!Q7 z|H6B@KUnhF)GHNJoBn(6mQTf)Ia@0-J4*9+&;GPbIdCa>RcoH#{Qln`m|0=hKQWNC z!#y@@!#j(1Un%|Q)aTD`kDfW+w4v>(rqa#M$bmyo{cgLmeRW{M$FpYm3da-W&f8x& z0nLKxvau(Eo?AGHIeD_NCo>0YuLwR+p^ze1#Ifrt(TcT2#Y;+-Fe_7rvIeo7wS(yA zX#bP}I_Nou6?Iv{Lq2$0&05=B9YEWMekRLTn0AN-P|#J@A{QJ}x~7y8++mAT5@Rw| z@Q22sG9U6Nxk<0GsfFs1h&|K+JVrkSo|br>`a#cB7|RvrMHFKBr(Uw zl5-@k@UiBtzD8d*9q>KoTQAp`O~3WAt@psmrLqha^n)4xjBMH^@f9F@n1~ujPf^Cu z1X8hoxc8RIqmNGBB-e08_V!a4+g72m#M~*saoB2`Xc84k`hJPumRK&aTH=EeACjm` zG$d}7*dy^#;3Rrn;NPL;}jK9&ZX=lbcdYSfRoToq2>!3ASPn#8u z^5_H5<0%vLR4N9}qQ$`Zh^$7XR0mux@nJd(I!OC~-=*IJ!;-UI&T=Kai#`PZNxBT& zOIH;?y#RZey+d~b$L>D*2U4BLHo7PZt&wf=(v$RGXdorBqSlVYO|go)+z#9IG|?@n z%JQ6^2HUVasx`un?b_|0)?&DE-3)s1h+%8%Ad2nU;Mif|y42~0ZO1f16zp+5(Mk28 zEh6lZ7WQn1YIVa(4rq;W%QHHKR%v&}3{yBk;dB{LLCFE;>z)xZOvCFb_i!dcaZe1+ z7VReV8n#8{t}8l2X3u)jvj&QWL{kF+Vd_0WBWeu|C7jb5g=@zhHd-g*o}-(Cj2hjF z#`S2LwxI3_6TXN_8!^$tUW;&C*dJ1wvR7@j+fFBZw=LZqR*HQcc5v8%N;}r$7|{;z zRXI0nx6BteC@kn? zx7}3wC`~t$^_JixeXZ}r;oYm_b%)++Tlw0>+HX%C`+@-Ake_bp%{*%iWKZ&%~jNE(TX9o*6g%-Rh7EHhP*OlHTd*KJ4?D*a4-;jvD#}$T zOIQn=@p>DHr7y*I8$Y743XSBB{D^C1B}AnPX@5AP4(=bd(sp9DBln=DmYb$353H*? z$g9&OB6vF%DKvX%LSbW(nz&Qd#HFe-r=+-e5z#jlnlL1prkZH9Lb+*IH9O7$Qj&K* zi1dqo@D0qF`iTGURq zl$y==AvIxC2iL{8P9EfJ^b+N0<`}+a;gbg`1N`W1H1*>kDp+;uS4JU@0csxjmC)CT zpTKMnR`9n2umfBdeGU9>R4z4m@TcTs(x)CoK$mlQycQmW;RnyOu?i1|k+nM%lbG(k zU)oNsIsglXDI;B4QqNAHkZxdK@%Jm&3M+mh+d;;>sRJgjdxC zjKDHcB4+hTNzOL=or(eXIE%yQ&!joDM74@5pgblnV%bN-JGR6=O_ohmcu4Tp%XjSM5Nh|8#A5K!MWx={dKuZ TBcLY!&!}P9UAq3eeA)j4ZC9R* literal 0 HcmV?d00001 diff --git a/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/bin/Debug/GrFingerSample.mdb b/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/bin/Debug/GrFingerSample.mdb new file mode 100644 index 0000000000000000000000000000000000000000..2e62feff79c6e935eb5f6e49bb23daf07f0483cf GIT binary patch literal 147456 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 Iw_FDP17OSVxc~qF literal 0 HcmV?d00001 diff --git a/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/obj/Debug/AxInterop.GrFingerXLib.dll b/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/obj/Debug/AxInterop.GrFingerXLib.dll new file mode 100644 index 0000000000000000000000000000000000000000..c89f63235dcf03703b1b92190a04797bcb6a5e4b GIT binary patch literal 11776 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 + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Module Resources + + Private _resMgr As System.Resources.ResourceManager + + Private _resCulture As System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As System.Resources.ResourceManager + Get + If (_resMgr Is Nothing) Then + Dim temp As System.Resources.ResourceManager = New System.Resources.ResourceManager("IRChat.Resources", GetType(Resources).Assembly) + _resMgr = temp + End If + Return _resMgr + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As System.Globalization.CultureInfo + Get + Return _resCulture + End Get + Set + _resCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Chapter04(Infrared)/IRChat/IRChat/My Project/Resources.resx b/Chapter04(Infrared)/IRChat/IRChat/My Project/Resources.resx new file mode 100644 index 0000000..3e18af9 --- /dev/null +++ b/Chapter04(Infrared)/IRChat/IRChat/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter04(Infrared)/IRChat/IRChat/bin/Debug/IRChat.exe b/Chapter04(Infrared)/IRChat/IRChat/bin/Debug/IRChat.exe new file mode 100644 index 0000000000000000000000000000000000000000..4382dfff7b16e11ed62e22f7fe41729fa601fae0 GIT binary patch literal 15360 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 RAK-->CE(n*um67*_%B{5k-Go@ literal 0 HcmV?d00001 diff --git a/Chapter04(Infrared)/IRChat/IRChat/bin/Debug/IRChat.pdb b/Chapter04(Infrared)/IRChat/IRChat/bin/Debug/IRChat.pdb new file mode 100644 index 0000000000000000000000000000000000000000..a78e2dd1c9151e3c551e98dd237944ca981a02dc GIT binary patch literal 48640 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 + + + +IRChat + + + + + + Returns the cached ResourceManager instance used by this class. + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + \ No newline at end of file diff --git a/Chapter04(Infrared)/IRChat/IRChat/obj/Debug/IRChat.Form1.resources b/Chapter04(Infrared)/IRChat/IRChat/obj/Debug/IRChat.Form1.resources new file mode 100644 index 0000000000000000000000000000000000000000..06c24d06c1cab750788146ce052b37770f3fa530 GIT binary patch literal 180 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 RAK-->CE(n*um67*_%B{5k-Go@ literal 0 HcmV?d00001 diff --git a/Chapter04(Infrared)/IRChat/IRChat/obj/Debug/IRChat.pdb b/Chapter04(Infrared)/IRChat/IRChat/obj/Debug/IRChat.pdb new file mode 100644 index 0000000000000000000000000000000000000000..a78e2dd1c9151e3c551e98dd237944ca981a02dc GIT binary patch literal 48640 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 + + + +IRChat + + + + + + Returns the cached ResourceManager instance used by this class. + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + \ No newline at end of file diff --git a/Chapter04(Infrared)/IRChat/IRChat/obj/Debug/ResolveAssemblyReference.cache b/Chapter04(Infrared)/IRChat/IRChat/obj/Debug/ResolveAssemblyReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..f561cc0b201d8831bb539dae75710387baeddce2 GIT binary patch literal 4128 zcmdT{Z)_Ar6yLqxzdep#`KO>oPeDJ(dE54^0@|2zZDWJf+QXvZ;%4r4?pV6Fi!*yI z2O>>0gv7-70pbVzL!y2#CTij*qmmdSD2XXzqF58F1cQktO8j8N5BT2P+;InuB1(gM znYZuF?#}Q1X6C&&r>KgeoP!JRctw369^PQ(nakaRmt0r2Y%{r$@G+i zcHl1&PnT`4%xI58%N`?kB0gNs*;al%t!#A1sMC|{NENyZcNIE2&F&78A_0WCY1Yw` znF{x4DdQ23;#*q5vZ=6I+N+O}Y1g)C-UAPK@;<`1cqC_2^jB*E;Yab8uZG}-$o(!c z2T0y?SxC|er`^&v!YFIQLDQ~DhnYKWnUsaGBV+BLeqh9dqr@&#t|%=nN+2*VJR89qV-}^O=|mSegTJl&s_zM8fj z#5rPfgxAN&gyj^Ih#Lmn?Q?`Hi6;kKR^kF(19Uz|=tI;?4zj*p1a8B{7ONfsMH8DK zirRb-0qk2@^5`EeK1(HpRk~0mn5J;7bvF8Hf=HUJHf)0N0P}_c!Z|yD(s2EJTcYp^BYX zMa_yDvZxI@1y?h$9IPXph7DOQS`EzNy>`)Mmbay}wAqA|l6D=Bx%NT>cAx7M5e}-y zFtON@+881ydsfb}Ew2(Z25eH~F)`5j@6}L9QCq|n^7+E8a>}F^-O>cGf>kUtf>p7$ zsUf~=YNg59%lm4D#A=A1i>Tdmss2d+n`U4ZfW|-;)8h+Xhr6c=qg@YrWH)xSgJ5`6 zSgY%Ldad46C-r(xyRc5`jdfCoI;me+Cv_;1I@U?OUMF=)5)!wz9B}<7;ox+6bBZUN z&^Vqa3_}U~Cly8g4hF*k;fWIQe+$~bn$%_lwEQzL=B3Pa^QQ~IjHsBeM2fr_l-g#L zIZIoCE{o+@3EGZ1UXF%igmw$ytJA;}XVO0j##hpS2SDQlSU9yvQT-B>8E938m>LDc z+dx??m%1rEYO8Pz!7~Bcq&mk$o1DSpgLXT(p&kbcb-JHP10Dd~V_?<-~n*_7_2(SBVf!x6X%E+ zrip{ldYq10#s#9_*1!ZzrC;RQSE${&?cX_om)H{=o9zo_r!TG`{B{=h^8W z#-HB5@3~*Y^wvEm4!yhkgP|XPo_cNSkKcEV=!dtzs&um=4t(*=>96N+ zj{V}@9ew@mGpGHSPHIslQzW>i1dR=3tIObKId~KQ#x!FD&i8l>gEy2gT;eE(hP+}J pkO!e%^~6;SSR{WD1&pSpKhrB>Rv@exN`Ocl$ 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 Rh5s{r@#YV13O>k@{~JA8j=%r_ literal 0 HcmV?d00001 diff --git a/Chapter04(Infrared)/IRChat/IRChat/obj/IRChat.vbproj.FileList.txt b/Chapter04(Infrared)/IRChat/IRChat/obj/IRChat.vbproj.FileList.txt new file mode 100644 index 0000000..94bb0cf --- /dev/null +++ b/Chapter04(Infrared)/IRChat/IRChat/obj/IRChat.vbproj.FileList.txt @@ -0,0 +1,10 @@ +bin\Debug\IRChat.exe +bin\Debug\IRChat.pdb +bin\Debug\IRChat.xml +obj\Debug\ResolveAssemblyReference.cache +obj\Debug\IRChat.Form1.resources +obj\Debug\IRChat.Resources.resources +obj\Debug\IRChat.vbproj.GenerateResource.Cache +obj\Debug\IRChat.exe +obj\Debug\IRChat.xml +obj\Debug\IRChat.pdb diff --git a/Chapter04(Infrared)/IRChat_CS/IRChat_CS.sln b/Chapter04(Infrared)/IRChat_CS/IRChat_CS.sln new file mode 100644 index 0000000..9281439 --- /dev/null +++ b/Chapter04(Infrared)/IRChat_CS/IRChat_CS.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IRChat_CS", "IRChat_CS\IRChat_CS.csproj", "{F1DDCE7E-8B91-41CF-9DC1-532BF1332AA6}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {F1DDCE7E-8B91-41CF-9DC1-532BF1332AA6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F1DDCE7E-8B91-41CF-9DC1-532BF1332AA6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F1DDCE7E-8B91-41CF-9DC1-532BF1332AA6}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {F1DDCE7E-8B91-41CF-9DC1-532BF1332AA6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F1DDCE7E-8B91-41CF-9DC1-532BF1332AA6}.Release|Any CPU.Build.0 = Release|Any CPU + {F1DDCE7E-8B91-41CF-9DC1-532BF1332AA6}.Release|Any CPU.Deploy.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Chapter04(Infrared)/IRChat_CS/IRChat_CS.suo b/Chapter04(Infrared)/IRChat_CS/IRChat_CS.suo new file mode 100644 index 0000000000000000000000000000000000000000..12f7c8a766082d74de821d21e2511694a6791454 GIT binary patch literal 17408 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 cd=)dDpZ@=!9XGyo|L^8|3cL8$ZJ|c|Ke6Zr8vp + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.mnuSend = new System.Windows.Forms.MenuItem(); + this.mainMenu1 = new System.Windows.Forms.MainMenu(); + this.StatusBar1 = new System.Windows.Forms.StatusBar(); + this.txtMessage = new System.Windows.Forms.TextBox(); + this.txtMessagesArchive = new System.Windows.Forms.TextBox(); + this.SuspendLayout(); + // + // mnuSend + // + this.mnuSend.Text = "Send"; + this.mnuSend.Click += new System.EventHandler(this.mnuSend_Click); + // + // mainMenu1 + // + this.mainMenu1.MenuItems.Add(this.mnuSend); + // + // StatusBar1 + // + this.StatusBar1.Location = new System.Drawing.Point(0, 246); + this.StatusBar1.Name = "StatusBar1"; + this.StatusBar1.Size = new System.Drawing.Size(240, 22); + this.StatusBar1.Text = "StatusBar1"; + // + // txtMessage + // + this.txtMessage.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.txtMessage.Location = new System.Drawing.Point(3, 2); + this.txtMessage.Name = "txtMessage"; + this.txtMessage.Size = new System.Drawing.Size(234, 21); + this.txtMessage.TabIndex = 6; + // + // txtMessagesArchive + // + this.txtMessagesArchive.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.txtMessagesArchive.Location = new System.Drawing.Point(3, 29); + this.txtMessagesArchive.Multiline = true; + this.txtMessagesArchive.Name = "txtMessagesArchive"; + this.txtMessagesArchive.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.txtMessagesArchive.Size = new System.Drawing.Size(234, 210); + this.txtMessagesArchive.TabIndex = 7; + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; + this.AutoScroll = true; + this.ClientSize = new System.Drawing.Size(240, 268); + this.Controls.Add(this.StatusBar1); + this.Controls.Add(this.txtMessage); + this.Controls.Add(this.txtMessagesArchive); + this.Menu = this.mainMenu1; + this.Name = "Form1"; + this.Text = "Form1"; + this.Load += new System.EventHandler(this.Form1_Load); + this.ResumeLayout(false); + + } + + #endregion + + internal System.Windows.Forms.MenuItem mnuSend; + private System.Windows.Forms.MainMenu mainMenu1; + internal System.Windows.Forms.StatusBar StatusBar1; + internal System.Windows.Forms.TextBox txtMessage; + internal System.Windows.Forms.TextBox txtMessagesArchive; + } +} + diff --git a/Chapter04(Infrared)/IRChat_CS/IRChat_CS/Form1.cs b/Chapter04(Infrared)/IRChat_CS/IRChat_CS/Form1.cs new file mode 100644 index 0000000..2467a53 --- /dev/null +++ b/Chapter04(Infrared)/IRChat_CS/IRChat_CS/Form1.cs @@ -0,0 +1,159 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +using System.Net; +using System.IO; +using System.Net.Sockets; + +namespace IRChat_CS +{ + public partial class Form1 : Form + { + const int MAX_MESSAGE_SIZE = 1024; + const int MAX_TRIES = 3; + private string ServiceName = "default"; + + public Form1() + { + InitializeComponent(); + } + + private void SendMessage(int NumRetries, string str) + { + IrDAClient client = null; + int CurrentTries = 0; + do + { + try + { + client = new IrDAClient(ServiceName); + } + catch (Exception se) + { + if ((CurrentTries >= NumRetries)) + { + throw se; + } + } + CurrentTries = CurrentTries + 1; + } while (client == null & CurrentTries < NumRetries); + + if ((client == null)) + { + StatusBar1.BeginInvoke(new myDelegate(UpdateStatus), new object[] { "Error establishing contact" }); + + return; + } + + System.IO.Stream stream = null; + try + { + stream = client.GetStream(); + stream.Write(System.Text.ASCIIEncoding.ASCII.GetBytes(str), 0, str.Length); + StatusBar1.BeginInvoke(new myDelegate(UpdateStatus), new object[] { "Message sent!" }); + txtMessagesArchive.Text = str + "\r\n" + txtMessagesArchive.Text; + } + catch (Exception e) + { + StatusBar1.BeginInvoke(new myDelegate(UpdateStatus), new object[] { "Error sending message." }); + } + finally + { + if ((!(stream == null))) + { + stream.Close(); + } + if ((!(client == null))) + { + client.Close(); + } + } + } + + private string ReceiveMessage() + { + int bytesRead = 0; + IrDAListener listener = new IrDAListener(ServiceName); + IrDAClient client = null; + System.IO.Stream stream = null; + byte[] Buffer = new byte[MAX_MESSAGE_SIZE - 1]; + string str = string.Empty; + try + { + listener.Start(); + client = listener.AcceptIrDAClient(); + stream = client.GetStream(); + bytesRead = stream.Read(Buffer, 0, Buffer.Length); + str = ">" + System.Text.ASCIIEncoding.ASCII.GetString(Buffer, 0, bytesRead); + } + catch (SocketException ex) + { + } + catch (Exception e) + { + StatusBar1.BeginInvoke(new myDelegate(UpdateStatus), new object[] { e.ToString() }); + } + finally + { + if ((!(stream == null))) + { + stream.Close(); + } + if ((!(client == null))) + { + client.Close(); + } + listener.Stop(); + } + return str; + } + + public void ReceiveLoop() + { + string strReceived; + strReceived = ReceiveMessage(); + while (true) + { + if (strReceived != string.Empty) + { + txtMessagesArchive.BeginInvoke(new myDelegate(UpdateTextBox), new object[] { strReceived }); + } + strReceived = ReceiveMessage(); + } + } + + private delegate void myDelegate(string str); + + private void UpdateTextBox(string str) + { + txtMessagesArchive.Text = str + "\r\n" + txtMessagesArchive.Text; + } + + private void UpdateStatus(string str) + { + StatusBar1.Text = str; + } + + private void mnuSend_Click(object sender, EventArgs e) + { + mnuSend.Enabled = false; + SendMessage(MAX_TRIES, txtMessage.Text); + mnuSend.Enabled = true; + txtMessage.Text = string.Empty; + txtMessage.Focus(); + } + + private void Form1_Load(object sender, EventArgs e) + { + txtMessage.Focus(); + System.Threading.Thread t1; + t1 = new System.Threading.Thread(ReceiveLoop); + t1.Start(); + } + } +} \ No newline at end of file diff --git a/Chapter04(Infrared)/IRChat_CS/IRChat_CS/Form1.resx b/Chapter04(Infrared)/IRChat_CS/IRChat_CS/Form1.resx new file mode 100644 index 0000000..20d2efa --- /dev/null +++ b/Chapter04(Infrared)/IRChat_CS/IRChat_CS/Form1.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + Pocket_PC + + + True + + \ No newline at end of file diff --git a/Chapter04(Infrared)/IRChat_CS/IRChat_CS/IRChat_CS.csproj b/Chapter04(Infrared)/IRChat_CS/IRChat_CS/IRChat_CS.csproj new file mode 100644 index 0000000..dea4fac --- /dev/null +++ b/Chapter04(Infrared)/IRChat_CS/IRChat_CS/IRChat_CS.csproj @@ -0,0 +1,94 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {F1DDCE7E-8B91-41CF-9DC1-532BF1332AA6} + WinExe + Properties + IRChat_CS + IRChat_CS + {4D628B5B-2FBC-4AA6-8C16-197242AEB884};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + PocketPC + 4118C335-430C-497f-BE48-11C3316B135E + 5.01 + IRChat_CS + v2.0 + + + + + true + full + false + bin\Debug\ + DEBUG;TRACE;$(PlatformFamilyName) + true + true + prompt + 512 + 4 + Off + + + pdbonly + true + bin\Release\ + TRACE;$(PlatformFamilyName) + true + true + prompt + 512 + 4 + Off + + + + + + + + + + + + + Form + + + Form1.cs + + + + + Designer + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + + + + + + + + + + + \ No newline at end of file diff --git a/Chapter04(Infrared)/IRChat_CS/IRChat_CS/IRChat_CS.csproj.user b/Chapter04(Infrared)/IRChat_CS/IRChat_CS/IRChat_CS.csproj.user new file mode 100644 index 0000000..76bd09e --- /dev/null +++ b/Chapter04(Infrared)/IRChat_CS/IRChat_CS/IRChat_CS.csproj.user @@ -0,0 +1,5 @@ + + + 4118C335-430C-497f-BE48-11C3316B135Ed6518ffb-710f-11d3-99f2-00105a0df099 + + \ No newline at end of file diff --git a/Chapter04(Infrared)/IRChat_CS/IRChat_CS/Program.cs b/Chapter04(Infrared)/IRChat_CS/IRChat_CS/Program.cs new file mode 100644 index 0000000..818951a --- /dev/null +++ b/Chapter04(Infrared)/IRChat_CS/IRChat_CS/Program.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace IRChat_CS +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [MTAThread] + static void Main() + { + Application.Run(new Form1()); + } + } +} \ No newline at end of file diff --git a/Chapter04(Infrared)/IRChat_CS/IRChat_CS/Properties/AssemblyInfo.cs b/Chapter04(Infrared)/IRChat_CS/IRChat_CS/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..01d191a --- /dev/null +++ b/Chapter04(Infrared)/IRChat_CS/IRChat_CS/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("IRChat_CS")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("IRChat_CS")] +[assembly: AssemblyCopyright("Copyright © 2006")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("5deb4944-1f6c-4e73-8a7f-97112eff1bf8")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] + diff --git a/Chapter04(Infrared)/IRChat_CS/IRChat_CS/Properties/Resources.Designer.cs b/Chapter04(Infrared)/IRChat_CS/IRChat_CS/Properties/Resources.Designer.cs new file mode 100644 index 0000000..f823ad0 --- /dev/null +++ b/Chapter04(Infrared)/IRChat_CS/IRChat_CS/Properties/Resources.Designer.cs @@ -0,0 +1,68 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace IRChat_CS.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the Strongly Typed Resource Builder + // class via a tool like ResGen or Visual Studio.NET. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + class Resources + { + + private static System.Resources.ResourceManager _resMgr; + + private static System.Globalization.CultureInfo _resCulture; + + /*FamANDAssem*/ + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + public static System.Resources.ResourceManager ResourceManager + { + get + { + if ((_resMgr == null)) + { + System.Resources.ResourceManager temp = new System.Resources.ResourceManager("IRChat_CS.Properties.Resources", typeof(Resources).Assembly); + _resMgr = temp; + } + return _resMgr; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + public static System.Globalization.CultureInfo Culture + { + get + { + return _resCulture; + } + set + { + _resCulture = value; + } + } + } +} diff --git a/Chapter04(Infrared)/IRChat_CS/IRChat_CS/Properties/Resources.resx b/Chapter04(Infrared)/IRChat_CS/IRChat_CS/Properties/Resources.resx new file mode 100644 index 0000000..3e18af9 --- /dev/null +++ b/Chapter04(Infrared)/IRChat_CS/IRChat_CS/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter04(Infrared)/IRChat_CS/IRChat_CS/bin/Debug/IRChat_CS.exe b/Chapter04(Infrared)/IRChat_CS/IRChat_CS/bin/Debug/IRChat_CS.exe new file mode 100644 index 0000000000000000000000000000000000000000..78b249e3d2b8fe5eb3117e9693899c7f10120dc7 GIT binary patch literal 9216 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 literal 0 HcmV?d00001 diff --git a/Chapter04(Infrared)/IRChat_CS/IRChat_CS/bin/Debug/IRChat_CS.pdb b/Chapter04(Infrared)/IRChat_CS/IRChat_CS/bin/Debug/IRChat_CS.pdb new file mode 100644 index 0000000000000000000000000000000000000000..4f3f178c32a40af19584c6944672c50fe3da2a96 GIT binary patch literal 26112 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 literal 0 HcmV?d00001 diff --git a/Chapter04(Infrared)/IRChat_CS/IRChat_CS/obj/Debug/IRChat_CS.exe b/Chapter04(Infrared)/IRChat_CS/IRChat_CS/obj/Debug/IRChat_CS.exe new file mode 100644 index 0000000000000000000000000000000000000000..78b249e3d2b8fe5eb3117e9693899c7f10120dc7 GIT binary patch literal 9216 zcmeHMe{dZ2b${Qzy}i>(mVGB%vSJIbe{zzoLuXsq4v6UV!}ft>8=V}xt~>JSZY3?g zyFKsj84DtMP7Q-wLIN{kAQ`uTluX>DBuw4GBok6-n;~IHLo;nk8+$@a%9QC8+72{L zW^h06yL-~frlfx*(;2?fzJ2d~-}imrd*Ao{?%Tc5BcGuF5vjPYTp_xMJGXubKNwWe z-Mr=-&2*vR<+T^Z$jfWTXG}*g+t#$5E$X>!sbsnOq@mlDl5Uptq5T=XXyuK>k|mK1 zzUl+RL?a?V|Bz(NYd@i8(I~=1*MVlk(C)bzK*!aOi-C@tGT&VjBdU6QK)-t#5&k8R zcb{Yy+7{^D&qzPf8NOfLjuAD1_rOg=tFP|+AX+Da2lFiqdha|%lyHqxF6c9?6n)ZH z_*36>qGJi$v2$Qb+xmg9jE<|W^~3svZ4@jBvaNIs7t5`~RoD872I@$O9^<&8v26+k z>FaT#AIFFU=oTWa|9YY_6aUB7(xcF3$YMy80$UoDyOCY$^7q7M(H7CVo5^EXONb(v zF%WNNq>BPQD(z>Rxhc+4aObe}s^VbLB6C5BMj6#43KJu9p#>DNR+Ts`j$j5JXv2cC zwS0l0yr(t5A!h|xR;$NnwN@K&Z;Z7P=qBZEo}yKM7nV5fEd3Ern%Q*DSTxEKuz$7pZ0edu^R+X6SFS>J^JrGk>+Edy3fU1+`4I zujyE%mw9a#6tfjf*gNVbVa7@eSyJnjGwOfMj@SFcavlDpkp8m)37qv97~ddAuZ(Y$ z_cm*jyvwNQO;`h|D1N=<#^bno;k7#JIqcP94o~TGl)HJE;$3op{adg1;OE4Pj4p8_mx=a*mJKRVblAC)bWY>#Kw!SAMk%SIT8W;zE zGzUtxwokzp(V|7QR(lrqJQ3Bb8!*MDov$G5%a@R5^?+Q`5KrQ!T3Z2IRcjk=)^>nj zqVj9?D!nCF?U%sxaH|(8;y1D~88^C|Y*BxSO4zkvCA)pOlN#Wqbg_XNETk02eu1S~ zJ0**LjL5=UEIWsJSu4fhDxy3`C;p9+j4QyOTqlqXB-h{)?g&tnT9GI+{=1;6ae347 zCHfU~dpS8A*&xFo`^PhOC^KQ;{_oSjdU*rA z8fnfj#GKs#5zX4e^L2G8@x6@j_C=fm#E&w_M(G|f`I&>zG=;m@ksT0J{sBx<;%SVq zZUt~|1Bhr<7WD=+Zl)0I5QJ??2qN?VQzM&6>sm)jm5Ht!$w3xs@qIiq=Dh&f?|<*D z=dghE5UxUI)^UwuV$5)?ik&l@d2Gzc<_&v`UUYJnT`(uN=pQ$1$Fxd)TN6F}w?!YU z6x@n!^p%W?YiA2v^aGX2f|su{8>PO<9XqnUx!xO-yS8mNdUozwf9+(Il4}-? z+Uyy_#ep{84y1@Rpwpp5XSmM}Hq9H8S`hywzLzEWyr}cXdrjdno0R%q~)(;e{Nft%}DGqf!AsVpi z^mDO|P&x2g!oRDP~Y8%cUDaYaGp*)7=nP!~R$GdA}(GgH*a1uu7 z5x{2pKI(8dA&vk>CEOt4F2D%=iD1b~622+n8l_o@(1@}F@N3FBz&Df^0pF3ZA;6q< z681@WSi%z${;q`QCH#(rZwD>~rb)$qiBN|+2OBz7o_DXrCxG8gdGyBUQT41EqYHo< zy#T&OZ%8PDN6@<}$o#dyHM&*8I{+Q}90Jiw5$(T%5n7?KFLCWUJidpuU4U81`7~fF zJtk$o1iYDkD)Ada*M%ZlRzjs7`wL`K_-HD`{% zny*B;9h5ju2I9w414i(^Uq;)gkCuR1N>#Cp#vr)_Rdoy9UOfly?bW9M1-(jbSl0%z z0r*GofD2GUYynJ(9>5VmK@(y-^5O<%67aAxMF(^?6<*sFM$eDk57F| z>_#N+_o$D_U@{ubk!=Bb~F41BNksmf7A=bKW???^kN^rEC53FnnN z;N!CES@x0eDa8VHy-%G{Tu?oddWarX&LA^*51{S<{5#|VyayDEU;rCPp$MR$dVE0g z(~`e1N}&Vb1c-YD{f2~p5IRA};m@purvX>dS&2U+;bRg$F5!6zpO)}h37?nnyMXs& ztzX9)y(ZVK6C9nA67G^PCE;t7RCVg4kEtp87jQ;_A56 zdVXI$5BL>GHu#)p)vtrYV_&1cQlA0*d-XYL7yqfQBCJU8oV-=n118vFs^;oy&u zX`cwLg5>W7dF)q%mnkjoRbNLYKO1}#@P**R;J*Z!25I5#(7^hCCf=so#SPle$rSrE z5~et;Y2t*K(V9e7INCDt8qI2b$h}W$E5SLd>5yl5T532UzM^dh{<5Ew%wD7#RGjyLg zFCGqkT4cfbtau(Weri$rv9?4`*uH2d!e+Dj6jgUKj;R4_YNRYnBX~aRm zrfX&k=3U18Fd8*Vl{AVlDwZl4qm-vn3}+@4eI!X4H|tiMfvmlNC21VrWCpBLhKzmm!USxm@!pAI`9-J$1#eNg;~EGPPwSoCM!tFn&nj11af;-=RGf zGru5=<^Q96q%U@$Vl*;F83piwF@8qcuSZ2vnKVs#)^y0bXM#^9Z%b6vTD&=M@JLAq4U^~lr z49~ReWV)0$PStknKo-XU%g7_AfP;cEIe1mT=Jp2Hk*s~U^c%To*tG!2DJrg&$z==1 z5MH24{9*4#7^w=9Yf>Qdb4d=X%D<=yI^-rssWLH2j6x zS1FDe*c==acYeR_Gu%Yl9!k}s&2+}f9XDJY=HPqNBT4+D-cO+Pew=)^fkSymZjRJR3ZmEbm!WG~5|0Pe=;yfW<+{r|$S{ z8Ba{_RASuQB5WyByKSrJb86?07eoJ;qm$V}1)k?kJURw!JVzJr+^ahH0b$VSc*--a z?tCbh@rdxY5sZ1?2lxEP2M50o_#Y(d1Z6=`*Tcm_Lk3YRQJ!c;2DM5SR|W5E1Hf$5 zy|lt5JRoV5V~f8mO#`Ei@5jad!I&J)kVz+5s&O~ob!{rLo~3zkrZB#OcXrf7y~F6S zWxp!Ws)yPkXm}z1vxy-0yja#hRMDj?a3xb3tgSJ}EVxkg&Z$S7M#9 z>K}K&I`ln_qBU0iQ}lHN*`07m4*(5^H3~GN#X_N2^?W#1{T5^a6@T1$$c0%B_h!Ba zNr8BKs1dTyV+h2dF;@L91~qrAR?rUtEfi>m3QVN1g|X_(!4TjpVFLV{X!TWT)TIzy z!PrZoP#~6!B^4Dyy`D=y4GX`LR=Kp6p$v8k+R&RfCb#d}zP&p+bz`o3yRl-+SY{~mR4n__hPDj{xW4VWKL2 z1+CUw!~99`@Pou6KEKU2sNQeKpXguwuBzhP9HxWN*M#4e(>O=RKxc4I(IH$+)#rWv cd>`V!!U$kd`HNq*Zg2kzXa8`jUvmWh2a$SHf&c&j literal 0 HcmV?d00001 diff --git a/Chapter04(Infrared)/IRChat_CS/IRChat_CS/obj/Debug/IRChat_CS.pdb b/Chapter04(Infrared)/IRChat_CS/IRChat_CS/obj/Debug/IRChat_CS.pdb new file mode 100644 index 0000000000000000000000000000000000000000..4f3f178c32a40af19584c6944672c50fe3da2a96 GIT binary patch literal 26112 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 C=pr=$ literal 0 HcmV?d00001 diff --git a/Chapter04(Infrared)/IRChat_CS/IRChat_CS/obj/IRChat_CS.csproj.FileList.txt b/Chapter04(Infrared)/IRChat_CS/IRChat_CS/obj/IRChat_CS.csproj.FileList.txt new file mode 100644 index 0000000..804159d --- /dev/null +++ b/Chapter04(Infrared)/IRChat_CS/IRChat_CS/obj/IRChat_CS.csproj.FileList.txt @@ -0,0 +1,8 @@ +obj\Debug\ResolveAssemblyReference.cache +obj\Debug\IRChat_CS.Form1.resources +obj\Debug\IRChat_CS.Properties.Resources.resources +obj\Debug\IRChat_CS.csproj.GenerateResource.Cache +bin\Debug\IRChat_CS.exe +bin\Debug\IRChat_CS.pdb +obj\Debug\IRChat_CS.exe +obj\Debug\IRChat_CS.pdb diff --git a/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop.sln b/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop.sln new file mode 100644 index 0000000..3fba19f --- /dev/null +++ b/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "IRChat_Desktop", "IRChat_Desktop\IRChat_Desktop.vbproj", "{5789A2BB-AB1E-43DF-B426-E2873A3C4500}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {5789A2BB-AB1E-43DF-B426-E2873A3C4500}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5789A2BB-AB1E-43DF-B426-E2873A3C4500}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5789A2BB-AB1E-43DF-B426-E2873A3C4500}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5789A2BB-AB1E-43DF-B426-E2873A3C4500}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop.suo b/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop.suo new file mode 100644 index 0000000000000000000000000000000000000000..32323396e580839297cf194d7a4c7e5c420ecfd8 GIT binary patch literal 19456 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 h(3CW<*68e8W~yiv _ +Partial Class Form1 + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.txtMessage = New System.Windows.Forms.TextBox + Me.txtMessagesArchive = New System.Windows.Forms.TextBox + Me.btnSend = New System.Windows.Forms.Button + Me.StatusStrip1 = New System.Windows.Forms.StatusStrip + Me.ToolStripStatusLabel1 = New System.Windows.Forms.ToolStripStatusLabel + Me.StatusStrip1.SuspendLayout() + Me.SuspendLayout() + ' + 'txtMessage + ' + Me.txtMessage.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ + Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.txtMessage.Location = New System.Drawing.Point(9, 6) + Me.txtMessage.Name = "txtMessage" + Me.txtMessage.Size = New System.Drawing.Size(215, 20) + Me.txtMessage.TabIndex = 5 + ' + 'txtMessagesArchive + ' + Me.txtMessagesArchive.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ + Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.txtMessagesArchive.Location = New System.Drawing.Point(9, 32) + Me.txtMessagesArchive.Multiline = True + Me.txtMessagesArchive.Name = "txtMessagesArchive" + Me.txtMessagesArchive.ScrollBars = System.Windows.Forms.ScrollBars.Vertical + Me.txtMessagesArchive.Size = New System.Drawing.Size(215, 225) + Me.txtMessagesArchive.TabIndex = 6 + ' + 'btnSend + ' + Me.btnSend.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.btnSend.Location = New System.Drawing.Point(149, 263) + Me.btnSend.Name = "btnSend" + Me.btnSend.Size = New System.Drawing.Size(75, 23) + Me.btnSend.TabIndex = 8 + Me.btnSend.Text = "Send" + Me.btnSend.UseVisualStyleBackColor = True + ' + 'StatusStrip1 + ' + Me.StatusStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.ToolStripStatusLabel1}) + Me.StatusStrip1.Location = New System.Drawing.Point(0, 289) + Me.StatusStrip1.Name = "StatusStrip1" + Me.StatusStrip1.Size = New System.Drawing.Size(232, 22) + Me.StatusStrip1.TabIndex = 10 + Me.StatusStrip1.Text = "StatusStrip1" + ' + 'ToolStripStatusLabel1 + ' + Me.ToolStripStatusLabel1.Name = "ToolStripStatusLabel1" + Me.ToolStripStatusLabel1.Size = New System.Drawing.Size(111, 17) + Me.ToolStripStatusLabel1.Text = "ToolStripStatusLabel1" + ' + 'Form1 + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(232, 311) + Me.Controls.Add(Me.StatusStrip1) + Me.Controls.Add(Me.btnSend) + Me.Controls.Add(Me.txtMessage) + Me.Controls.Add(Me.txtMessagesArchive) + Me.Name = "Form1" + Me.Text = "Form1" + Me.StatusStrip1.ResumeLayout(False) + Me.StatusStrip1.PerformLayout() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents txtMessage As System.Windows.Forms.TextBox + Friend WithEvents txtMessagesArchive As System.Windows.Forms.TextBox + Friend WithEvents btnSend As System.Windows.Forms.Button + Friend WithEvents StatusStrip1 As System.Windows.Forms.StatusStrip + Friend WithEvents ToolStripStatusLabel1 As System.Windows.Forms.ToolStripStatusLabel + +End Class diff --git a/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/Form1.resx b/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/Form1.resx new file mode 100644 index 0000000..faac01d --- /dev/null +++ b/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/Form1.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/Form1.vb b/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/Form1.vb new file mode 100644 index 0000000..d7f09da --- /dev/null +++ b/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/Form1.vb @@ -0,0 +1,127 @@ +Imports System.Net +Imports System.IO +Imports System.Net.Sockets +Imports InTheHand.Net.Sockets + +Public Class Form1 + + '---define the constants--- + Const MAX_MESSAGE_SIZE As Integer = 1280 + Const MAX_TRIES As Integer = 3 + + Private ServiceName As String = "default" + + Private Sub btnSend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSend.Click + btnSend.Enabled = False + SendMessage(MAX_TRIES, txtMessage.Text) + btnSend.Enabled = True + txtMessage.Text = String.Empty + txtMessage.Focus() + End Sub + + Private Sub SendMessage(ByVal NumRetries As Integer, ByVal str As String) + Dim client As IrDAClient = Nothing + Dim CurrentTries As Integer = 0 + + '---try to establish a connection--- + Do + Try + client = New IrDAClient(ServiceName) + Catch se As Exception + If (CurrentTries >= NumRetries) Then + Throw se + End If + End Try + CurrentTries = CurrentTries + 1 + Loop While client Is Nothing And CurrentTries < NumRetries + + '---timeout occurred--- + If (client Is Nothing) Then + 'lblStatus.BeginInvoke( _ + txtMessagesArchive.BeginInvoke( _ + New myDelegate(AddressOf UpdateStatus), New Object() _ + {"Error establishing contact"}) + Return + End If + + '---send the message over a stream object--- + Dim stream As System.IO.Stream = Nothing + Try + stream = client.GetStream() + stream.Write(System.Text.ASCIIEncoding.ASCII.GetBytes(str), 0, str.Length) + '---update the status bar--- + txtMessagesArchive.BeginInvoke( _ + New myDelegate(AddressOf UpdateStatus), New Object() _ + {"Message sent!"}) + '---display the message that was sent--- + txtMessagesArchive.Text = str & vbCrLf & txtMessagesArchive.Text + Catch e As Exception + txtMessagesArchive.BeginInvoke( _ + New myDelegate(AddressOf UpdateStatus), New Object() _ + {"Error sending message."}) + Finally + If (Not stream Is Nothing) Then stream.Close() + If (Not client Is Nothing) Then client.Close() + End Try + End Sub + + Private Function ReceiveMessage() As String + Dim bytesRead As Integer = 0 + Dim listener As IrDAListener = New IrDAListener(ServiceName) + Dim client As IrDAClient = Nothing + Dim stream As System.IO.Stream = Nothing + Dim Buffer(MAX_MESSAGE_SIZE - 1) As Byte + Dim str As String = String.Empty + Try + listener.Start() + client = listener.AcceptIrDAClient() '---blocking call--- + stream = client.GetStream() + bytesRead = stream.Read(Buffer, 0, Buffer.Length) + '---display the received message--- + str = ">" & System.Text.ASCIIEncoding.ASCII.GetString(Buffer, 0, bytesRead) + Catch ex As SocketException + '---ignore error--- + Catch e As Exception + txtMessagesArchive.BeginInvoke( _ + New myDelegate(AddressOf UpdateStatus), New Object() _ + {e.ToString}) + Finally + If (Not stream Is Nothing) Then stream.Close() + If (Not client Is Nothing) Then client.Close() + listener.Stop() + End Try + Return str + End Function + + Public Sub ReceiveLoop() + Dim strReceived As String + strReceived = ReceiveMessage() + '---keep on listening for new message + While True + If strReceived <> String.Empty Then + txtMessagesArchive.BeginInvoke( _ + New myDelegate(AddressOf UpdateTextBox), New Object() {strReceived}) + End If + strReceived = ReceiveMessage() + End While + End Sub + + Private Delegate Sub myDelegate(ByVal str As String) + Private Sub UpdateTextBox(ByVal str As String) + '---delegate to update the textbox control + txtMessagesArchive.Text = str & vbCrLf & txtMessagesArchive.Text + End Sub + + Private Sub UpdateStatus(ByVal str As String) + '---delegate to update the statusbar control + ToolStripStatusLabel1.Text = str + End Sub + + Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load + txtMessage.Focus() + '---receive incoming messages as a separate thread--- + Dim t1 As System.Threading.Thread + t1 = New Threading.Thread(AddressOf ReceiveLoop) + t1.Start() + End Sub +End Class diff --git a/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/IRChat_Desktop.vbproj b/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/IRChat_Desktop.vbproj new file mode 100644 index 0000000..88b4d56 --- /dev/null +++ b/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/IRChat_Desktop.vbproj @@ -0,0 +1,110 @@ + + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {5789A2BB-AB1E-43DF-B426-E2873A3C4500} + WinExe + IRChat_Desktop.My.MyApplication + IRChat_Desktop + IRChat_Desktop + WindowsForms + + + true + full + true + true + bin\Debug\ + IRChat_Desktop.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + IRChat_Desktop.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + False + ..\..\..\..\..\..\Program Files\In The Hand Ltd\32feet.NET\Assemblies\XP2\InTheHand.Net.Personal.dll + + + + + + + + + + + + + + + + + + + + + Form + + + Form1.vb + Form + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + Designer + Form1.vb + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/IRChat_Desktop.vbproj.user b/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/IRChat_Desktop.vbproj.user new file mode 100644 index 0000000..6a34e7d --- /dev/null +++ b/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/IRChat_Desktop.vbproj.user @@ -0,0 +1,5 @@ + + + ShowAllFiles + + \ No newline at end of file diff --git a/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/My Project/Application.Designer.vb b/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/My Project/Application.Designer.vb new file mode 100644 index 0000000..05e11af --- /dev/null +++ b/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/My Project/Application.Designer.vb @@ -0,0 +1,38 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.42 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + 'NOTE: This file is auto-generated; do not modify it directly. To make changes, + ' or if you encounter build errors in this file, go to the Project Designer + ' (go to Project Properties or double-click the My Project node in + ' Solution Explorer), and make changes on the Application tab. + ' + Partial Friend Class MyApplication + + _ + Public Sub New() + MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) + Me.IsSingleInstance = false + Me.EnableVisualStyles = true + Me.SaveMySettingsOnExit = true + Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses + End Sub + + _ + Protected Overrides Sub OnCreateMainForm() + Me.MainForm = Global.IRChat_Desktop.Form1 + End Sub + End Class +End Namespace diff --git a/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/My Project/Application.myapp b/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/My Project/Application.myapp new file mode 100644 index 0000000..1243847 --- /dev/null +++ b/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/My Project/Application.myapp @@ -0,0 +1,11 @@ + + + true + Form1 + false + 0 + true + 0 + 0 + true + diff --git a/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/My Project/AssemblyInfo.vb b/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..922d594 --- /dev/null +++ b/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/My Project/Resources.Designer.vb b/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/My Project/Resources.Designer.vb new file mode 100644 index 0000000..7acb1ef --- /dev/null +++ b/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.42 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("IRChat_Desktop.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/My Project/Resources.resx b/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/My Project/Settings.Designer.vb b/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/My Project/Settings.Designer.vb new file mode 100644 index 0000000..b6016b5 --- /dev/null +++ b/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.42 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.IRChat_Desktop.My.MySettings + Get + Return Global.IRChat_Desktop.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/My Project/Settings.settings b/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/bin/Debug/IRChat_Desktop.exe b/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/bin/Debug/IRChat_Desktop.exe new file mode 100644 index 0000000000000000000000000000000000000000..3a3ec89d35852eadd0b7c4fa9c4884120f8f60e2 GIT binary patch literal 32768 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 literal 0 HcmV?d00001 diff --git a/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/bin/Debug/IRChat_Desktop.pdb b/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/bin/Debug/IRChat_Desktop.pdb new file mode 100644 index 0000000000000000000000000000000000000000..86f40e42c0ffc93f5eed4600561603f7ab473775 GIT binary patch literal 69120 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 literal 0 HcmV?d00001 diff --git a/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/bin/Debug/IRChat_Desktop.vshost.exe b/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/bin/Debug/IRChat_Desktop.vshost.exe new file mode 100644 index 0000000000000000000000000000000000000000..ce3f102c36be07551ba7c7fad64c8b24709bdb91 GIT binary patch literal 5632 zcmeHLX>3&26+Umg;MiccvX$*QEU{T$9osBr9ou8T!CO4GX{f1rGjlzDVoO|!Prgq~qltDz9r~?B;$Ix=|OT07mVmN>1Z}RE2drlP`Q)*5X zG<6uR8guNZqj#!d-Lh;?4GGnWTdHBHf%>4@X-9-MYENnj=gbf*dm1jLN#cftptQL=|aWNfvWlQP?*hWf2t+?Lo}%k$q{6hp9nL zgjRO$01v%$;r&I$YdXI8&)FG$2N&cn{PM~EIUlboSblZ6|HQ<{cD(w-H$Pi{GB!Q7 z|H6B@KUnhF)GHNJoBn(6mQTf)Ia@0-J4*9+&;GPbIdCa>RcoH#{Qln`m|0=hKQWNC z!#y@@!#j(1Un%|Q)aTD`kDfW+w4v>(rqa#M$bmyo{cgLmeRW{M$FpYm3da-W&f8x& z0nLKxvau(Eo?AGHIeD_NCo>0YuLwR+p^ze1#Ifrt(TcT2#Y;+-Fe_7rvIeo7wS(yA zX#bP}I_Nou6?Iv{Lq2$0&05=B9YEWMekRLTn0AN-P|#J@A{QJ}x~7y8++mAT5@Rw| z@Q22sG9U6Nxk<0GsfFs1h&|K+JVrkSo|br>`a#cB7|RvrMHFKBr(Uw zl5-@k@UiBtzD8d*9q>KoTQAp`O~3WAt@psmrLqha^n)4xjBMH^@f9F@n1~ujPf^Cu z1X8hoxc8RIqmNGBB-e08_V!a4+g72m#M~*saoB2`Xc84k`hJPumRK&aTH=EeACjm` zG$d}7*dy^#;3Rrn;NPL;}jK9&ZX=lbcdYSfRoToq2>!3ASPn#8u z^5_H5<0%vLR4N9}qQ$`Zh^$7XR0mux@nJd(I!OC~-=*IJ!;-UI&T=Kai#`PZNxBT& zOIH;?y#RZey+d~b$L>D*2U4BLHo7PZt&wf=(v$RGXdorBqSlVYO|go)+z#9IG|?@n z%JQ6^2HUVasx`un?b_|0)?&DE-3)s1h+%8%Ad2nU;Mif|y42~0ZO1f16zp+5(Mk28 zEh6lZ7WQn1YIVa(4rq;W%QHHKR%v&}3{yBk;dB{LLCFE;>z)xZOvCFb_i!dcaZe1+ z7VReV8n#8{t}8l2X3u)jvj&QWL{kF+Vd_0WBWeu|C7jb5g=@zhHd-g*o}-(Cj2hjF z#`S2LwxI3_6TXN_8!^$tUW;&C*dJ1wvR7@j+fFBZw=LZqR*HQcc5v8%N;}r$7|{;z zRXI0nx6BteC@kn? zx7}3wC`~t$^_JixeXZ}r;oYm_b%)++Tlw0>+HX%C`+@-Ake_bp%{*%iWKZ&%~jNE(TX9o*6g%-Rh7EHhP*OlHTd*KJ4?D*a4-;jvD#}$T zOIQn=@p>DHr7y*I8$Y743XSBB{D^C1B}AnPX@5AP4(=bd(sp9DBln=DmYb$353H*? z$g9&OB6vF%DKvX%LSbW(nz&Qd#HFe-r=+-e5z#jlnlL1prkZH9Lb+*IH9O7$Qj&K* zi1dqo@D0qF`iTGURq zl$y==AvIxC2iL{8P9EfJ^b+N0<`}+a;gbg`1N`W1H1*>kDp+;uS4JU@0csxjmC)CT zpTKMnR`9n2umfBdeGU9>R4z4m@TcTs(x)CoK$mlQycQmW;RnyOu?i1|k+nM%lbG(k zU)oNsIsglXDI;B4QqNAHkZxdK@%Jm&3M+mh+d;;>sRJgjdxC zjKDHcB4+hTNzOL=or(eXIE%yQ&!joDM74@5pgblnV%bN-JGR6=O_ohmcu4Tp%XjSM5Nh|8#A5K!MWx={dKuZ TBcLY!&!}P9UAq3eeA)j4ZC9R* literal 0 HcmV?d00001 diff --git a/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/bin/Debug/IRChat_Desktop.xml b/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/bin/Debug/IRChat_Desktop.xml new file mode 100644 index 0000000..a2a88e5 --- /dev/null +++ b/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/bin/Debug/IRChat_Desktop.xml @@ -0,0 +1,11 @@ + + + + +IRChat_Desktop + + + + + + \ No newline at end of file diff --git a/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/bin/Debug/InTheHand.Net.Personal.dll b/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/bin/Debug/InTheHand.Net.Personal.dll new file mode 100644 index 0000000000000000000000000000000000000000..e4e99f44d3140930f8162334fb5b2b119c3973e8 GIT binary patch literal 77824 zcmeEvcVJXi`u2Ov+__UyCX-AGfebB7DkXrSDP2&cmjDU`5+n!=Oah`I7!VN^5d>Ka zy4bN-6g#?zVgpvz#TBs^Y>Tda5r5D7o;xYH?&hEGug}pu_dMsk=RLijdpTpudNPQ} z#NV&K679f~fBgmjJJiEDG3W6_df4-7+a217SKE%CQ&k;a7>k}AE1w^pRlZS@{PlvJL3*Iy$)?79Rs z%0A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 l7y`!-IEKJ61dbta41r?^97Et30>= + + + InTheHand.Net.Personal + + + + + Defines configuration option names for the class when used with IrDA. + + + + + Returns a list of IrDA device IDs for IR capable devices within range. + + + + + Enables an application to set a single class in the local IAS. + The application specifies the class to set, the attribute, and attribute type. + + + + + Queries IAS on a given service and class name for its attributes. + + + + + Retrieves the maximum PDU length required to use . + + + + + Sets socket to bypass TinyTP layer to directly communicate with IrLMP. + + + + + Disables TinyTP mode and sends data directly over IrLMP frames. + + + + + Puts the IrDA socket into IrCOMM mode. + + + + + Enables the Sharp mode. + + + + + Summary description for WsaQuerySet. + + + + + Returns name of device if specified in query. + + + + + Identifies the services class in the form of a GUID. + + + + + This context varies depending upon the function. + + + + + Represents an IrDA device address. + + + + + Initializes a new instance of the class with the specified address. + + Address as 4 byte array. + address passed was not a 4 byte array. + + + + Initializes a new instance of the class with the specified address. + + representation of the address. + + + + Returns the IrDA address as an integer. + + + + + + Returns the internal byte array. + + + + + + Determines whether a string is a valid IrDA address. + + The string to validate. + The version of the string. + true if irdaString is a valid IrDA address; otherwise, false. + + + + Converts the string representation of an IrDA address to a new instance. + + A string containing an address to convert. + New instance. + Address must be specified in hex format optionally separated by the colon or period character e.g. 00000000, 00:00:00:00 or 00.00.00.00. + + + + Converts the address to its equivalent string representation. + + The string representation of this instance. + + + + Returns a representation of the value of this instance, according to the provided format specifier. + + A single format specifier that indicates how to format the value of this Guid. The format parameter can be "N", "C" or "P". If format is null or the empty string (""), "N" is used. + A representation of the value of this . + + SpecifierFormat of Return Value + N8 digits: XXXXXXXX + C8 digits separated by colons: XX:XX:XX:XX + P8 digits separated by periods: XX.XX.XX.XX + + + + + Compares two instances for equality. + + + + + + + Returns the hash code for this instance. + + + + + + Returns an indication whether the values of two specified objects are equal. + + + + + + + + Returns an indication whether the values of two specified objects are not equal. + + + + + + + + Provides a null IrDA address. + + + + + Dummy SDP record into which we can insert the Guid and channel + + + + + Register the service. For SAP, this means sending out a periodic broadcast. + This is an NOP for the DNS namespace. + For persistent data stores, this means updating the address information. + + + + + Remove the service from the registry. + For SAP, this means stop sending out the periodic broadcast. + This is an NOP for the DNS namespace. + For persistent data stores this means deleting address information. + + + + + Delete the service from dynamic name and persistent spaces. + For services represented by multiple CSADDR_INFO structures (using the SERVICE_MULTIPLE flag), only the specified address will be deleted, and this must match exactly the corresponding CSADDR_INFO structure that was specified when the service was registered + + + + + Stores version information for a Bluetooth device. + + + + + + + + + + + Version of the current Host Controller Interface (HCI) in the Bluetooth hardware. + + This value changes only when new versions of the Bluetooth hardware are created for the new Bluetooth Special Interest Group (SIG) specifications. + + + + Version of the current Link Manager Protocol (LMP) in the Bluetooth hardware. + + + + + Name of the Bluetooth hardware manufacturer. + + + + + + + + + + Specifies the status codes returned for an Object Exchange (OBEX) operation. + + OBEX codes are directly related to their HTTP equivalents - see . + + + + Applied to another code to indicate this is the only response or final response in a series. + + + + + Equivalent to HTTP status 100. + Continue indicates that the client can continue with its request. + + + + + Equivalent to HTTP status 200. + OK indicates that the request succeeded and that the requested information is in the response. + This is the most common status code to receive. + + + + + Equivalent to HTTP status 201. + Created indicates that the request resulted in a new resource created before the response was sent. + + + + + Equivalent to HTTP status 202. + Accepted indicates that the request has been accepted for further processing. + + + + + Equivalent to HTTP status 203. + NonAuthoritativeInformation indicates that the returned metainformation is from a cached copy instead of the origin server and therefore may be incorrect. + + + + + Equivalent to HTTP status 204. + NoContent indicates that the request has been successfully processed and that the response is intentionally blank. + + + + + Equivalent to HTTP status 205. + ResetContent indicates that the client should reset (not reload) the current resource. + + + + + Equivalent to HTTP status 206. + PartialContent indicates that the response is a partial response as requested by a GET request that includes a byte range. + + + + + Equivalent to HTTP status 300. + MultipleChoices indicates that the requested information has multiple representations. + + + + + Equivalent to HTTP status 301. + MovedPermanently indicates that the requested information has been moved to the URI specified in the Location header. + The default action when this status is received is to follow the Location header associated with the response. + + + + + Equivalent to HTTP status 302. + Redirect indicates that the requested information is located at the URI specified in the Location header. + The default action when this status is received is to follow the Location header associated with the response. + When the original request method was POST, the redirected request will use the GET method. + + + + + Equivalent to HTTP status 303. + SeeOther automatically redirects the client to the URI specified in the Location header as the result of a POST. The request to the resource specified by the Location header will be made with a GET. + + + + + Equivalent to HTTP status 304. + NotModified indicates that the client's cached copy is up to date. + The contents of the resource are not transferred. + + + + + Equivalent to HTTP status 305. + UseProxy indicates that the request should use the proxy server at the URI specified in the Location header. + + + + + Equivalent to HTTP status 400. + BadRequest indicates that the request could not be understood by the server. BadRequest is sent when no other error is applicable, or if the exact error is unknown or does not have its own error code. + + + + + Equivalent to HTTP status 401. + Unauthorized indicates that the requested resource requires authentication. The WWW-Authenticate header contains the details of how to perform the authentication. + + + + + Equivalent to HTTP status 402. + PaymentRequired is reserved for future use. + + + + + Equivalent to HTTP status 403. + Forbidden indicates that the server refuses to fulfill the request. + + + + + Equivalent to HTTP status 404. + NotFound indicates that the requested resource does not exist on the server. + + + + + Equivalent to HTTP status 405. + MethodNotAllowed indicates that the request method (POST or GET) is not allowed on the requested resource. + + + + + Equivalent to HTTP status 406. + NotAcceptable indicates that the client has indicated with Accept headers that it will not accept any of the available representations of the resource. + + + + + Equivalent to HTTP status 407. + ProxyAuthenticationRequired indicates that the requested proxy requires authentication. + The Proxy-authenticate header contains the details of how to perform the authentication. + + + + + Equivalent to HTTP status 408. + RequestTimeout indicates that the client did not send a request within the time the server was expecting the request. + + + + + Equivalent to HTTP status 409. + Conflict indicates that the request could not be carried out because of a conflict on the server. + + + + + Equivalent to HTTP status 410. + Gone indicates that the requested resource is no longer available. + + + + + Equivalent to HTTP status 411. + LengthRequired indicates that the required Content-length header is missing. + + + + + Equivalent to HTTP status 412. + PreconditionFailed indicates that a condition set for this request failed, and the request cannot be carried out. + Conditions are set with conditional request headers like If-Match, If-None-Match, or If-Unmodified-Since. + + + + + Equivalent to HTTP status 413. + RequestEntityTooLarge indicates that the request is too large for the server to process. + + + + + Equivalent to HTTP status 414. + RequestUriTooLong indicates that the URI is too long. + + + + + Equivalent to HTTP status 415. + UnsupportedMediaType indicates that the request is an unsupported type. + + + + + Equivalent to HTTP status 500. + InternalServerError indicates that a generic error has occurred on the server. + + + + + Equivalent to HTTP status 501. + NotImplemented indicates that the server does not support the requested function. + + + + + Equivalent to HTTP status 502. + BadGateway indicates that an intermediate proxy server received a bad response from another proxy or the origin server. + + + + + Equivalent to HTTP status 503. + ServiceUnavailable indicates that the server is temporarily unavailable, usually due to high load or maintenance. + + + + + Equivalent to HTTP status 504. + GatewayTimeout indicates that an intermediate proxy server timed out while waiting for a response from another proxy or the origin server. + + + + + Equivalent to HTTP status 505. + HttpVersionNotSupported indicates that the requested HTTP version is not supported by the server. + + + + + + + + + + + + + + + Standard Bluetooth Profile identifiers. + + + + + Represents an empty service Guid. + + + + + Represents the base Guid from which all standard Bluetooth profiles are derived - not used for connections. + + + + + + + + + + + + + + + + + + + + Provides a basic Serial emulation connect over Bluetooth. + + + + + Used to establish PPP connections over RFComm channels. + + + + + + + + + + + + + + + Used for sending binary objects between devices. + + + + + OBEX version of an FTP server + + + + + + + + + + Supports Bluetooth headset devices. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Supports hands free kits such as a car kits which provide audio and more advanced call control than the Headset profile. + + + + + + + + + + + + + + + + + + + + Used for printing simple text, HTML, vCard objects and similar. + + + + + + + + + + Supports human interface devices such as keyboards and mice. + + + + + + + + + + + + + + + + + + + + Common_ISDN_Access + + + + + + + + + + UDI_MT + + + + + UDI_TA + + + + + + + + + + SIM_Access + + + + + Phonebook Access - PCE + + + + + Phonebook Access - PSE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ESDP_UPNP_IP_PAN + + + + + ESDP_UPNP_IP_LAP + + + + + ESDP_UPNP_L2CAP + + + + + + + + + + + + + + + + + + + + Handles security between bluetooth devices. Current supported on devices only. + + + + + This function stores the personal identification number (PIN) for the Bluetooth device. + Not supported on Windows XP + + Address of remote device. + Pin, alphanumeric string of between 1 and 16 ASCII characters. + True on success, else False. + Not supported on Windows XP - use PairRequest + + + + This function revokes the personal identification number (PIN) for the Bluetooth device. + Not supported on Windows XP + + The remote device. + True on success, else False. + + + + Intiates pairing for a remote device. + + Remote device with which to pair. + Chosen PIN code, must be between 1 and 16 ASCII characters. + + + + + Remove the pairing with the specified device + + Remote device with which to remove pairing. + TRUE if device was successfully removed, else FALSE. + + + + Not supported on Windows XP + + + + + + + + Retrieves the address of the Bluetooth peer device authentication that requires the PIN code. + Not supported on Windows XP + + of the remote device, or null if there is no outstanding PIN request. + + + + Refuses an outstanding PIN request. + Not supported on Windows XP + + Address of the requesting device. + + + + Provides connection services for an infrared connection. + + Provides services for an infrared end point that includes making connections, obtaining data streams and discovering devices. + Infrared connections are made by specifying a service name, which can be any value provided the participating devices refer the same name. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class for a specified service. + + + + + + Initializes a new instance of the class for connecting to a specified endpoint. + + An . + + + + Obtains information about available devices. + + Returns a maximum of 8 devices, for more flexibility use the other overloads. + + + + Obtains information about a specified number of devices. + + The maximum number of devices to get information about. + + + + + Obtains information about available devices using a socket. + + The maximum number of devices to get information about. + + + + + + Gets the name of a device using a specified socket. + + A valid socket. + The name of the remote device. + + + + Connects a client to a specified endpoint. + + + + + + Connects a client to a specified service. + + + + + + Closes the socket of the connection. + + + + + Gets the underlying stream of data. + + + + + + The number of bytes of data received from the network and available to be read. + + + + + Gets or sets the underlying . + + + + + Gets a value indicating whether the underlying for an is connected to a remote host. + + + + + Gets the name of the device participating in the communication. + + + + + Provides an OBEX implementation of the class. + + + + + Create a new Obex request with the specified . + + + Uri must use one of the following schemes - obex, obex-push, obex-ftp, obex-sync. + The host name must be the device address in short hex, or dotted hex notation - not the default representation using the colon separator + + + + Gets a object to use to write request data. + + + + + + Reads the contents of the specified file to the request stream. + + The filename (including the path) from which to read. + Provides an easy equivalent to manually writing the file contents to the request stream. + + + + Returns the OBEX server response. + + + + + + + + + + + Gets or sets the method for the request. + + For Object Exchange the method code is mapped to the equivalent HTTP style method. + For example "PUT", "GET" etc. In this version only "PUT" is supported and is the default value. + + + + Gets or sets the value of the Type OBEX header. + + + + + Gets or sets the Length OBEX header. + + This property is mandatory, if not set no data will be sent. + If you use the helper method this value is automatically populated with the size of the file that was read. + + + + Not Supported - do not use, this will throw an exception. + + + + + Gets or sets the time-out value for the method. + + The number of milliseconds to wait before the request times out. + The default is 50,000 milliseconds (50 seconds). + A value of -1 or 0 represents no time-out. + + + + Gets the original Uniform Resource Identifier (URI) of the request. + + For an ObexPush request the URI will use the "obex://" prefix, followed by the numerical device id in hex format. + The path section of the URI represents the remote filename of the pushed object. Subfolders are not supported. Some devices may only support specific object types e.g. V-Card. + + + + Methods which can be carried out in an Object Exchange transaction. + + + + + Sends an object to a receiving device. + + + + + Requests a file from the remote device. + + + + + Negotiate an Object Exchange connection with a remote device. + + + + + Disconnect an existing Object Exchange session. + + + + + Sends the last packet of an object to a receiving device. + + + + + Change remote path on an Object Exchange server. + + + + + Manufacturer codes. + + Defined in Bluetooth Specifications Assigned Numbers. + + + + + + + + + Internal bytes + + + + + + Size of the structure. + + + + + Defines configuration option names for the class. + + + + + On connected socket, triggers authentication. + On not connected socket, forces authentication on connection. + For incoming connection this means that connection is rejected if authentication cannot be performed. + + The optval and optlen parameters are ignored; however, Winsock implementation on Windows CE requires optlen to be at least 4 and optval to point to at least an integer datum. + + + + Toggles authentication under Windows XP. + + optlen=sizeof(ULONG), optval = &(ULONG)TRUE/FALSE + + + + On a connected socket, this command turns encryption on or off. + On an unconnected socket, this forces encryption to be on or off on connection. + For an incoming connection, this means that the connection is rejected if the encryption cannot be turned on. + + + + + This sets or revokes PIN code to use with a connection or socket. + + + + + This sets or revokes link key to use with a connection or peer device. + + + + + Returns link key associated with peer Bluetooth device. + + + + + Get or set the default MTU on Windows XP. + + optlen=sizeof(ULONG), optval = &mtu + + + + This sets default MTU (maximum transmission unit) for connection negotiation. + While allowed for connected socket, it has no effect if the negotiation has already completed. + Setting it on listening socket will propagate the value for all incoming connections. + + + + + Returns MTU (maximum transmission unit). + For connected socket, this is negotiated value, for server (accepting) socket it is MTU proposed for negotiation on connection request. + + + + + Get or set the maximum MTU on Windows XP. + + optlen=sizeof(ULONG), optval = &max. mtu + + + + This sets maximum MTU for connection negotiation. + While allowed for connected socket, it has no effect if the negotiation has already completed. + Setting it on listening socket will propagate the value for all incoming connections. + + + + + Returns maximum MTU acceptable MTU value for a connection on this socket. + Because negotiation has already happened, has little meaning for connected socket. + + + + + Get or set the minimum MTU on Windows XP. + + optlen=sizeof(ULONG), optval = &min. mtu + + + + This sets minimum MTU for connection negotiation. + While allowed for connected socket, it has no effect if the negotiation has already completed. + Setting it on listening socket will propagate the value for all incoming connections. + + + + + Returns minimum MTU acceptable MTU value for a connection on this socket. + Because negotiation has already happened, has little meaning for connected socket. + + + + + This sets XON limit. + Setting it on listening socket will propagate the value for all incoming connections. + + + + + Returns XON limit for a connection. + XON limit is only used for peers that do not support credit-based flow control (mandatory in the Bluetooth Core Specification version 1.1). + When amount of incoming data received, but not read by an application for a given connection grows past this limit, a flow control command is sent to the peer requiring suspension of transmission. + + + + + This sets XOFF limit. + Setting it on listening socket will propagate the value for all incoming connections. + + + + + Returns XOFF limit for a connection. + XOFF limit is only used for peers that do not support credit-based flow control (mandatory in the Bluetooth Core Specification 1.1). + If flow has been suspended because of buffer run-up, when amount of incoming data received, but not read by an application for a given connection falls below this limit, a flow control command is sent to the peer allowing continuation of transmission. + + + + + Specifies maximum amount of data that can be buffered inside RFCOMM (this is amount of data before call to send blocks). + + + + + Returns maximum amount of data that can be buffered inside RFCOMM (this is amount of data before call to send blocks). + + + + + Specifies maximum amount of data that can be buffered for a connection. + This buffer size is used to compute number of credits granted to peer device when credit-based flow control is implemented. + This specifies the maximum amount of data that can be buffered. + + + + + Returns maximum amount of data that can be buffered for a connection. + This buffer size is used to compute number of credits granted to peer device when credit-based flow control is implemented. + This specifies the maximum amount of data that can be buffered. + + + + + Retrieves last v24 and break signals set through MSC command from peer device. + + + + + Retrieves last line status signals set through RLS command from peer device. + + + + + Sends MSC command. V24 and breaks are as specified in RFCOMM Specification. + Only modem signals and breaks can be controlled, RFCOMM reserved fields such as flow control are ignored and should be set to 0. + + + + + Sends RLS command. + Argument is as specified in RFCOMM Specification. + + + + + Gets flow control type on the connected socket. + + + + + Sets the page timeout for the card. + The socket does not have to be connected. + + + + + Gets the current page timeout. + The socket does not have to be connected. + + + + + Sets the scan mode for the card. + The socket does not have to be connected. + + + + + Gets the current scan mode. + The socket does not have to be connected. + + + + + Sets the class of the device. + The socket does not have to be connected. + + + + + Retrieve the Class of Device. + + + + + Get the version information from the Bluetooth adapter. + + + + + Get the version of the remote adapter. + + + + + Retrieves the authentication settings. + The socket does not have to be connected. + + + + + Sets the authentication policy of the device. + + + + + Reads the remote name of the device. + The socket does not have to be connected. + + + + + Retrieves the link policy of the device. + + + + + Sets the link policy for an existing baseband connection. + The socket must be connected. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gets the current mode of the connection. + The mode can either be sniff, park, or hold. The socket must be connected. + + + + + Contains helper functionality. + + + + + Specifies that the URI is accessed through the Object Exchange (OBEX) protocol. + + + + + Specifies that the URI is accessed through the Object Exchange (OBEX) Push protocol. + + + + + Specifies that the URI is accessed through the Object Exchange (OBEX) FTP protocol. + + + + + Specifies that the URI is accessed through the Object Exchange (OBEX) Sync protocol. + + + + + Provides information about remote devices connected by infrared communications. + + + + + + Compares two instances for equality. + + + + + + + Returns the hash code for this instance. + + + + + + Returns the address of the remote device. + + + + + Provided solely for compatibility with System.Net.IrDA - consider using instead. + + + + + Gets the name of the device. + + + + + Gets the character set used by the server, such as ASCII. + + + + + Gets the type of the device, such as a computer. + + + + + Specifies the current status of the Bluetooth hardware. + + + + + Status cannot be determined. + + + + + Bluetooth radio not present. + + + + + Bluetooth radio is in the process of starting up. + + + + + Bluetooth radio is active. + + + + + Bluetooth radio is in the process of shutting down. + + + + + Bluetooth radio is in an error state. + + + + + Class of Device flags as assigned in the Bluetooth specifications. + + Defined in Bluetooth Specifications Assigned Numbers. + + + + Defines additional IrDA socket option levels for the and methods. + + + + + + + + + + Defines the type of an IAS attribute. + + + + + Identifies an integer attribute value. + + + + + Identifies a binary, or octet, attribute value. + + + + + Identifies a string attribute value. + + + + + Represents an end point for an infrared connection. + + + + + + Initializes a new instance of the class. + + The device identifier. + The name of the service to connect to. + + + + Initializes a new instance of the class. + + The device address. + The name of the service to connect to. + + + + Serializes endpoint information into a . + + + + + + Creates an from a socket address + + A . + + + + + Compares two instances for equality. + + + + + + + Returns the hash code for this instance. + + + + + + Gets or sets an address for the device. + + + + + Gets or sets an identifier for the device. + + + + + Gets or sets the name of the service. + + + + + Gets the address family to which the endpoint belongs. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Bluetooth specific flags returned from WSALookupServiceNext + in WSAQUERYSET.dwOutputFlags in response to device inquiry. + + + + + Establishes connections to a peer device and provides Bluetooth port information. + + + + + Specifies the minimum value that can be assigned to the Port property. + + + + + Specifies the maximum value that can be assigned to the Port property. + + + + + Initializes a new instance of the class with the specified address and service. + + The Bluetooth address of the device. A six byte array. + The Bluetooth service to use. + + + + Initializes a new instance of the class with the specified address, service and port number. + + The Bluetooth address of the device. A six byte array. + The Bluetooth service to use. + Radio channel to use, -1 for any. + + + + Serializes endpoint information into a instance. + + A instance containing the socket address for the endpoint. + + + + Creates an endpoint from a socket address. + + The to use for the endpoint. + An instance using the specified socket address. + + + + Compares two instances for equality. + + + + + + + Returns the hash code for this instance. + + + + + + Gets the address family of the Bluetooth address. + + + + + Gets or sets the Bluetooth address of the endpoint. + + + + + Gets or sets the Bluetooth service to use for the connection. + + + + + Gets or sets the service channel number of the endpoint. + + + + + Defines additional Bluetooth socket option levels for the and methods. + + + + + + + + + + + + + + + + + + + + Provides information about an available device obtained by the client during device discovery. + + + + + + + + + + + + + + + + + Forces the system to refresh the device information. + + + + + Updates the device name used to display the device. + + On Windows CE this only affects devices which are already paired. + + + + Enables or disables services for a Bluetooth device. + + The service GUID on the remote device. + Service state - TRUE to enable the service, FALSE to disable it. + This function only supports Windows XP, calling it on CE will throw a PlatformNotSupportedException. + Thrown if this method is called on Windows CE platforms. + + + + + + + + + + + Displays information about the device. + + + + + Compares two instances for equality. + + + + + + + Returns the hash code for this instance. + + + + + + Gets the device identifier. + + + + + Gets a name of a device. + + + + + Returns the Class of Device of the remote device. + + + + + Returns a list of services which are already installed for use on the calling machine. + + Will only return available services for paired devices. + + + + Device connected. + + Not supported under Windows CE and will always return false. + + + + Device remembered. + + Not supported under Windows CE and will always return false. + + + + Device Authenticated. + + Now supported on both CE and XP. + + + + Date and Time this device was last seen by the system. + + Not supported under Windows CE and will return DateTime.MinValue. + + + + Date and Time this device was last used by the system. + + Not supported under Windows CE and will return DateTime.MinValue. + + + + Places a socket in a listening state to monitor infrared connections from a specified service or network address. + + This class monitors a service by specifying a service name or a network address. + The listener does not listen until you call the method. + + + + + Initializes a new instance of the class. + + The network address to monitor for making a connection. + + + + Initializes a new instance of the class. + + The name of the service to listen for. + + + + Starts the socket to listen for incoming connections. + + + + + Stops the socket from monitoring connections. + + + + + Creates a new socket for a connection. + + A socket. + + + + Creates a client object for a connection when the specified service or endpoint is detected by the listener component. + + An object. + + + + Determines if a connection is pending. + + true if there is a connection pending; otherwise, false. + + + + Gets the underlying network . + + + + + Gets a value that indicates whether the is actively listening for client connections. + + + + + Gets an representing the local device. + + + + + Provides client connections for Bluetooth network services. + + This class currently only supports devices which use the Microsoft Bluetooth stack such as the Orange SPV E200, devices which use the WidComm stack will not work. + + + + Creates a new instance of . + + + + + Initializes a new instance of the class and binds it to the specified local endpoint. + + The to which you bind the Bluetooth Socket. + Only necessary on multi-radio system where you want to select the local radio to use. + + + + Discovers accessible Bluetooth devices and returns their names and addresses. + + An array of BluetoothDeviceInfo objects describing the devices discovered. + + + + Discovers accessible Bluetooth devices and returns their names and addresses. + + The maximum number of devices to get information about. + An array of BluetoothDeviceInfo objects describing the devices discovered. + + + + Discovers accessible Bluetooth devices and returns their names and addresses. + + The maximum number of devices to get information about. + True to return previously authenticated/paired devices. + True to return remembered devices. + True to return previously unknown devices. + An array of BluetoothDeviceInfo objects describing the devices discovered. + + + + Connects a client to a specified endpoint. + + A that represents the remote device. + + + + Closes the socket of the connection. + + + + + Gets the underlying stream of data. + + The underlying . + returns a that you can use to send and receive data. + The class inherits from the class, which provides a rich collection of methods and properties used to facilitate network communications. + You must call the method first, or the method will throw an . + After you have obtained the , call the method to send data to the remote host. + Call the method to receive data arriving from the remote host. + Both of these methods block until the specified operation is performed. + You can avoid blocking on a read operation by checking the property. + A true value means that data has arrived from the remote host and is available for reading. + In this case, is guaranteed to complete immediately. + If the remote host has shutdown its connection, will immediately return with zero bytes. + The is not connected to a remote host. + The has been closed. + + + + Set or change the PIN to be used with a specific remote device. + + Address of Bluetooth device. + PIN string consisting of 1-16 ASCII characters. + + + + Gets the name of the specified remote device. + + Address of remote device. + Friendly name of specified device. + + + + Gets the name of a device by a specified socket. + + A . + Returns a string value of the computer or device name. + + + + + + + + + + + + + + + Frees resources used by the class. + + + + + Amount of time allowed to perform the query. + + On Windows CE the actual value used is expressed in units of 1.28 seconds, so will be the nearest match for the value supplied. + The default value is 10 seconds. The maximum is 60 seconds. + + + + Gets the amount of data that has been received from the network and is available to be read. + + The number of bytes of data received from the network and available to be read. + The has been closed. + + + + Gets or sets the underlying . + + + + + Gets a value indicating whether the underlying for a is connected to a remote host. + + true if the socket was connected to a remote resource as of the most recent operation; otherwise, false. + + + + Gets or sets the authentication state of the current connect or behaviour to use when connection is established. + + + For disconnected sockets, specifies that authentication is required in order for a connect or accept operation to complete successfully. + Setting this option actively initiates authentication during connection establishment, if the two Bluetooth devices were not previously authenticated. + The user interface for passkey exchange, if necessary, is provided by the operating system outside the application context. + For outgoing connections that require authentication, the connect operation fails with WSAEACCES if authentication is not successful. + In response, the application may prompt the user to authenticate the two Bluetooth devices before connection. + For incoming connections, the connection is rejected if authentication cannot be established and returns a WSAEHOSTDOWN error. + + + + + On unconnected sockets, enforces encryption to establish a connection. + Encryption is only available for authenticated connections. + For incoming connections, a connection for which encryption cannot be established is automatically rejected and returns WSAEHOSTDOWN as the error. + For outgoing connections, the connect function fails with WSAEACCES if encryption cannot be established. + In response, the application may prompt the user to authenticate the two Bluetooth devices before connection. + + + + + Returns link key associated with peer Bluetooth device. + + + + + Returns the Link Policy of the current connection. + + + + + Retrieves the version of the local Bluetooth equipment. + + + + + Sets the PIN associated with the currently connected device. + + PIN which must be composed of 1 to 16 ASCII characters. + Assigning null (Nothing in VB) or an empty String will revoke the PIN. + + + + Gets the name of the remote device. + + + + + Provides access to the request and response objects used by the class. + + + + + Gets the that represents a client's request for a resource + + + + + Describes the character sets supported by the device. + + The enumeration describes the following character sets, which are used by the and classes. + + + + + The ASCII character set. + + + + + The western European graphic character set. + + + + + The eastern European graphic character set. + + + + + The southern European graphic character set. + + + + + The northern European graphic character set. + + + + + The Cyrillic graphic character set. + + + + + The Arabic graphic character set. + + + + + The Greek graphic character set. + + + + + The Hebrew graphic character set. + + + + + The Turkish graphic character set. + + + + + The Unicode character set. + + + + + Specifies the media type information for an object. + + + + + Specifies the type of image data in an object. + + + + + Specifies that the image data is in Graphics Interchange Format (GIF). + + + + + Specifies that the image data is in Joint Photographic Experts Group (JPEG) format. + + + + + Specifies the type of text data in an object. + + + + + Specifies that the data is in HTML format. + + + + + Specifies that the data is in plain text format. + + + + + Specifies that the data is in vCalendar format. + + + + + Specifies that the data is in vCard format. + + + + + Specifies that the data is in vMsg format. + + + + + Specifies that the data is in vNote format. + + + + + Specifies that the data is in XML format. + + + + + Specifies the type of Object Exchange specific data. + + + + + Used to retrieve supported object types. + + + + + Used to retrieve folder listing with OBEX FTP. + + + + + Used to retrieve an object profile. + + + + + Provides an OBEX implementation of the class. + + + + + Gets the stream used to read the body of the response from the server. + + + + + + Writes the contents of the response to the specified file path. + + The filename (including the path) from which to read. + + + + Frees the resources held by the response. + + + + + Gets the headers associated with this response from the server. + + + + + + + + + + + + + + + Returns a status code to indicate the outcome of the request. + + + + + Used to create a new web request for obex uri scheme + + + + + Supported network transports for Object Exchange. + + + + + Infrared (IrDA) + + + + + Bluetooth + + + + + TCP/IP + + + + + Flags to describe Link Policy. + + + + + Disables all LAN Manager (LM) modes. + + + + + Enables the master slave switch. + + + + + Enables Hold mode. + + + + + Enables Sniff Mode. + + + + + Enables Park Mode. + + + + + Represents a Bluetooth Radio device. + + Allows you to query properties of the radio hardware and set the mode. + + + + Gets a value that indicates whether the 32feet.NET library can be used with the current device. + + + + + Gets the primary . + + For Windows CE based devices this is the only , for Windows XP this is the first available device. + If the device has a third-party stack this property will return null + + + + Gets an array of all Bluetooth radios on the system. + + Under Windows CE this will only ever return a single device. + If the device has a third-party stack this property will return an empty collection + + + + Gets the handle for this radio. + + Relevant only on Windows XP. + + + + Returns the current status of the Bluetooth radio hardware. + + A member of the enumeration. + + + + Gets or Sets the current mode of operation of the Bluetooth radio. + + This setting will be persisted when the device is reset. + An Icon will be displayed in the tray on the Home screen and the device will emit a blue LED when Bluetooth is enabled. + + + + Returns the address of the local Bluetooth radio device. + + + + + Returns the friendly name of the local Bluetooth radio. + + + + + Returns the Class of Device. + + + + + Returns the manufacturer of the device. + + + + + Returns the manufacturer of the Bluetooth software stack running locally. + Currently only Microsoft is supported. + + + + + Specifies additional protocols that the class supports. + + + + + Bluetooth RFComm protocol. + + + + + Describes an enumeration of possible device types, such as Fax. + + + + + + Unspecified device type. + + + + + A Plug and Play interface. + + + + + A Pocket PC or similar. + + + + + A personal computer. + + + + + A printer. + + + + + A modem. + + + + + A fax. + + + + + A local area network access. + + + + + Contains extended hint bytes. + + + + + A telephonic device. + + + + + A personal computer file server. + + + + + Device supports IrCOMM. + + + + + Device supports Object Exchange. + + + + + Describes the device and service capabilities of a device. + + + + + + + + + + + + + + + + + Returns the device type. + + + + + Returns supported service types. + + + + + Describes an incoming OBEX request to an object. + + + + + Writes the body of the request to the specified file path. + + The filename (including the path) to write to. + + + + Gets the length of the body data included in the request. + New in v1.5.51015 + + A long value that contains the value from the request's Length header. + This value is -1 if the content length is not known. + The Length header expresses the length, in bytes, of the body data that accompanies the request. + + + + Gets the MIME type of the body data included in the request. + + A that contains the text of the request's Type header. + + + + Gets the collection of header name/value pairs sent in the request. + + A that contains the OBEX headers included in the request. + For a complete list of request headers, see the enumeration. + + + + Get the device address and service to which the request is directed. + + + + + Gets the method specified by the client. + + Only PUT is supported in this version. + + + + Gets a stream that contains the body data sent by the client. + + + + + Gets the OBEX version used by the requesting client + + + + + Gets the URL information (without the host and port) requested by the client. + + A that contains the raw URL for this request. + + + + Gets the device address and service from which the request originated. + + + + + Gets the server address to which the request is directed. + + + + + Gets the object requested by the client. + + A object that identifies the resource requested by the client. + + + + Determine all the possible modes of operation of the Bluetooth radio. + + + + + Bluetooth is disabled on the device. + + + + + Bluetooth is connectable but your device cannot be discovered by other devices. + + + + + Bluetooth is activated and fully discoverable. + + + + + Listens for connections from Bluetooth network clients. + + The class provides simple methods that listen for and accept incoming connection requests in blocking synchronous mode. + You can use either a or a to connect with a + + + + Initializes a new instance of the class. + + The device address to monitor for making a connection. + + + + Initializes a new instance of the class that listens for incoming connection attempts on the specified local Bluetooth address and service identifier. + + A that represents the local Bluetooth radio address. + The Bluetooth service to listen for. + + + + Initializes a new instance of the class. + + The Bluetooth service to listen for. + + + + Initializes a new instance of the class. + + The Bluetooth service to listen for. + Prepared SDP Record to publish + Offset into the SDP record in which to place the actual channel. + It is recommended that you use the alternative constructor which takes just a service guid for your custom profile implementations. + + + + Initializes a new instance of the class. + + A that represents the local Bluetooth radio address. + The Bluetooth service to listen for. + Prepared SDP Record to publish + Offset into the SDP record in which to place the actual channel. + It is recommended that you use the alternative constructor which takes just a service guid for your custom profile implementations. + + + + Starts the socket to listen for incoming connections. + + + + + Stops the socket from monitoring connections. + + + + + Creates a new socket for a connection. + + AcceptSocket is a blocking method that returns a that you can use to send and receive data. + If you want to avoid blocking, use the method to determine if connection requests are available in the incoming connection queue. + The returned is initialized with the address and channel number of the remote device. + You can use any of the Send and Receive methods available in the class to communicate with the remote device. + When you are finished using the , be sure to call its method. + If your application is relatively simple, consider using the method rather than the AcceptSocket method. + provides you with simple methods for sending and receiving data over a network in blocking synchronous mode. + A used to send and receive data. + Listener is stopped. + + + + Creates a client object for a connection when the specified service or endpoint is detected by the listener component. + + AcceptTcpClient is a blocking method that returns a that you can use to send and receive data. + Use the method to determine if connection requests are available in the incoming connection queue if you want to avoid blocking. + Use the method to obtain the underlying of the returned . + The will provide you with methods for sending and receiving with the remote host. + When you are through with the , be sure to call its method. + If you want greater flexibility than a offers, consider using . + A component. + Listener is stopped. + + + + Determines if there is a connection pending. + + true if there is a connection pending; otherwise, false. + + + + Gets the underlying of the current . + + + + + Get or set class of device flags which this service adds to the host device. + + + + + Gets the underlying network . + + The underlying . + creates a to listen for incoming client connection requests. + Classes deriving from can use this property to get this . + Use the underlying returned by the property if you require access beyond that which provides. + Note property only returns the used to listen for incoming client connection requests. + Use the method to accept a pending connection request and obtain a for sending and receiving data. + You can also use the method to accept a pending connection request and obtain a for sending and receiving data. + + + + Specifies additional addressing schemes that an instance of the class can use. + + + + + Bluetooth address. + + 32 + + + + IrDA address used on some Windows CE platforms (Has a different value to AddressFamily.IrDA). + + 22 + + + + Provides a simple, programmatically controlled OBEX protocol listener. + + + + + Initializes a new instance of the ObexListener class using the Bluetooth transport. + + + + + Initializes a new instance of the ObexListener class specifiying the transport to use. + + + + + Allows this instance to receive incoming requests. + + + + + Causes this instance to stop receiving incoming requests. + + + + + Shuts down the ObexListener. + + + + + Waits for an incoming request and returns when one is received. + + + + + + Gets a value that indicates whether the has been started. + + + + + Standard IrDA service names. + + + + + + + + + + + + + + + + + + + + Represents a Bluetooth device address. + + + + + + + + + + + + + + + + + + + + + + + + + Initializes a new instance of the class with the specified address. + + representation of the address. + + + + Initializes a new instance of the class with the specified address. + + Address as 6 byte array. + address passed was not a 6 byte array. + + + + Determines whether a string is a valid Bluetooth address. + + The string to validate. + The version of the string. + true if bluetoothString is a valid Bluetooth address; otherwise, false. + + + + Converts the string representation of a Bluetooth address to a new instance. + + A string containing an address to convert. + New instance. + Address must be specified in hex format optionally separated by the colon or period character e.g. 000000000000, 00:00:00:00:00:00 or 00.00.00.00.00.00. + + + + Returns the internal byte array. + + + + + + Returns the Bluetooth address as a long integer. + + + + + + Compares two instances for equality. + + + + + + + Returns the hash code for this instance. + + + + + + Returns an indication whether the values of two specified objects are equal.New in v1.5 + + + + + + + + Returns an indication whether the values of two specified objects are not equal. + + + + + + + + Converts the address to its equivalent string representation. + + The string representation of this instance. + The default return format is without a separator character - use the other overload for ToString for more formatting options. + + + + Returns a representation of the value of this instance, according to the provided format specifier. + + A single format specifier that indicates how to format the value of this Guid. + The format parameter can be "N", "C", or "P". + If format is null or the empty string (""), "D" is used. + A representation of the value of this . + + SpecifierFormat of Return Value + N12 digits: XXXXXXXXXXXX + C12 digits separated by colons: XX:XX:XX:XX:XX:XX + P12 digits separated by periods: XX.XX.XX.XX.XX.XX + + + + + Provides a null Bluetooth address. + + + + + Significant address part. + + + + + Non-significant address part. + + + + + Provides helper methods for the class. + + + + + Indicates whether the specified String object is a null reference. + + A reference. + true if the value parameter is a null reference (Nothing in Visual Basic) or an empty string (""); otherwise, false. + IsNullOrEmpty is a convenience method that enables you to simultaneously test whether a String is a null reference (Nothing in Visual Basic) or its value is . + + + + Provides a form to select an available Bluetooth device. + + + + + + + + + + + + + + + + Gets or sets the information text. + + + + + + + + + + If TRUE, invokes the Add New Device Wizard. + + Supported only on Windows XP + + + + If TRUE, forces authentication before returning. + + Supported only on Windows XP + + + + If TRUE, authenticated devices are shown in the picker. + + + + + If TRUE, remembered devices are shown in the picker. + + Supported only on Windows XP. + + + + If TRUE, unknown devices are shown in the picker. + + + + + If TRUE, skips the Services page in the Add New Device Wizard. + + Supported only on Windows XP + + + + Represents an individual SDP record. + + + + + Creates a new instance from the raw SDP record bytes. + + SDP record. + + + + Returns the record bytes. + + + + + diff --git a/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/obj/Debug/IRChat_Desktop.Form1.resources b/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/obj/Debug/IRChat_Desktop.Form1.resources new file mode 100644 index 0000000000000000000000000000000000000000..06c24d06c1cab750788146ce052b37770f3fa530 GIT binary patch literal 180 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 literal 0 HcmV?d00001 diff --git a/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/obj/Debug/IRChat_Desktop.pdb b/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/obj/Debug/IRChat_Desktop.pdb new file mode 100644 index 0000000000000000000000000000000000000000..86f40e42c0ffc93f5eed4600561603f7ab473775 GIT binary patch literal 69120 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 literal 0 HcmV?d00001 diff --git a/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/obj/Debug/IRChat_Desktop.vbproj.GenerateResource.Cache b/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/obj/Debug/IRChat_Desktop.vbproj.GenerateResource.Cache new file mode 100644 index 0000000000000000000000000000000000000000..33978138f3c04d568e7967ae4a9209979d2c940a GIT binary patch literal 842 zcma)4O-md>5S_{HjQgRm9z-NLERsXOW!Q~~UKYWXH4>MYD6)rKdZ%khyS>xWH6xC9 zK`;KTcnst(;>_5h>aUj*&Qm$M z3UM|9#{am*Y8T~SiYl*83d~>@4UE=Qo`!+ZJAq#^G11@(ROwEY;h#qr=s@Gh2ssqo z#KND+)&^#FAuQMylMal8V{0yz1Y6_8iMoa=4Hv^Rp>sgbt5m!oXx7SV9X@isF427W zjQ{7yo!u6zYBUM!0Yga8;)pv7o#vsjvtC4|T!l4Cu8oQ|Nj#@nd?o`;Zeu{V-Qvq` zB6SMt4T6B9Ub$J%-QS>;bDoFU)KA9a>XWer{|FliK`LhOaxSk0W+Nk2qCl?9?ZK78 x3_~(_$#)`M)7;^YoAKSvw})HbXUR_c5(nI^xANh8aR2qzU*_YymU)j?^EXxS@Y?_Y literal 0 HcmV?d00001 diff --git a/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/obj/Debug/IRChat_Desktop.xml b/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/obj/Debug/IRChat_Desktop.xml new file mode 100644 index 0000000..a2a88e5 --- /dev/null +++ b/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/obj/Debug/IRChat_Desktop.xml @@ -0,0 +1,11 @@ + + + + +IRChat_Desktop + + + + + + \ No newline at end of file diff --git a/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/obj/Debug/ResolveAssemblyReference.cache b/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/obj/Debug/ResolveAssemblyReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..ba949d6a1b78d59896a261c541c8b96cb7dae0fc GIT binary patch literal 4067 zcmeHJU2NM_6t)w`vE8ic0z=&>D9|D_TAa3Nw|1hSE?QZ|T1r!O9cyLX#5bv_V^_9Q zmV#hUO-$l%dw?N9Hwlf64jy3A9+2Q1*J+bBuy(vv zb&}(I;&bmg_nhy1*9^-r%-?X~9j}lN#7Li(woKd1IP&hirmON0u_x@N=rFZx%{01N zC`pn1n4dQ)^DpVGDTW3(`2PEeyO)f~^XXLe>CSgnsy)pTi#3TafhUIit&nm5FCpCG!24*w9h1J z4@o-c@U~Bk1qQ{gjtK^qCJo#d$iYx4vo|3 zUSg=xeU3UBZ_QBZ$o+eUM!RjB=Ab5EH8Ri&mSBi>az7XhKs`-^=(4KoHR#t(Jf*Rq|sh{byIArNDgOH$r!JDNLMJ66+hl*BvIgtYFAx5V4p zIy-~7Nw=(Si>!H*;wG3bR-*`m*o^7Ii^KSDvQOMyK*91$$|5g>mxeAygcOfMdX0=J zD%gFyiA@E?YtCu~o2FaOnwI8_=W5H<9@9#ghGUs}M1ky^Mi$*cvknl=+EQG@?MX*V zX}abVc%?@tSv%}5v^1X$1{v1xUO}HvsP;Q|y?#nv8LZ9HE5Wf`d8pcKe%dVG8hRPT<;*c3OzGwFE{d<4W8GWD)lESA_6E90fu zGG2-;@lwq52)T;^FM;L1@sfBOxZvjDh`P0OBBceVkhv9w5xB$94Zp%-xF9@XBFH#G=ST~4D&iD zJTeUEgURj|28fx3&-U|2KaD*5#r3Ze({JC`Q(H5`MJ`;q-|qV3jgzM)4sAJ;Z~OAn zTeC;%tIj<-XTAI2wmRYRb7vp^`t-#gAHSA*@_5#{{`@yz>zZ!gx!!j=G zDm*iIrH?#iT5!`0yt(fiqB2OQG$eblU<9~a_J;AXYxoar6_c~x_{X=wKfvA||J(@$ z7IJplv~(>ciFKeN<4EFNAlXYLEzDjlQ6zQ_H0){YE%qlEU^BuPS{++x12n}K!gY9P z-3tZg7tTgWtOsQQGQfol`vbtB$olMs5=COa2W=5D-+{6O8Kl__$gE??Y=;8h?!8X! z*9_Hs+Lqz9FlS5R1B(D^L;#&H!3=w@M3LBUO9AvvDS*OATzFvnKAs*O-r6?z5{m?e dr(y9-gQ0tc5wPW^2;7RM7+Se0hFHn8>K|>3PEh~= literal 0 HcmV?d00001 diff --git a/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/obj/IRChat_Desktop.vbproj.FileList.txt b/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/obj/IRChat_Desktop.vbproj.FileList.txt new file mode 100644 index 0000000..8e31a2f --- /dev/null +++ b/Chapter04(Infrared)/IRChat_Desktop/IRChat_Desktop/obj/IRChat_Desktop.vbproj.FileList.txt @@ -0,0 +1,12 @@ +obj\Debug\ResolveAssemblyReference.cache +obj\Debug\IRChat_Desktop.Form1.resources +obj\Debug\IRChat_Desktop.Resources.resources +obj\Debug\IRChat_Desktop.vbproj.GenerateResource.Cache +bin\Debug\IRChat_Desktop.exe +bin\Debug\IRChat_Desktop.pdb +bin\Debug\IRChat_Desktop.xml +bin\Debug\InTheHand.Net.Personal.dll +bin\Debug\InTheHand.Net.Personal.xml +obj\Debug\IRChat_Desktop.exe +obj\Debug\IRChat_Desktop.xml +obj\Debug\IRChat_Desktop.pdb diff --git a/Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS.sln b/Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS.sln new file mode 100644 index 0000000..17708a1 --- /dev/null +++ b/Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IRChat_Desktop_CS", "IRChat_Desktop_CS\IRChat_Desktop_CS.csproj", "{39C1D659-D76B-42B4-8902-122FECBDBD70}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {39C1D659-D76B-42B4-8902-122FECBDBD70}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {39C1D659-D76B-42B4-8902-122FECBDBD70}.Debug|Any CPU.Build.0 = Debug|Any CPU + {39C1D659-D76B-42B4-8902-122FECBDBD70}.Release|Any CPU.ActiveCfg = Release|Any CPU + {39C1D659-D76B-42B4-8902-122FECBDBD70}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS.suo b/Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS.suo new file mode 100644 index 0000000000000000000000000000000000000000..a66f1918208998a0cfffccf5ebd288c0e46d784a GIT binary patch literal 16896 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 z + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.btnSend = new System.Windows.Forms.Button(); + this.StatusStrip1 = new System.Windows.Forms.StatusStrip(); + this.ToolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel(); + this.txtMessage = new System.Windows.Forms.TextBox(); + this.txtMessagesArchive = new System.Windows.Forms.TextBox(); + this.StatusStrip1.SuspendLayout(); + this.SuspendLayout(); + // + // btnSend + // + this.btnSend.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.btnSend.Location = new System.Drawing.Point(149, 260); + this.btnSend.Name = "btnSend"; + this.btnSend.Size = new System.Drawing.Size(75, 23); + this.btnSend.TabIndex = 13; + this.btnSend.Text = "Send"; + this.btnSend.UseVisualStyleBackColor = true; + this.btnSend.Click += new System.EventHandler(this.btnSend_Click); + // + // StatusStrip1 + // + this.StatusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.ToolStripStatusLabel1}); + this.StatusStrip1.Location = new System.Drawing.Point(0, 289); + this.StatusStrip1.Name = "StatusStrip1"; + this.StatusStrip1.Size = new System.Drawing.Size(232, 22); + this.StatusStrip1.TabIndex = 14; + this.StatusStrip1.Text = "StatusStrip1"; + // + // ToolStripStatusLabel1 + // + this.ToolStripStatusLabel1.Name = "ToolStripStatusLabel1"; + this.ToolStripStatusLabel1.Size = new System.Drawing.Size(111, 17); + this.ToolStripStatusLabel1.Text = "ToolStripStatusLabel1"; + // + // txtMessage + // + this.txtMessage.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.txtMessage.Location = new System.Drawing.Point(9, 3); + this.txtMessage.Name = "txtMessage"; + this.txtMessage.Size = new System.Drawing.Size(215, 20); + this.txtMessage.TabIndex = 11; + // + // txtMessagesArchive + // + this.txtMessagesArchive.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.txtMessagesArchive.Location = new System.Drawing.Point(9, 29); + this.txtMessagesArchive.Multiline = true; + this.txtMessagesArchive.Name = "txtMessagesArchive"; + this.txtMessagesArchive.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.txtMessagesArchive.Size = new System.Drawing.Size(215, 225); + this.txtMessagesArchive.TabIndex = 12; + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(232, 311); + this.Controls.Add(this.btnSend); + this.Controls.Add(this.StatusStrip1); + this.Controls.Add(this.txtMessage); + this.Controls.Add(this.txtMessagesArchive); + this.Name = "Form1"; + this.Text = "Form1"; + this.Load += new System.EventHandler(this.Form1_Load); + this.StatusStrip1.ResumeLayout(false); + this.StatusStrip1.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + internal System.Windows.Forms.Button btnSend; + internal System.Windows.Forms.StatusStrip StatusStrip1; + internal System.Windows.Forms.ToolStripStatusLabel ToolStripStatusLabel1; + internal System.Windows.Forms.TextBox txtMessage; + internal System.Windows.Forms.TextBox txtMessagesArchive; + + } +} + diff --git a/Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/Form1.cs b/Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/Form1.cs new file mode 100644 index 0000000..4df96c6 --- /dev/null +++ b/Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/Form1.cs @@ -0,0 +1,184 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +using System.Net; +using System.IO; +using System.Net.Sockets; +using InTheHand.Net.Sockets; + +namespace IRChat_Desktop_CS +{ + public partial class Form1 : Form + { + //---define the constants--- + const int MAX_MESSAGE_SIZE = 1024; + const int MAX_TRIES = 3; + + //---define the member variables--- + private string ServiceName = "default"; + + public Form1() + { + InitializeComponent(); + } + + private void btnSend_Click(object sender, EventArgs e) + { + btnSend.Enabled = false; + SendMessage(MAX_TRIES, txtMessage.Text); + btnSend.Enabled = true; + txtMessage.Text = string.Empty; + txtMessage.Focus(); + } + + private void SendMessage(int NumRetries, string str) + { + IrDAClient client = null; + int CurrentTries = 0; + //---try to establish a connection--- + do + { + try + { + client = new IrDAClient(ServiceName); + } + catch (Exception se) + { + if ((CurrentTries >= NumRetries)) + { + throw se; + } + } + CurrentTries = CurrentTries + 1; + } while (client == null & CurrentTries < NumRetries); + + //---timeout occurred--- + if ((client == null)) + { + txtMessagesArchive.BeginInvoke(new myDelegate(UpdateStatus), + new object[] { "Error establishing contact" }); + return; + } + + //---send the message over a stream object--- + System.IO.Stream stream = null; + try + { + stream = client.GetStream(); + stream.Write(System.Text.ASCIIEncoding.ASCII.GetBytes(str), 0, str.Length); + + //---update the status bar--- + txtMessagesArchive.BeginInvoke(new myDelegate(UpdateStatus), + new object[] { "Message sent!" }); + + //---display the message that was sent--- + txtMessagesArchive.Text = str + Environment.NewLine + txtMessagesArchive.Text; + } + catch (Exception e) + { + txtMessagesArchive.BeginInvoke(new myDelegate(UpdateStatus), + new object[] { "Error sending message." }); + } + finally + { + if ((!(stream == null))) + { + stream.Close(); + } + if ((!(client == null))) + { + client.Close(); + } + } + } + + private void Form1_Load(object sender, EventArgs e) + { + txtMessage.Focus(); + + //---receive incoming messages as a separate thread--- + System.Threading.Thread t1; + t1 = new System.Threading.Thread(ReceiveLoop); + t1.Start(); + } + + public void ReceiveLoop() + { + string strReceived; + strReceived = ReceiveMessage(); + + //---keep on listening for new message--- + while (true) + { + if (strReceived != string.Empty) + { + txtMessagesArchive.BeginInvoke( + new myDelegate(UpdateTextBox), + new object[] { strReceived }); + } + strReceived = ReceiveMessage(); + } + } + + private string ReceiveMessage() + { + int bytesRead = 0; + IrDAListener listener = new IrDAListener(ServiceName); + IrDAClient client = null; + System.IO.Stream stream = null; + byte[] Buffer = new byte[MAX_MESSAGE_SIZE - 1]; + string str = string.Empty; + try + { + listener.Start(); + + //---blocking call--- + client = listener.AcceptIrDAClient(); + stream = client.GetStream(); + bytesRead = stream.Read(Buffer, 0, Buffer.Length); + + //---format the received message--- + str = ">" + System.Text.ASCIIEncoding.ASCII.GetString(Buffer, 0, bytesRead); + } + catch (SocketException ex) + { + //---ignore error--- + } + catch (Exception e) + { + txtMessagesArchive.BeginInvoke(new myDelegate(UpdateStatus), + new object[] { e.ToString() }); + } + finally + { + if ((!(stream == null))) + { + stream.Close(); + } + if ((!(client == null))) + { + client.Close(); + } + listener.Stop(); + } + return str; + } + + private delegate void myDelegate(string str); + private void UpdateTextBox(string str) + { + //---delegate to update the textbox control--- + txtMessagesArchive.Text = str + Environment.NewLine + txtMessagesArchive.Text; + } + private void UpdateStatus(string str) + { + //---delegate to update the statusbar control--- + ToolStripStatusLabel1.Text = str; + } + } +} \ No newline at end of file diff --git a/Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/Form1.resx b/Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/Form1.resx new file mode 100644 index 0000000..faac01d --- /dev/null +++ b/Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/Form1.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/IRChat_Desktop_CS.csproj b/Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/IRChat_Desktop_CS.csproj new file mode 100644 index 0000000..d5c21ad --- /dev/null +++ b/Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/IRChat_Desktop_CS.csproj @@ -0,0 +1,79 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {39C1D659-D76B-42B4-8902-122FECBDBD70} + WinExe + Properties + IRChat_Desktop_CS + IRChat_Desktop_CS + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + Form + + + Form1.cs + + + + + Designer + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + \ No newline at end of file diff --git a/Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/Program.cs b/Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/Program.cs new file mode 100644 index 0000000..7912d08 --- /dev/null +++ b/Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/Program.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace IRChat_Desktop_CS +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form1()); + } + } +} \ No newline at end of file diff --git a/Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/Properties/AssemblyInfo.cs b/Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..fee93a0 --- /dev/null +++ b/Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("IRChat_Desktop_CS")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("IRChat_Desktop_CS")] +[assembly: AssemblyCopyright("Copyright © 2006")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("195ded13-61cf-436b-bf38-d8cb30229b66")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/Properties/Resources.Designer.cs b/Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/Properties/Resources.Designer.cs new file mode 100644 index 0000000..1b3ad45 --- /dev/null +++ b/Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace IRChat_Desktop_CS.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IRChat_Desktop_CS.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/Properties/Resources.resx b/Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/Properties/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/Properties/Settings.Designer.cs b/Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/Properties/Settings.Designer.cs new file mode 100644 index 0000000..21ef2aa --- /dev/null +++ b/Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace IRChat_Desktop_CS.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/Properties/Settings.settings b/Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/bin/Debug/IRChat_Desktop_CS.exe b/Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/bin/Debug/IRChat_Desktop_CS.exe new file mode 100644 index 0000000000000000000000000000000000000000..e60a9e0d79a9fe4859f6ac970ce36a0df1406950 GIT binary patch literal 24576 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 K;DP_S2mT9%Yf?7= literal 0 HcmV?d00001 diff --git a/Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/bin/Debug/IRChat_Desktop_CS.pdb b/Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/bin/Debug/IRChat_Desktop_CS.pdb new file mode 100644 index 0000000000000000000000000000000000000000..8c40460b1ba15c02df8ca53ba0f6b457ec644c9f GIT binary patch literal 28160 zcmeI44Rn;%naAG=F%l$7A}Aut5Q2OU316a%@{ypRM3BH%B{qa)0;3@lCxd|6_Qj&L zJ+`u2>Z-?9P`2XM)2$UPc9&i2?yNZ_us%IH=9gF*UqN+4SP=KG({mJhaC5;*CnRgw7`$3|ENMtUE7 zPzVn3`7=lZS_0{GqHSYG{nmJ5#^!k2#%OCiUf&$=xHg?^uTQkKq#9H4=4jKV#`bhP zRi8-lly0!$4NV=L__U{z8&i#&V@)02%#Kvk%$7uJykln5`Ss1orY#ha?ua(FHAg$* zeO_`)GPSu%8?8O$(0Wj?EUAZm)`x`|N439u7!d7q;KAORcXufrH7_^-g`rr zA6ozIwnhKieDjLOk1Tm%N9w`5HEf91-FN@LR4tjczV5NxzP$F(j}CV>y4DkKE<6O5 z%q8cUa3x#?&w|x&r@+d0G%VSxUxvf#o00Ho@EPzJ_)K^#d=`8*JPwY+<6-sP1h@j8 z2%iH_f+xdMV4CF3fTzRL;21m#{xnf%&Ezo4=Dg|}kwzSH!d(|`8f1AEPqvJa~{nAI_oz_IFo&DUYO zJx0|Z%=TkSK>ak5weEBlWinbf$B$s}t;GKd{PJ1ja(E5blQkPj2I)AIfc7|jvHri+ zd;P@iFR$BH{H?vei2dYVEguKz6Ci=U8vpbAU*p3d9sd$IR{ekcw|uaMlEC|Kz5f=| zymwF|cJ=x7H94nrb?%hzGn^0B>U?ko=Yuu&d~mrtAFQ_LgUeU*ly0!$4b^q^NBgWw zCEMevbRynS?{bfkAhEG6p3>o+*B?iP98$VUxP!QRxf8rsrO8zeHTaSAWDX#iMaTOMhtG;t_=REXCvEphY zs<;XZ$CWO)xWAtG<3|;j>`YvRh2u&WT--;$Fmj0EN=KBh!oqR!8c=ks`d>mq-ZD+7 z(5tSisH&)ha20U#Gs`P1d}iT)KmF*H|Gxb1Cl(j{-FFVGSIkP#qnU&GmOk?!_PP^_sbolFtG2jxWO4b?da>55dw?|EJTiz56}o+8yl z^%rsf+oCelgHPM-#h#r z3ftzH_D6B6K5O7sxG$-%`oH*}Hbk2yuX`>w?K>~lUGtkt`Yzn}bHaUp;fM7JLUMgC zd5H=OK7UoXk1n)&&};=Y&nXFUkzdh1&;%`SOQaKxt%)1r)yd86$u@4FmEURJkkW&o z&bXA;#XsANntGp*TmQ;%{d=ZUW#-P3`%9x!PH*3^4boksBlM@}CF)@68#8Ka>bD7x zJ;YaB7e36ZC|z5(y(1mp%zbC(IaZx)ZH+gj6UnxY*u`qeNvk ztgrfia%<5y&UmEiwbzo3|2zB#cRir)xGbK=60&tzzEX0}x(ScfC7Z5|r#k}wvknh5s0<)7kXwvRV_?5`uP1Emd7xPUhZSW1G$hB~#g-&h*3Qy)qVe zH>a^oBdu`dCS-Li?NH#W``n^g;R4>JMaa2F0#ikAFIgNmOUbkROaCLKf zvR<7BVICPm&P6|Qbz2>8iYKm*uSh1_6+!a5iLmLUQyLdfdLTJ6{@MDOc{elmDqMXM z4##O|9*q(?3|t@nmueXOP`Rfob4Y8v$>1k({rCKVcQ<#p{%fXPPR{gWMh{vO49N_; zYQOAFq6mjOdsCQfBOKO|PQ@EH2kE5$;jkrJT3VE=bWgGlhmp?c!oBFh5&BPM`aC;Z zl3Io1$G2tePiZPp1oe^TzztU%xM4xTk0W^XiUwN$|7uigL3jOsJgonUu{f;LrQ|9EZ{{cnc>LVHF7t^dbP zzWOZ$eI>57NS^(y+^mjW?rvGaa z9qmc2;(|4Z(rQ7X_%4p?d&0tX$*e&n-`=k0$^NMI{3mt)_ZvGlPf(*QF-Lc~|Jz4= z#XVO0KlYKan#Odas^a#9#xK>ll{dq4{MN*`8M_bfD?gKHYff(Mh-vxE2&X z<@lSjI@tqWK|LNOTxnc9*_GznJR8s0mBK&j7*I}H)g_xZSAknnDK>~}Qe4!j{%+kG zj^oy?+K=p_&S~nbcemHuwrR~Obl;XRBz9gw8Cz}YHPCBJ= z@l;P`mEGUuo-r$&u>A0xcIsRsFTIh|Ec~4uvf=EJwx{DAtK*yy9DjSjJ;>-CCTsQW z7As5XDvzNya+eX>11imAggBEpH-^%XO>P?8vRQG@&cizI`)6(6SCF40#*3og+Ooa1 z?ahtpxTcvUN$T0NvaarQ+?}t^hsZxeBPgqc#u+^e%Bo8@rnhK-`zU2;ok%t9+9#4( zH>sJeu!!<~l}FjW7DPJh9|`j8>#VE{91orfmV<=(Q$fOf?ej{!*|>D>rn`l643_XU zOJD8*HU3VZy!jw~L z|0Oub^L9w!^KhRI@*TN98Kf+K5qKVW8F)U}0A2{TgA2i1z(wGlAa%NVA9ykDgWxjo z8E`rH8h8n)7g;VN-XFosahG8XtHE(#9assj0WSd8f>(fl4z_?-f!a5(19yUaui)PU zUJX7Beir-(umOAyTo1kuHiC!24d5TZCa{FLuo)Z!#=&#I7BB{G1m}VYFzDY4>Ci$Ja{EM6}}Xn3ttS+2tBW|eivD+0++(dOMVKU2P@xo z@MZ99Smlf5ul#1gmGFFcyya?8aaB+0WO+s(rT4*FHDcDSIE}rH)&qoX(C!+cIcugL z%~><&5V%BLYQ}!cW5lto! zl_~q7yN&&v0Loq%?u?zNj=EpThhh*@u{e$(I)_=|Q>hU9WHD7*e5s5Qn;uoT25j6L59N?u8+QWy26zqlS0H_1!Z(9= z;YP0B-C#R-4^{mpcrR|*r)09n;$DjnfQ0$`!27_zvHsr$_u&3pkhuQi;QinaK+^b! zK;`!%khK0&;9rBX|8Ijo1s??e4W!TgpM#43yu}y5hwy(1q)gjaH2PV%DhAvv3~B+T`&Bs9O9mlSjc13zq8fy3JY@Iv2o{jH&LcY@^DnhI(;e*6Qna|_kL_`V;fiH)F3#2WIXURrYo(B zuYH@+QEizcbo9QEu>5ed@6!mO{pLZihD^%A^I_%Z?$EROBAfW;c7n*OH+!R%TZfYd zx#XM^N#-Jre~wNdP74l|Z_eJUIe6caip!~b`UD(-mBz($`&RPrwEg*eIAqP*J$R=| zx*{4AfcZO$I*dKh)}gjB(T1e;zUpc}3%*{$p)3QO0WK1!FIt`oLH zI$n;Bt1c73Vtxfg>pr)}-HCrNFGMo)OEG?$H$kTMA^UgvCqP9z(Wym6kY)9j-(y#6=^WZBeLz5TzDr* zyG<7kToiWXJx4Xu_W^0n9t~H((n0CxGFbCVD=eLozU_kVh4;e;;3wf{Va=^?z(?T! zgNLGc`tCXkPlvTG)0#tTvwCKx5F=!Mx?TEdbfT5uvFC0Q6E{w>{lkY?x&L*ILkDW3WE2r||CB%49y|1+M2d#zh%adJOlaf=QAs>LTP zzD*p(`<;z1; zW$|(wZ>`PeMT;j`|0``g*62a`HovtNy$?~$NEhK+Z#yb?4?@aw6y>3-^e#@Mu+Sx; zq!G?LgQgfi<2>r&!}HHnDch3hQQ7p&Bb!4eeyF(_zwm<#?<8qBTDQ-Ox(OX9_W$v} zx^$nN<$ectws*1_M@}=-c=gKKX$?!;(y8qYtC9)5DL=-WXu{P$k-QgxPV=UO!Yb$K z^Nz|Y?GJ)9-!p0KhZsD&_}a=N}ymeM#K;2ekcMpWvg&@K>$fS0IXR%f31z zw>D5;4ke!E8Z+N?7I|R$sp$in;_gKYTIt4(V0^IS2B%GK4roRiL-H=^U78@wrfJEh zc`lU3UADV4L0FKcsxmt^OCJlp;IPTX4g74}xw&x*^2Tw+E%0nz*rd7nVw>^r{6Nu_ z6U4D;=VaUAqxc1Rhj1=U5N6X*Hz%*j*i1p*hS;SE!fYDmz&{nq#4>S)bS zr+XJWz{lJVM0nM+XV0CrWVSZnkjr0n54%kuv(Ro^U(M$#Z`BPwEYF=YcX)FaFJ4-; zbP1gabzk1e-U3Z@&~7F>6@6shhHlztJ~Z;?S1)F7R?TWApzg~!<*5DNs~fv3qpSU2 zP*!;V=gOCyD_|~U8K`H0xP-*(_Mb8twesFdiQTq7wL4*xw4Bey{q<07h$?T zs^}t2_d;4viSp~BvvzkrPjfO=V1D|4w(@k=a*ReqY`FV_!E`N4|eoN6YZ#Ee&xsg z?vPbkqod}J6g8mXy!_*yv*CkJeJX+7v8u?gN3U9{arlm}KeqbN_jWBh@VlpWzcl*l z^#>R`X0AxIUCR$WCB2z#jhlHF+-xT{@e*u2wV{=dxBL57-a{L%PJg-?0#gJ8A0Yt_ZfijAhbg-Qj9%8T|c!gwPF*C2SMye*g7B)+M6ue*bkc;Rg_I z#YpZyz$j~{{VYZnF<#sTxpih?a13&26+Umg;MiccvX$*QEU{T$9osBr9ou8T!CO4GX{f1rGjlzDVoO|!Prgq~qltDz9r~?B;$Ix=|OT07mVmN>1Z}RE2drlP`Q)*5X zG<6uR8guNZqj#!d-Lh;?4GGnWTdHBHf%>4@X-9-MYENnj=gbf*dm1jLN#cftptQL=|aWNfvWlQP?*hWf2t+?Lo}%k$q{6hp9nL zgjRO$01v%$;r&I$YdXI8&)FG$2N&cn{PM~EIUlboSblZ6|HQ<{cD(w-H$Pi{GB!Q7 z|H6B@KUnhF)GHNJoBn(6mQTf)Ia@0-J4*9+&;GPbIdCa>RcoH#{Qln`m|0=hKQWNC z!#y@@!#j(1Un%|Q)aTD`kDfW+w4v>(rqa#M$bmyo{cgLmeRW{M$FpYm3da-W&f8x& z0nLKxvau(Eo?AGHIeD_NCo>0YuLwR+p^ze1#Ifrt(TcT2#Y;+-Fe_7rvIeo7wS(yA zX#bP}I_Nou6?Iv{Lq2$0&05=B9YEWMekRLTn0AN-P|#J@A{QJ}x~7y8++mAT5@Rw| z@Q22sG9U6Nxk<0GsfFs1h&|K+JVrkSo|br>`a#cB7|RvrMHFKBr(Uw zl5-@k@UiBtzD8d*9q>KoTQAp`O~3WAt@psmrLqha^n)4xjBMH^@f9F@n1~ujPf^Cu z1X8hoxc8RIqmNGBB-e08_V!a4+g72m#M~*saoB2`Xc84k`hJPumRK&aTH=EeACjm` zG$d}7*dy^#;3Rrn;NPL;}jK9&ZX=lbcdYSfRoToq2>!3ASPn#8u z^5_H5<0%vLR4N9}qQ$`Zh^$7XR0mux@nJd(I!OC~-=*IJ!;-UI&T=Kai#`PZNxBT& zOIH;?y#RZey+d~b$L>D*2U4BLHo7PZt&wf=(v$RGXdorBqSlVYO|go)+z#9IG|?@n z%JQ6^2HUVasx`un?b_|0)?&DE-3)s1h+%8%Ad2nU;Mif|y42~0ZO1f16zp+5(Mk28 zEh6lZ7WQn1YIVa(4rq;W%QHHKR%v&}3{yBk;dB{LLCFE;>z)xZOvCFb_i!dcaZe1+ z7VReV8n#8{t}8l2X3u)jvj&QWL{kF+Vd_0WBWeu|C7jb5g=@zhHd-g*o}-(Cj2hjF z#`S2LwxI3_6TXN_8!^$tUW;&C*dJ1wvR7@j+fFBZw=LZqR*HQcc5v8%N;}r$7|{;z zRXI0nx6BteC@kn? zx7}3wC`~t$^_JixeXZ}r;oYm_b%)++Tlw0>+HX%C`+@-Ake_bp%{*%iWKZ&%~jNE(TX9o*6g%-Rh7EHhP*OlHTd*KJ4?D*a4-;jvD#}$T zOIQn=@p>DHr7y*I8$Y743XSBB{D^C1B}AnPX@5AP4(=bd(sp9DBln=DmYb$353H*? z$g9&OB6vF%DKvX%LSbW(nz&Qd#HFe-r=+-e5z#jlnlL1prkZH9Lb+*IH9O7$Qj&K* zi1dqo@D0qF`iTGURq zl$y==AvIxC2iL{8P9EfJ^b+N0<`}+a;gbg`1N`W1H1*>kDp+;uS4JU@0csxjmC)CT zpTKMnR`9n2umfBdeGU9>R4z4m@TcTs(x)CoK$mlQycQmW;RnyOu?i1|k+nM%lbG(k zU)oNsIsglXDI;B4QqNAHkZxdK@%Jm&3M+mh+d;;>sRJgjdxC zjKDHcB4+hTNzOL=or(eXIE%yQ&!joDM74@5pgblnV%bN-JGR6=O_ohmcu4Tp%XjSM5Nh|8#A5K!MWx={dKuZ TBcLY!&!}P9UAq3eeA)j4ZC9R* literal 0 HcmV?d00001 diff --git a/Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/bin/Debug/InTheHand.Net.Personal.dll b/Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/bin/Debug/InTheHand.Net.Personal.dll new file mode 100644 index 0000000000000000000000000000000000000000..e4e99f44d3140930f8162334fb5b2b119c3973e8 GIT binary patch literal 77824 zcmeEvcVJXi`u2Ov+__UyCX-AGfebB7DkXrSDP2&cmjDU`5+n!=Oah`I7!VN^5d>Ka zy4bN-6g#?zVgpvz#TBs^Y>Tda5r5D7o;xYH?&hEGug}pu_dMsk=RLijdpTpudNPQ} z#NV&K679f~fBgmjJJiEDG3W6_df4-7+a217SKE%CQ&k;a7>k}AE1w^pRlZS@{PlvJL3*Iy$)?79Rs z%0AKUzws~;ry%~b!$ia41kd7{%B3}UR(uNxXtpa^Q~~`2Q#e`t!OPKVF;a#un0wc1Yx z_dGT0ukU6qeLG=u(ttZhP8nYE{OMQTdizE1Jz>`F_)B^5!q~>suj&26z>#l_eYwV$xWA$_BXQVM3Fx5>xq5n}J^Sdu-ZOor55P@#Z}8heU%;1hT94d-FH}4k#^mDhz+sbz zz$bm~{H?{a)CVsCUw9|XlZUu~UGevs^T%fXgTTvp6h~m#%Z8lN*YU_VbazHsV-&`_ zv&wv>g%XMMGL`ck5w!%Dy%vepqq!i_PJk365@B;5z}*U-et0rPJ9BarRmSTMxXXM6 z)hEQk4%nGpCr1h)Akuc$coBX zZ~Yif{b6_2%<_BcwZf!CxPggZWJ#+oI-$Pv23^3=BiNy{#-w`>+qp*Sn2`4{S;%co z_U*8z5Mk?JmyiUknCXb+gvx(=@PLYvo$CgS1K(=W#sqZULi zhjMyfA8<#}FL?c-go2RUV`q9MUmG^i&>|*_ z%_3-tR{l!8$Ym7i>G^tL&?rpSqikykmcTZYUko4YGjv?bFP1W{N9LIvUXM;5(s~3? zU7PwAp zjm6^u!t+{cJeZcGMFxU~9Cybx|1`xFuB%F)yaA0?R5V%{TeyKaff~rKu};+WFbLJ5 zdoa;@(K(oUs1Dr&KhUQ6QKBAbOc)o?jLhR{s6o2E485=}hU7H#o zaBi|9m{;-ifQ&AFdL8wTf6Ir%vc3Y52!+DDQ6H{{EzJDLnI685AKkkcS-fM5#jj!U+!l*p%i^6{ERHFi8IH7Ad<%=`wOIUm7SC_7_zf&x&|>jF zvv^^P#kaC}QH#ZIWbxt_i{HfJom(t^GmBG7OD8C|u(;M@@mpD3Z?X7oEN-+|{B{;M zTP(hf#a%5Hzk|iC7K`7>;uLIYM&8BZT8qW+W^uj6;`gw)(PHs?S=?-~_GueFZc!cK(jH8ztS&9Xfm;m9P`+S5>8 z732JH(?5}t1muSi{uQR2R0yg#RPLMUjKJ_b}BYy?Vvy44;A|YehIbMSCA4J zix7jJf{e&GWk?F&8%4bAvdDO`2zV@|GAE?=cCnl5?CW9|o%eOUp@2{A>w0b3S@Z_n z0lWGlMChh~i9JO#V7gBk@awO?+WE4Nu?Q(i#MvAcoXj84R(rY+Kq z&Cx5M!k6RKCF8JdFT0l=0L;`McwIp~^2RGpHR>34R(N0VB!4hd(QFCY*C)?=>-h*Tn2L z8f5aZH>1-u=-{7TeHJ{{J&4%r)v)x|J;cV0I#dx;5A%L?-3~F1{tJwcvoSIqaz=Cp zPy&yZ!-R_53V~G5gqb(ZpMWISb5@5vC`0tB_!l7D0Ow6D2jaCdCJ(`W9ggGF719EK ztQwl~W3_^hpkq<~20#EEc)-~S_7)aeBB?filPvL|h_@iwNkhJ#DQU@%UC7as{Dq!+ z%1Wj%4W-~uU)1ips&C-0SC1S!o(|pMfup#)*&X}#F6x7rq0d2lA4Yt87l7)uh?dzq zEJjW$-$mtaY!Hg1a2^_9dZy}6w!=}c6_FVb=@|4E76<$>E*urrWH2tChKMgeA719GbREvlb)qkpm9UIr)6E;Y7H$-9g)c=ORAX<=8^i$}hZe9z zHICt!NxiM(+){a_*K!?-VuuZT!pd4Ku#X0dhJ0$wpu$j&>Z&^Kn;YM14!R41t)2bn za~ds`LL7Vq-0Q03tSM83g0|yghccsc5l}8pGB$*_qMS?m1nee9dzq8x@PU)^ zC6Dr^2VloFIyHih$6_r(-{BmU(!x~rjB>YKd_8-4-ol*+7X^xEF@od?=57f}8>BdxPDSWRMQBdx^7 zPP(|EdCL>BT!M%ckNd5V7Nj*0LZ)#aBDsoAPYQV+HW?- za2$H_`N@4~1Zh%t8)^yWEty*~QCA*A#0xuFZaEd-(n`u79THnh##%VZmfYjB?GuaM zZx;@>+$i37m5Rqd!PDHc%v@A0vTy>f6e>?yWvutaD$5fWuCiXKvOFu13Ki-)+%a+W z#oWrBz6FP)PX6$L=n3H#B4go$Ygc2y>;s3@O=^f0&s6SFaH%4CK0M?)og0dmtpo1N zP_&lqk-Zyo!qfkn6E5i+aG%h-@gZ*4K>=HJaURDn=5vl`J>W47>D}^Ud(n%qvbC6D zsVfC?99oU-Snv6&>{f8)MA@mhI6bBn!gNRVn1&VFFxEIV!IKm2;rHNnL^@2xDFq`v z;q~xZY4!NC9*v@FYyC9Pjp7}!=&xKc`E}_Ap&naCD zqhW3Ep~?qrT+wI?OfK#LbZ%#$F%kbw#$PEPKnHAT!hLqb0_K4a6BP9e$B%4$Sn)ged6s6 z^Tb;gmJP+%{zh@oB`} zepf`4CJUP$HM9mF3_}5MQew`E8x1tY3Lp7 zOx4hx7T(Z*+N!TXBcJ1QHx2@Jyj^h5$rS{{pf}!eqMKmrC{6=p#l?Lm=H@1iL5P`% zj}gJnzZbo?FU<2?6(h?I*-qufx?nChe)edGJfhqa>hiWFDxJ=lwd?LE4h3W^ZUz0A z%1{>c%hcK@vueN2(<#e)I3YLH&gozMJxIdgA!-JkS(2)|?Fa^4H0`;eXgzf07PxgD zlC50jWwhfZf zM03J29vHZzz$un!$x4~i!*egxB~BCSH@i2vEQjkOt2k2}In;^YlQSY%;$p3@RJ4g; zIqJIWhuSwz-jA!EuUynZm7c!g3w1g88e<5v>uhJxy59X4T1-BpJj9aB#< z>xQ!sY6`pZ;+3CrHHj@*mY;DU_JlU6QwPKa^I_a|K}@k;FHF%n6D&*C%h6L1{f7H4 zaiv(Md-Lb&kxMzvhU{9@JqCq{)8njnV%({jEkb9Z{Fsp{mthJ|*nts81i?=g?+2Uj z(x7(m6*0GoCDkMZjn!^r*qk^C{I^>>Vx5?iC4Epi(%Ty8&B@9MS6>D#DCUL`eIb8A zvSnwKx$OIAMv#^)KM3q zC#5zBPc5aqAs+&88@N*#y&U?tU>4O?)eGXfShDRgJea(RyId4Qzu4_FHB}1b zWT+h+%zV@iPFmL#7~@Rs;h2b7HT=swPp4jpLynX&+9#KBCp~h7lrf`}F&Fzrv0{v3 z#p=b_9>3_+P092Aj5q(%jQV{jq8xAietu-t|CJwY>R-nrt^NQIJ937(oK2A}(3T%- zs1L8g4z=Vpez@xPvaIBjNzdRJ=5h%yXGN-LaBC?n<)GKH&(z2WUgbv=lTAo2u~f@m z&M|6UYT4aB)oVE*xdp@N^%i#4m$8l9e3Bx}Kt?U+Wc;=mbCSEguh()ErAt!#R+*Sd zF6Z=Ozz6J<+z`$FD=RJUbF z{4J-HwOX%b9Yq-ldup(^{6V9)K$TZqB-UU-p9l+lqa>3C(4 zxK=~mf}7S%M_1O3v4!t%x(HnuVU`PZoVbv;NorCkHIfHQpOuq5MRhODTy5p*4s~{i zE>FM+pKr-ST1H93)nx1k!#}pEojZc)@UCEK>{oM*S|Mg{@@oa<23TurHyy= zc~K-;6WNS_3QGfaR^(4G$t{20-+j-{a>>#nI=9ee`-nSdNGC^;+?OeCD&k@p$r2 zi4~pRWH+7lH9s8`8%I>BiK5Y>G}$4HmT^J!&&<>7Bo68f(Z+@erJRM{>ry99nNFOh zuxx4_dq%e}UY0xY@WsyJL3}bK&Ud7@!mQ3l&?gaUGWy?r$ZTA%9*qaOK#2y%{}a82 zLeU%9Gp84gPJVhQl;f?&(CMwiDJsr+BwHJL#k%)7@&4S{B96xC91XRO;N81GF8Mh< z=yYF4$UNovn#Isw5!=Wiwv&v>U-F-WF+@F=6^EUF7#-}*@QeOS{d#6Kw;9>L2bMDu z(fpX^LQs=9sFQU$j!aKakNksk09W1{%-q+1jV9R%`4sX>ACGxkC?VXi`p26v>fI@x z$70JO{@xUZ9`(*t0Lx%>+Sc(jbTN906)w5#2C6H@5kv}JN#dAGta*Oot?LZyfVGw- zRYME9Q{2)fgLaCi4Z2v&HnC;977>a|cvHMeBA60vY=j8ERN{lKoo}mRmfRLz6Clj3 zuJj}1ksT(aEyabNm^=LhPghcQ2Lr%4V0sNAp>mgQyVMJ#hMMbo#?*s%flBKB8#xgp)J!$=u z`2e^OdnP>QB)Fru!DA6-58RjMyZ7;<$w>#H&$RVw&@bmCwvDin!j8Nle<>*=TQ3O!9f+DN>OBkfmdebcT{lk78$qg~U;<2MbWJ z5$-P}MwzX!z`?edxAD!roMd@-4|AmWyL&QM;<3(d^q12itJyt+Iq^9a8c#F1oSbAw zuo_c*EB`eoD>$SqaFEzqp9|SxF7C_{4u2F;@-i1jcyp9#Lc;wz!kl*lE+1{A;wh?gIs#_ zOBnv+xG66Gb=>5&R4T&5S_SVfc1{Y()QtxQ%+JwrZ>9M8wndxKK=N2lwkqq6AW6=( zfX~>dhJi4Jomptz$82lVeIgGTMe9CSW-hCtQz*dNuQ8m_EfH%7;qZG{iw)_9Y^q*GkH3IV&O_ zl!9~ABF8>Ma4MFO2?)ANt^egQeo8&B@szrBKY~>0`0t_Nz%3-FBwGSL4$y}Hv3zKe zUp`X}Z-wxdfS>*PaXNTrO9D*@B*Z-?u*U?PJbDY-de#QHx}s`Hbx#v-?|=@&LV$)@9MI>4r1+4L2gusv$VEH_NpKsRGyHt8_sFOPL& zGfwNx*hDs&Y+A`C7rSGd=>en>EyN9qIls*hSDl9)5nraV2H`#!Yd`eCY!z#IW}oVu z*<+FIEp$5v_Iz~DZ%~VL`XuBHpuOa~KJsx_go1hO&rshCZyt{8sE z=tRB+WL2kj8L&#vs?;qzHDoR#Q8x+TfjwRFs2BSjSS~@930S zBCqfNgXSWSwYC?J!Lkr8NN7gg@ByV((Ge$nkIYhd)Y4_;U(gyC+*}^qEqEBoyp&sApixA+(E7J_hAHT7mQ+$pOP_$y?~d z!7%w*#Nllmp6Bo!uVaxPx9~d_xZGvN$MTiG2{(x%IBNIqcLD}|1ayuQ zF6g5|JBe1%9YR$sKpzvTA_4liP!$ExCxmhYQgC%J@}$s0Cq70On=s##pI*!9E-Kb* zIlVs z9Z#oiH};1tb3%XEw&6y@LF8wt%Y=v}hcEYH^4sBRFFGfl zz(v}jHAELOfe#fK?z=W2r_mdsZ)Povd9H?OY9qmP?Itu9dEeaGH&u>pn@TeAx#jMu zl02)P!Ja^eiHx2H60vJ=)Rdz~ziH@)wSxWCGf_MYV{Z8asL*eyNdN za4wwPB!ay1;HWoFr$w)~0M$e6Ic^d&Wv|D6MwwZ$R2w^&DpNCHlq*!cP2;WJ4XESL z^jb!B|AXr!dY||h(aivAezPZaNO}d&LG}iXlH;di1*99HmelZfTm1O} zf-z*}tsJJHLyf==&2tcZBhv=6l9@O^i*#apm$FALiUWqB0TAGwG=8d`G;SlP+Y%Dm z(h%0b=P6=<1xq3iTy$4M9#X(?NTf8tL0dn7&ecu)?c?^ zVyR>}+(-|^zHT5)1qE>6xXF>xfAkya85dU0jk|a1&UF7~@h&_`uVuwJvXp0}J7-i# z0&~>!RM#=S%*NC@$%Ey}4qIgH(8A&ydh8V43NabOc^#R{{ZFJT)MDB8H|{xBH~4J2 zpT|Dq`+3}V4T4`x5CYX$gu`nT>rShBIRIa|h}JXF0DjvYb>nGAF$=RYLVN)UyGG$$ zjP}KrM~)%XJdW2--8e3y1lN0_7#Xb;%{d#<;%6h8b2ef%*^Tz67?ym&Cq=fbyt3uh zY{$z?(Qx{K-pE^rZE&zqC=!N#Y_plNy9J+FaCJ^bEWT=^z8P`{;)T7-csljSNyw@w zWG%~xyaF##EF5rypfUZwf1cxR66b^z)2-sH4t3Nvo!NAo4(B#0t|pPjo~DYl1#6D2 zbAW>rn4^e;+z;Yuh0KewQ7L;P7~}^+H2#i8<84uAx53I%_uOI-k~^=K+PJr}PqbGz zU!8Aiw8M^jFXRO3kxTAgb(eY+f|mG7Syal+?C;@_@^sB#yrSGsSH`Rv?5d^5t2!b?h zs(coQqfb3L^7mPcOsp92MV3I*FS5W)xT|6G(CuGm=5&&Mv5x!ZBTkV42%w(Jwc(RT z&S}a7wwsObcOZ#IWItzUE!#PtF?z&tSyz=^%(wa4lqB=@Cy`M5YuIz=7rvyNPx!VG z?hCd2+eTOp{r7JhaSYLi;o{K$`nFN4|L|?2?Emm>qb3?#^lhV7zw>RQ>?Yqf`YUo! zRyg>!QBNnM)Fm#5sqemUQ;@80kU13|RllH980CBt^21n+9vo+q&ekS>@8@(RALn)I zdq4aR95Rs%Smb|vEs90{``4nlU&Wx!_p45J^%4c6^UYi9#OT|?O45!cyp zt;Q&A)s?})v7EzR((^M={gkIO;l?*j*o#po49$dnG>FV>CL%2Eds;ImVR5JF&76eA zon|z15*BwVZ{{Q{?lh~JlQ5ps^ID95d`V<7L@)`Q!VfizpUTEmNf#!=XDN4%Cx$SN z6CNBs9vl|@a`NzC^^S^)Mq{ONtZC`VBmq*!~^#Ru)>pAom27+HMb6`61CA@4vbrd>nQ* zgpc(y2lStmp_}CSqo{1CfQ>s2b2v??1oEVT<4zl>$tW)SiL|6!ahKvAT~6wT&XT{5 zHxD>(DDEF&j(ZSK`(&8M)x@e6oL$Wl@2(=c--g|UakTz&HAc5Tb;9t$aN7!gC;+#C z^P)V)^AF>VL#pPtGx+fv!S zO&W*tcsq7Ir9I>H_Uv~YW@AmG!EJ@ZydrryT?e-|c>kjwS{@RX!>4gj^ek9_!aQz){Z&{8haDDH z0A_0e`UK2_{kUEd!Y^Ph%zpZk27ifKHMI1_s+U7=t+88$!-|DHKtsf>zs4zgfX?9H z=ydo?!}~weM9UP>@+2)0RtbLr`U{v1oiWkk(Uwp>*eYR3+EPj16<}qQtSy&3yI$Oa z+A3j>YR}+e%0MuV*&YdfsCJR0_Mn7!ns&K__W}F`sN7-S2%7`OX+I9;p?kr&RDwFE z;bBKIPw%4#Xgf26FjB8ZpYxdGHdSYxPiWUlcyom92II6Z7Ri^vSm(u}^KaTV(Q=cp zgJ4|lkAQjT9~yRd5yBJVc1YVPlFtfzN82OpHDT{-uM0bj5M1=J_O+z%8@L7NEA3wr zo?)aIE_AH_qLm1tBf7vwRv_${_N};KLJBuS|4!m^iorQy>EBBTQ;lkBOKvcZ**Rb? zOj-~e5?Buw0Mmu7gTDYJGK1tbU@l4pxPFqvK#z; zApVN<6mk1n;!>=qiyJ=A2rXTiA@p>U!|SPc5XrVC=U{Iz)=~uKqW*fWgno*!p?ayf zjS?-xz&K`SntgN^%CtXpCes{o8w1A6!}Cn8S(EfJ;%}vSgP8|5PQrTxp?heuj)@z> zdx&l@T{K5OTO|JmH)eCW5>S6EXkApL&(nh7TfscEz+ubKC>z;5&DaCjHc)O8>u=)G zp#C1ghXtP!d|B{K!4CwF0@1sIxZbhg;k zip-@Vb1iHvx?5~^hK0 z?FnCBdLPv$)@we-bRgTm1aqG6RbY3)Qv^>FoFF&@$dVsHCe{8Fc#e;;8fZuw4O;5^ z2IhL-OPZ0q-uE5wI>Fl+=@H+Lz-JkgU-3!5=J#Vlku4bUb3XL+f71}kb^f0E#QGZr z?-aa8aJ%5sf(HfP7yPH-alym{_M0QvMX;CP5W$gxlLcoBE)lF3yhQL?!EJ)O1YZ|C zB>0}-Q9&b-!)hhiMR17VWWhOt)q<-9uM)gR@Nr;I+LO2jxL5FP!6Sm-37Sdlnk<+j zSR~k6aERa-!D)hX1(yn5A$Y6cqk_)~9uWLU@GHSz1QU}vtTuwVf~A6k1xE^22rd^~ zC%9Gc4#9f_pA~#waIfG2!GnTt34SJcOwbH)xM_k#f*8Lg|&4O>?1fp@KnLEf@caw1y>4g5WHFNQNdk;e-r$N;Cq6f3w|f41v#t)!E~TT ztAY;z%TkX6XQ%2obzhMB9r~iBsce6Kss)?6R4;H{y!D zm{?CC#vg->mxzriHhAwuBokqu7CH~uS}<3zP_Ua|Pr;J~PZb;^SSDC5xI}QR;MIaR z3qCCPqTqhPzYD%2_>th}g5L{j=^T?p!F0iPf}I6>3icBmDmY4Tl3=;uIf6BUO9d|z z+$gwB@DagXg0Bm{CHR%#_k#Wm$rHgs!G40H1t$wm6RZ@RD;N`8C3v~uM!~xU9~FFB zaIfH-f=2|u7t}I2+_r*wK#jU&euUERn>oVNXt6@oFrdcn&DuM@mOaJ%5Mg0Bg_C3r;e z2SK|PhnOkYQLs?3yI^0zVSm*$3ZO z2^I>TEI3+lreKZWC4yT89~9gz_?F<;f>xNdWeRo@>?3%ZV42_o!IgrW1RoH5Rq(Lj z5y4}EiEUYDuHeanWrFhs>jjS`v&=PO-X{2n;PZk91m6}sDtKHlp&k3m7AzF(BG^lC zu;56+GX*OIV}ch8ZUM$;J{z;qie*;g%zxM#@< z?&broaSddC=y(lKjf|AbqoFb{6Z0j4*XBL~nc7Y~ zn^mqWJ9+H*7Zrw%C1R|Nkd_^IIcf_PC2uBn3U1Un1% z6FeOlqH);N578vSse&^EXAAO{e~6X{ULbgp;3a~a1#bbW*}g^(MmV<5MtJn!AL*&b z4Xi6UEYI)v3$ZY6viTL6Y!FLsqt{(Y} zy#z>&uuv7-ogV&OHeQes8L}dr?F=t*UbK6K3&Y^ zg>S-je&Hp+a|=HQs=9H$xUMPWu&xmE^@ZGC((`(FCf56ldU(20pom>_in_yBUQsWP zMkPfj1BVw40*)*C4(pdyMZFN8%LKa^y=YwhhN7OpYk^qn3EmEDTvc(ad824MG`v;x zIFQ$O8g1#!cxPu`$35AZYr-xu@9m7%k^G_H4}$J4Y?CS&0czB{3#WYq(4z5OxE;+9 z8%|wNd#cA8Ur@WI*Ft|#+tX_?@an#duk{<7yf4hF+SM5W_ZVpKw-rX|?g?P2!amm8 zi(9dBvkTl);5N)*!`#>lq6-{0)jbPrlfx?9bHKvwSmz1}L6_I+h&IyW?q%59b#-93 z3&jm z-E`?DmQKPTaXY;IOX{LINEUw%PvKeIM8_4zuk0uv_ingCp9I zabs!#U!ETzOyyvJDipKB_B8Z|S2(QDegf=vhn3pT;vU-L4jXJg5B8d3lJh}UPxZ7p zJlp<&8rc&2lV8A0m2c?$uWcI+~Ap_VJiebPSG|` zxyJkaitY5w*7`QEzk3#FIEHZCzJz4|24;H8wE+z*+q*;?*uYA?b=sf?Hqm>rc4`AV z-+QHYdIP)4d!072f!*cZrj2i4d%X{6ljxu-2h_n|v@+_6JGrQz_936HPo_Z*J0fhf zVp3Zt(|rvrS)W4h3tMgX_h;!d=rf0n684S5rulQ=_HTzp{T;xtC54}=tuyFU$wXDN zX3!jQQ?+gejS@H2s%Fq6VVfy0xE5MwIjl=?lRlFcI;=O`X3!9g5Bz{`+~3N^XWmw=&9g7u$>L;4X}N}HpA_0eF429m1{G- z8vIyaNW*cMhj`lW2dB^?ny4847<^n`L=_EeyB?!k9Y(2Ru>1a?!%|bfz%J}gVJfey z$&?Dq<&cIw(gnhH+jpn7GHPgv!*-;G!Rj5hD|HGjrX3F3o4Q?JOz4pDTYuH9t-E?o-S;h)duam5%<(Z?* z6;vS2Q`PGgR3hv`drjs>?vTY9Cj$X4IEMq@SkJ_j9|Rt}DpvFsuDR>k8`RFpkT5>h7?V z_G`e(9hTF63T>b&hjnhhUEe_U!gkwdv_EWJNvjm2`RzXd`_^ISw*M4tsdTR@)*I<5 zhjFYo(M!Tqo^7Hpg>k90b#J0$4J_ZinX*T48g@$v*U+a9;}EW)Eqs9NjMLZBhYsTq zuA{FNlXzZ7-w9i7|J?2toZbB5Fsprc_jP1R$G=)e<}H-yFdmt=P`bm;@34`sryPe} z*kK)5L@~trH1`cOK^T|&D9kU;X>jZA-bx#Ut)PcGjG-IpA>~HT3OneqJ;FX#4E5y} z{YLuHVO&FQq~cMW+ST^H4%^|@*J1B;nBcyN#yjlm4pYHCSB%^p%fXUIi$6;5ILCbp zEgz$_aBq4mZE#p#M`pJ;tW?;e!Y;H=>p0%Lm7aIpc*MJn4mylSyxZt=#pukAW9T+A z$8rd&+;5|k9mb_{JB=3ho_2P}Mef^au`tfFmF{hHk+9YF^Bp(RowU(m`#P=zyWL@L zbzJMdi|%*Wk&f%ZP9Eo^4|Be|X{fMO(l+m=MZ#3ia1YfB+a*22J#@eFhtS8+J+!NV zJ+9wFuQ#ym`n~jpVzxW?1^qty)?q2RuYetMSnJ#yFe41hv|%-M&K-l7A=f*shp>kn z)?2h3aM-E2x4_?54l5I#$rB_+60`egMgzMKk}HL&QS^S=s@&{txsSUapluF&Jog!} zcNN2E_`Lf;I@-Wq0Xx>f4!9qppC(CoG8R8dZORnmvG`HSRScukeeOqTjN`_&X9vx3 z+<2tiL6R!+wU_V`NTNp|NVIOPfwlA_@q;bO3 zSiFa(3fpX-mUptfhvo?5SfA$JLr*$xXXg#IU!vq0taG!yG;ajh!@^c$gdGR=q{CL{ zO#*wyVb|oH3HGkTZpxbpHou(kTW#N!cZ>cqUEr`M^QO?twANwV^Sw+rIE-h_FVkHP zdp?iZ{lYfWj{Ga_mnkxnb#A8J`PbR6(hgy(>GgbFe~t2Iu^Xr8Eb}$$B@A=L{G08) zbgIL`_BODw!gdq)XM1V7!*~_Bmlg?QEssI+YR6x&po9K8?R6NJ*z5G3!+5UvIvsIX zr-JA0*Xe7A^(tV=A00NVpbV0(3XbP$y9}40U#CQe%@fI14m(%0ba2?E;}cx``>-c$^3_qh+!rwy#F`%U_#fjvQQQRr;(2g#%M zAu4KMKiTilP{r&{1uoAAbhg8`6>h^SHtMj)3Vm=}>M-tUKcsraq&NMLO6RDUac}w| zt#TOmrXSKR4tuFE#q%LO?J(|5KcshsZJ>7xzjc2|U8-2i2KuTn!}Afn*udI)KB4-# z?6#49DvWrJ&7}p+_^v@T6V83XeQ*HxWLtoH%VZ5)g&hsU$ao9ok zpFIDhSqsFUeRt7h^C&HH*uzCPc#hHqipd=MC|&HZCyP4hN9k%|YScbTyBx-~{A+qg z81H%9>;=vBY%uj zwA$Vcw_}v$us7lM3w3hX5xD(AJskEE+>X;ghb49%Zyu-7ilL-WbN@;Q9k;43`*1<5 ztXhTee*PQkx)||ZNnMwZo3Kq_nzl(vO6}3LEe&i9ZdTrBPJ9=6Hq3m|)rfcEHBP;mjjIQ{mJ0R->U8pN%u2t)wmn$}8=VNHH&CPB+6)(& zaUwHSWPWQ?*+gbO%qA@tNw(LpC(5C0gxR2L#dRwX@5eQ9WqYI!sM8a_V`dqHb^%S= z+eAj$zb*EkiTzJNU0yQK$i|*XQ*%6&rXeOmM%l+vxn_#rPC$ct0!Cj;QPd2B+Ri`tW$b17m8ch(JrBcUK-Iyjej5<{{aXq(?<(03` z#lC5c`aN^M-mFK};To9ZHJty=UW3?Gqt$|c6ea;DRF5*BE;7m&w<+C8QKQ+Qi6S$#iR5qfREaC+JjzjGqGULKblF>q z=asToAu8MpzdFv%*l$zKDy2>H`3DK*_ev+ZFXu)Zph-A1f;Q#1sZM2XT0^)d@ck4< z72^5gSJ^xQvnnrxo)Y_}+EhuMnZ|yn@e&__ zdv^F&t$_wj2AVVt7*9oGiNteKQF;*&uY_HQ{iI38-RYKV& znA4;LRXM(ocb%K}uBz02uU~E2_cqO|mYBbhIMB%)XN7ADO`Ktb@Ry7G_7Obu@mE3} zapSi&?gy{JD*Y$?lNZ}@*^|)&9B&2$GsUK@V4h%C!Cry`1cwWb5u7YoE?6bF2>6v} z1#lf*0vtmdfPeDd2)x1TLAYaZ|8{W6?cQg#aV7V7%V|o%BZ66)M^1i@Xy2Di z!FTL<{{EA8QunXCnm(}mx86lGqPynv=x2BL0GD-7@*UAucTWed>z)nVlh})nXqMg1 z7tlFpGJ#{Lt(aNz6v({YeX#EV?V$T~-`Bu#u=&~D&euz11_0O50|@t4=*jP~z&Ake z+M~wjku#^^qHT=+uO65Cs$|qI7hhFk|Co04q^-V7kkZ?Ik7-X9-2=_}J)VFh-}d7i z*zH>+@_V$QrG25FcThLL{vF>2;{Emw#OwDBR8x8csasXbXo3 z{CDVFMh`%K4BbJ=y;*Wg!3mFPu0E#$2bYY249}A_e6i`w1e^^chI@eTB7e zL;O{EMSOT-SK|H4DwK6q;(l#WpK}wBXgu@fZ$6EY`fzFD9@MT4a6Q`lPl+Dmr0$E{ z0b_fg>tTMO&uxi!=%2V>1ai0=h}Vr9=s=%5r0dN->tOS4pBGTR-}E_{xF0cj7x-(R zPZA%~yY~GYI!pT=g`NR@H&Px#dHz}EG*IB?- z9WP8Cqf(^()bCHpd!%3D(zzkoMqi(Z6J(o$`19la3x1QKH87Rh0W@L(Yv^hem{Ky zd>HrqUD#VY3j7xL-d$Mp^aUQHlYyl52b$VIpsfuC`n93JWNjEQRXYusp^X4$Ya@YS zZ8WfhHWnDs#sdqriNG#e8L+!H1z4(`3GAy)1NPTu00(O`fy1;4;0SFtaI`iDI9{6z zEYs!z&(szGXJ`w76wO)0O}iYD(tAK0q z%~PaQ=k)%lFT$G*$8=6L8PzbG#$uptoNM4ME~5^ZYSaTWj0=I;#%f^LxCGe2SPP68 zR{#r*D}h~%tAO2&tAVA)b-=#H4Z!}!jljXiEx=*M?Z6Snoxst?J;3qC{lGHgA>f(D zBfuHPW55dIN#Gpg8Q?tQIp9L$d0>t4B5tGK1bB<_1#p}3PvG6gH^BRi?|=^*KLU3c{{}v390%?+G!r*M z3={aG;Re29c!B$j1mFQ98F2d*-20JH5r^cDl{vc6ztT?eu<=+v&sR6Oi9w?gTz* zJ`db!z69K5?ghSR9ss^#z6soC9tIvTKL8#yxpf~hKZW^S^Go1|<~P7k%^!eYn8$!e zP0eM~x26UB(ewe2naM!Hn}z5}Tv;x(I~TX^E-r4}-CgCdDRoJ^b8(C7@8Y&L*u`ya zn2X!m2p6}t(JpRl<6Yd!%3R#a&UA4ro8jVCR^j4SHpj*7Yo2QsbS`vN0&84n1DCq0 zfXiIx0P9`z5tB78?w8iOxTMy*xO6tTxOA>|ap`Pvap~M5GTU7H;d;00T==@*wG8;M zYXxwJYc=pm*JZ$+uJyoOt~Vh0qU$P{UvXUv+~@i;@PO+U;6c|Nz(cNkf$zE=0)FV) z0sPeU6z~hzbHJmn7l7ZoUIG5-+7CSDdILz-TR_u#7ie1_0sYozz+~&6z*Os7V21S* zFxxr~3|od}QwIy%R1~oifQ42Hu#1%r>~3WPORcuRzWAISYOGZN9Bg#~4zqdyM_9dq zqpeebSOlu@?hBXdYVU+>rSZ4v}Su=qPt+RnO);!=+YY}jnwFFpi)dE*p z^}sdOMZmSzrNH&p6~Il_Cg9c9HNY*_4Zy9|&A?l%ZNP2TJ;1vK@3$U=`C;o(;67_7 z@Sw#dc*x=seAnUters{Q{b+HC9J9Ct$^8@LP4{u2?dF>7cXNA5c5_=xb+evq zH~S5{Z8vhyodAsBL(9lLaqZ$xhk3l4Ln(8!&NJNuVDqH-+9@)-+#Hh^MdlSZ*QI@K zu1g2p+{O>Oxs4x^5Z`rk>;BNqsla(Fe08xo4&CkNaqqLQ&3$`+oBQ^`HuvqrZ0^-Z z*jF0}-R3yV5MLGIYYu#&6l@N0q0K3(u{m{1ZBFSjn^RqHa}KPsIp%9@&Y86~=hAxn zavQM{ZSRV<4@Fyshy7-I3Ncofdd7Pasjuf8V1LgN4{D3&0^l&uD&Pn)kM>;RDW+ER zaB?xupq~m9~6H@6`Zy0|Sm}AVw-yHlcpe?=`#undf7=2gj0nn$&#@wXFy&*5(u{&wS! z@TMrQr{xPg^3?>?F?m}%1J9GO&cw2vPQx<`&(raA<2eFPEX?ud=w9z(Z^YNfH`Q0` zyU_P1-^0FVeSh=4<@?!}?(ghB#ebTAlz*lFY5&{)fBJv&dlE7d@)J%;n3V8E!m$J^ zaZKX$#Asq&;=_rrCcd8d@5Js&QE@(6lHN%ACMhL3JGo2pfaFt?E0fPl zz94x`@@>iYB%2Zs6Z1F=t6h9O9;Ot`=R)|m?$R-r%ff$c@o(#NKpEvCrV;9bbacbo zxCctJKTHGge!vjCwL2Q=AB&mZS+JRbQY?qwR4UeXV4Xi?vyIa8fw2VUbsd)hRcya&&vB*>j7`(K zwIlnzz2jAooRQ0^J3E(U7UbRmoAI4~0{%AbNm(pYAUIPt*Vh@xAvw1b8akcZiDRqs z=jl%P)}E6~DrZzKx$`2hKb%(u{48%i@Q1u=;4hiy13%D~1GW4MfmS}Jt5EVsrAw7d zFrQ23%lvyGGunO#cv}JIywb1A<&lDyU_S+Ih-g>AUYPe4aQVJlz&4+V>-S>DKW&UM zdZeJUhiIzK+Ei{VE#j2!D&q1wkbE~>+jnNaksgi}b*pDcA~kUh%dhP)Ds!0QSLcR_yDeZRn`qL12Hp z->svbrvt~pANJDF&*82!P{;R#TLUMf)#x+>tp|6?f&8VX_At)^>QqS`VV*5G2klCy zvjwZrx-^vREDRk%kEvVa1+`pcHIQ8LYvjGH*hNOCK?Wzn+0!0f2CtZ z#(0~&<$gO*r+aA>@IK^$hBew4m>)nM==2~>0B)yAz(Uc=gLD$I|ekI?CH znhxBFyul5Apia*rZ#29cKMUrUkwZGYf?Uz*ReT>q!?!Tbf%y%=w~!w?9m3%o_7|~N zqS5zYgfUq2dI-*`xDToT?6#v z4SSsuwCjP1+Mj_z?M7g#b~7+TyA_zJ-44vs?f|yZ?gD0O_W)aK_W|2z4*+wthk#*i zJFuO=uFTkO=A)(U*?FGn81nM*i@73#A ztG*1I$v_<~^i`Or0(Goj_riP@5dW6Dwjbu{g5`Ms9`zZBI;{N-=9z+(+TUTGt-Xoy zVVTC?2)sczDAe=fp7$kwpV(jPN3(6bYoMJ%OXNAgc@DzNgYAbn&r|7I;lt@ZJO^v1 z(_d_~H0=y}N1mhbYB+PWH+hc3?1T9Pnjz0gbe=pX(*}7?rET&&i+0L$I{jUq<@BXI zXW=7p?7xz-<#{%h%Cm|l%JUpLU!L>nDm({kQMyZ>i!f5NzrA`LzR=TO+pllJGour} z;-cG_0?ftd-S8C`-JXhX$LKre@mF2Udfo}gC)2-_{bu^k^JX_?155d7^Z|Of6YbR3 zGuUVRhnkLkbN*^^5&D86jK)QnQw>9FDofaJ0(d?A-T^XvN}rl_%5i1>@&b4l7?! zQ9QD;rg(H^tU9`&d|q+Iym>S{Hh93e=&W-pYep@ssfsQbSw6q=1bO9LO_RnA7&BqW z*vaFDjHgM}d5HTNjG2UJwVDyyq$T*bn%m9wI;it&~6 zarL-aga*!ATv-#1*36-iy$0EZy3aYM#V96o5ssL?bc8a-$6!lCoZ z&xXQTAZW-)7Vtg7ZbiTllDw1?Y`GUo>%V*Urjv@I2 z5s49_1`QZ7ed3U@U7)Ii6G^e7fj^KUYrvvWeMsxglwB7-YAmctj! zj!H^~RhCyEz+vUFigU|jl`3JRga*wkM}{|M%h&;fhmTUZa$;$Zs9aL1>cD^+e9&m- z;+o3w=Pf+30L<(s=egYUbR^Sv5nJ&YDxc0CtTTICS{P!P8YPjvg>}z!~GD2&6t#FN`jz zu59E|KL*7r%WIV7_*nS@$i!-BMAd?GMn~sW%{s3!DPzkks-lf_bSzpEofVy@iU5fp zhP*~ipFD2-kTb>)KVwLf1Wc-0P|}U007lJL+2_=-;UmXP7(RBgV>;jOKis-r3#Y3a9`AzHXxFI8k3>qJA)lSYkfvUcQ=2xRjnO8NF#+`?1GT$je znplp?qH=L?6|(>T+B?_SNU!t0pZ6uXGfSpi@ z6o=ehxiZ$nnU~~v=cajQmP@4NLu%T7Hwc4ZH=_3)5btu zAn1oyDO@BilE!WwARp4WzyCS!ZOE0|v|rkSEAh;^U!L=v=XRbs6IM5yftha)T2V#q zzsVfv1X;^-omLkFQvK`(m($A8?z$1rtA3{qjSxheCP`)nIv*3z>;bTJRx^tBu3Qa; zuzXm$3g|d%^}$lm-i9uMl+8gX(x`na_m;YLJaePb4sJDiF1rHecWs6GZl&>7V4B_V ztq5M_cG$1BYxW$FpFO|jIvFvQR1?2DPwyb+EO?Nw4p&4Eo(c-_iMI*FK#V z0is^*SIws0Qj6ffHfZ-b$LGsTrq_uV7MjI5@jG@=m80nSTEEjX>z%86{b07&tL_n`ga}#sl`E~o-MTJjrFU(omLn}9@P2}lx>4(+T|6)3vxlVB`kBqe6G{fX%Vlo z+|=b_{OGVY4%2#X&*r;QvfUGOX8z4VwaJ2m{`G3OW0_m0d&lOAixDrk;ak?#mzwj+u*bE<9J*ir+33^2oOjG482qh`}4gX;3W+r$8||LrX6Km z4YnI?)fvjYA@X}TlQWr;#@RuC2b^rwAgnR9iy4A8v02@7*&tmv==B>=`-JYyw{@PW zR_okDW;t9?Zr3_39`ggC+inAf+74Plk5TOjVu$L{N-}lQ^@^ijOw2yKauYWjyqYExXAdQG>G5|6g zLno4frK)L_PYdWBZdiViF5e}yfAbXj;<}j=U5syvktOYIhF~Wj- zBK3Ffn6(>gk(_vEZGN!~$6U+iU7LS!?$Z4FJVZNMLul3lBsnJpyQs)hlxxrL0(5w1 zu3Fm($c1D(;j!F)bI<^@RwYctY;e%D~xg(b?6Rv-RSHt(oL1Vsm2J-nw3EB=MzILi1ZgGHh!B;RR_nv}0tN z*iq6}N)9ztM$$IZE;CY6%mJv1S#qM=10PNbPxN&=0XQ|o)MU(uEUNgzuXorKYWYwUa$jyjp@KrWTn9d=$ zB%YO&TYy&UW)L8=2wv{OPowhyfbKB?ySk_-UcvQ#KSn&dsl)>s(T&Y&7%U9nDRE*+ zifP@+Gbs0->FWzI?1s3kLuBa!NUeZa2R!-h2>W^PjNYn|@ioKDhO zfRt0ShtBH#4=S*ozH6yWChT{s)oGW*dW2d>H)ipc*{C;`*A=eMIux+GXDW@B!$-3U zrUaXqV_bR_R5_f*Azf{+W(oJA6!}IigS}DC5TZtT7RpGqwn>Vd8>{WEQBYouKER78 zwghsxB6}d+$|6Lz3#bT@ZEOftk>6I4O4ovWox6cztJOv?B9Y`~qz!6HkN;G#CwZHy zX|1gRoFdI|x}FKGY0a|I*@PsDQ$|S535=sQ*NJY>yqJ18F~^Gc?))tydmwLFaX?Lu z=5oj+$6_3i6d6G~(l(fN6icTQO(kk(xrPpUcA#Z|fU(bMEIr3mqSTJHM1`i7Or7uj zho)t1c&2A*#&Q({p=^wCEeHf!)cKlK$Yku&N@9gaFp1;Jk1TDOp+u@Ks_X#cf@Yn@dZT9v1$Hmpo=_MyiNLo8_=Nt#r=&r=`e?b?rAF~+5pJ^aq%xDyR5TGjovc*>U8`6U zHrjXFo!z#X=OBidfss<~Hma7*V+h=Ap;v}Gjm@fA-+|~sEX;DF*6W0wElgO08W2Zt zf^l`4YP1C=cG~MfZKvJAs3WawuG-q{HR{_zr2%6@ey_^L6(w#}A+^^U+YPK@yHI27 zZq-nlRSzvowk`>AI|G)uu6E;oB)CZ!MATla z^)rJ4`5T?yZl_as<_KB^yFe}J5J_&`4lGE*?%N;>gSI=}a8F87ecAGn1~PoLUo-PH ztx95LI|!@Ug)etDSuqrP9VPm{MYC;b)6u|{PIF*o`sFGc$o8Q;Lh><-(N`E$Vb0|? z_$Gm(yo$yQJwf)f#=da2U7y=w+*C4T?+~9FcRTZ4p|(H}jplGM9&Wwb*tM*%z1t9* zsv_3*%}%Xx2SLr=7AW4seb_uGdZQ(Cs?Cd2u11`46&vkr#V8e3Ov`Ssw3iyKh9z1_ zoX&5rY;9!<;shl!kVXbWdds9J!;ldm)TPBoGHzbDbQSa4T`g)2>zUdwhc)}DG}#O2 zYL>guq4fHg%2Jd~YATYeGzoo@2IxvgA1E=^W{eADJBFRf$m|4o?u=D+_4D8YaSYdo zl>z86bG1OLOln>d_VrG)Zmq&LRcSZ2wp{Xlqn}BsDhJ_iQkEnb!Dhnbpp_gz=}KlO zWmS%$9Q3B)DppCUMz?`&49f;F28v(9Y8}F(IJ+2e#D_b^pYX?5m z?TV#{QUN%Y2RIR(6RRcp42%6xS4+eB3EOu%hr3j}Rc&v`_*_9Xi~FQYVXDojNC=Zb z-x|`P#@NA)=6gxjZLzP&mdVnsZKcyAhRThVAQTrbw=oo86n@JpP=j_`pOu|KpSu`| z2eRcZV=@(6gUJuz>|AwlLD&P7;oW{m+|s3;f}11}!?UHLL_0yVo|LcFt4aJ8G+xS0 zl3}$7Gsmb=EK*Nhs?tI}a8X@*)Lk^A%tY#lE-6z1Hb#8=aUmTUExY9UJXhlgn9WT1vAe z@97L=a-?=HNbOAXEJN-}@ycW_bq10_s&_5AA!^xi)S;~zW~$1hAXsOz=Bh%{xD~`> zz0LBkdTWSXTQ7&);>NH5Q}| z7ppSX8%%kPF4j7Pn>6~#4x&M$b~lqn^`KkDPM6eo#FG;uJ4PlS9w0M|BNUl@$*X;s zc5hwKL#9r80(_8SdlR2#q8x5^D9F^an3i@O*&rea#HNP`j!~g_iLSk)q*d%m#^)u8 z-0ER;xrGq6lVpiIr8Ph46tB49^`HrDO6o2O9g#ZMJA3+D>ue$j5xE)cG-{v<(S^qL zpl4$d$eQ#{z5t6lA;EUL)3dfv`C}|sKiBCw7&=O3GaK!rnb}H+PL))u%3hSlE(%N5 zZG^EHeFcjOEZ_+lZ$Wu&5D`jkyky0|`DcK}%HP8fl#b*JlctByr?wzfo(k_t&$ z)sjS56+=U<B4vhvqERJ zcT`rwb-R~}07Boy|3SkZy{4-ORqQp5yPacu|WUYAX2z206uQ7ZOi!Cup07yDp2ABF!qgK#Ov;py3=l^K74ox5Tb3R%28c z$JJ6Iv21p6Jo3Y_$*gp)cC!Cr`{?Yt<>Pt5>XE>>*SWri)MPLEqIt&s4vF~cVAFXr zM3yqMiM$xudzu;#m|K<*na7f(CKMTQIR5tP#>`gc%4Jiotjx?@et8K2vpqeOx-gWw zIFz~+r{?y!;X*!*)3XqaG_{DFaW^iy9&Gl4-8f|jybPJgUV-PyVq?pEvb$}r_giqz zW|gJhn-dMFBS;W~>)l&MK!pRDdkC8-npA|QF&zE}vTrP)js!h<83~7?8;f3NOExf0 zyY;7vU==50b6A+V?+H>m&XG6YVro2#+QJw6fi9`qdb6L$J)KYN_vsjH+-dc5+>r~sH6ETO*^+qUFJnUz8 zSk(_t$L?3sGCS_!F{AMgjdge&jj_tDGyYjyv05mM7v@`k7@M$UNmDa6W*Jk@+U{+p zi`raA7Oi^R$j0N@nV=iXVUZ1rt2)@M6n!MxCer}zxd=!sSAw0;hiiH#G3rmxvlCX7-Z-^ojNlhzO6DjxV)p%Nt?VEn$n%PKv9ygO1v>}OOQi+^U zn>HfCrAe1VSD^G_3AYr4_MvSk=b>(+71)o?afUT zNYlM%ty)I&c16rFjtJgyJpN1$tAp+j&bEe*NREzf%!N_2sHUyW<{qM(cwyp*mMswP zIa+Wnz_g&7oU~|esUitoml3H;ThdcTLraXcY1?=r5w%YXJUB{vE$=6wA2LMb<)jck5)2>|lQ+Qk=;`Ksou(O$gHrm|a zKpyIrp;^=E)rMTkP?u!tTnzfk#EfSBg|$m)bwc=Zh@geoAP*>uzuY#h_IvWToxd+z zFqaw8fQJ0oT^C6jF5KNS)^Ra$Q?|p~4z2qjzSIqvW!;I#rt54tmMKhM;Uz$2mmzgsidEmQ^NPUaL^H>XO&QyVu9mmSLb*2?GzKL#5@OZ42URj-Ws_({5`8&>m+r*#EZhhBb zO{5!hg((SyFWvOI_+*FYYu%>VaT-#0vtMtB$E{+%xr<^xXhyN9@m72b)~zKpqbp+j zz!cvYi1MTPZuYl&UDJ(5+u_!=Zn}18yVmG-6&#QQer?kUgwfE0lsc4Yl>qLV9GkiG zh+Kt}#z{`R?s?}J3463HuyZAKE8V(_$8|}8hPL7$bcskl)>k*&ap~4-J1!cxich~? zZ8AY*#tjZV^nuIkST7-pTT^n49cL%E)Lk@q^!UDxN!A}TJt?2&YZZJkw}}ZwJJqvF z!Tc)kQQwc5x;?(m(FuC#lmho{LMK{U3x;TBhB_qVBR=CC{FSXWee)_E8oVMY$ox zi5tZ2G$X@V1Zv6o)JfDbNt`nL$9KX?TM`*(y!+X{aOLpXzH))H{q7B3dO-aPOp-ed z%ZK#6CyifL1Oz~9c<@fDwtRrl?d^fa6Q zEp}I>AB&nsZhdiSBnT&L9w|gOCW1xmtb$26hDan!Sd@z791;GAf-iChM@m+YC}+Ln zWRKALjfj*vtuwOH0yFvOSX&Qv&8Ab}IiT9^^-f=|+ciuqp~>20>pIA>iZzIQ!rV8b zENWRvNIkfVWhaMVG2pv&IFl!AR0PL<&u{qD2f96;lfh73#0Ei-Oj~dmor3`Mw>yS8 zRZ#0$s;t)bOOEMixanX$iY_1OPPu(uMkYIoH8fpI3{A>AlCm|g%lu@UI1`kj4n|RK zYKr30#EM4_s1flqeKrW4%^d<`rMBx%1aa#CC{W=T2|16F591oB?~wr_GKgRf3;Xtq zX75e|F1~ySYSUM$Ky5Sr3RKK0s#a5!41vT2mzAx+m`AFn&VM~#QwaIb@GJCY^2X|@V>x9*X?*8q0~HF;*0Gq z=3rCrFYy)ks%^8yXN?gDc6mKles_a8X*R2rHYiym^(J)$0IjCas3m%Hr6rz+aI-Fv zQ(|pcugR&|KDKDzVeAqQSu_|E0g?J4>D%;g_P-Dhra@X1-sAJyP#11E!9Ol{1H}_i zx7&31e=v=gZZNXjr~wP>lIoFm8`YuzcbWb}Zp#H4GXieBzDSI3)u zZMLR4+2Jjf07>0E8pqDDZlNQ;rC3PwwivH#yiBbS>AuYv-mQwAiS|V+>XR=t7dpN> zG&iYL;>{B``Yq~j9zrma!#SN7U`%e2w^aE2;4-yzEIO>_2lZ}F@^k@hZu8E?x_KQ0 zn+N%q2ygHn%euMFb2o<%s)N3E93z~ay>f)S4GY7%I~3DdoGgQ(M-T5M^0YebI=Jv; zNT2ck%`)>W4S4~4`Czg$Lp%LvFLHpl=tFBh&&&k_?Q_TW`)=zO{6#oQK%i+4tImz~ zVTU{&T;bte;trpcFI*YMAn4j7O={Gr-DG4P(Lev1?XJhtmKZ>X&2@U1dg=5FklYtg z!+}rJYFGpj4HVT8khHX2LiJYS0S+O*XhVsIu$0n92#J*!0tEB$9MciyY}3-bv>q)r z3%C+_SgC2P{$0;CT4_Ey2J}*n+Z_c_w*UWyo_J29%+?%5g2QW@rcS)JX;xQaU7BZ) zKT%#CQZW^%^rM1P73c;$OM*uRNHCoDIUu-Ao?6|f?T6_JCj-`K9#8YSq(zzA#=JMp zz0V^j_o8j}o_J6`UmZ8zkrvC$ZrdDf;f{C!smS(a=kkokiV4Vv?U>s6P3ELM6q)co zG+amAvdQ>@#yML{2CxPT8#)<|;XFuEFdsbHe@b9=tYcPXMrMrp@z2lw+CO`G^^WBJL+(}k%C zJ0-=&n8Kvb-1ADQW)d%4rhlL8{jZ;%JfV80C+WtYWZJfN^m+dTebe|PotzyznL9f+ z?qa7W&+Fn=o!!ReE-C_f5IO%HAivPkBq;vUkH<@m9Upyfv@lt$Q2ZXT2&tUbdTiaB2eR_{D=$dF}PVslw$k zW^!=q1pChilPqiA6QsT3{^x}S$}z<<^Yp2EwzxwXA-nGDqgV!L6Ry%S)6Z)$WgiEP-~T@Q{8x=XYy7LmpJV1Zt@x6*$7eH6DsmDy zpA?qvj{;g=c2+Q^fHx2KdBNGmz<(tP%qWiu@^YAx1ZMOh1*a4|tYAXHBMRQDU{V1; z7{iN`3Z7JOM!{JH?^E!81y3n>TER04o>lOig69?RwwPgi2oSr>C_kuSM)`dY9sn-v zzoX!*r%IzDMI=dRnb03Y)Q0b9YbOcLj*W3f$W{0bd))NKyr1%Z#rvn;*S&9ezfMk< zzy7EoGRiA#tW3da1&=A1RGF0rUv?C@3j-Rsl4_jPlzYW^_uyB?U7IKBnMR1=kfAwrx~s|xlN@Ejz)D1fBWi-OY%9#g;rsgx?<^nwKnpafJ=z=My5 zpT1H+3_yNn^!rM&LHj2-if6|l3!KQw342Z_N7QY9{oc%?Mg?#PrvXqsF3;-71G(Zkvx4V#vT)ndTbaonG&*t6Y!*|F-F|~ZNjsK z%bHK&vY!`4Iw*-7digVIN(Jym)Xn$uVraKVN<3;#2WL1kyq9i?8}&Y~1zfXDK5vKK z|1#q>w6=yFuW>>|Z~yI_#@K&5KVBNOpS~}0SlIuTrBWiS@KH_Kz-0xA2AxtYmVgGw05VWzpt(JGyUZ5JicI_m-M>nleQ_|bMKCB5om_vHp|2DjdHS}#?UsV0R zt^dV`IFFXpK2dx^0D6Kl7rd;gslPWL)|ovx#s7sj>75mRInOQ@F4Mc(t3YwPv~dDINL1YaSp|Ox&<3vUH*MQrd`}sf>l*UkN6-Se z07IQ!=D%?zme85jO+HpcN6nA_Wi$E-1s4ezRbmg!4!MU71C%+qfcPH&gBCgV&Yxg` z2a_86ZNX;Gj{3Hp+S|m>3KtDnDD;{V$ff`#?CD_AP4jE}U*WZ3GrDj1X$YR5g|H~S zR+*g^_9G^k4}R-s{!#Hy{fpoK^|`lx_PK@0)4x1g{I~z<1K}(G?Wcd~t9S1|{?7-O z{?&i@YhU}3XCC_3i|_P){@f3p$^X`$`Nqe;`K!PA?^b?y^V471?*IPp{n%vd$~(XC zOU0l0ssH$&f9vlSpSg8=`&VE8$NB1?%437xfxiBr5UTBIBO(Wh88EkWUfF;Wvs>6DI8 zdqM^5$wV=C3c;|Mrz_5Meu6li`>Lm7b#~(HNDc&_C>%V&XI`Jh+{q%7IXl5z6^xu6 zp|6Pv)h`}AHId7Wa2lVQ7|lVjw52bw)tXr0;2e1fdGFo-17?r>m$yVh>mDZoo0W(L zOeW5%_1TGu(nDUJ<;DMUeqk!l{PH@$g{rWh7*qdD;T*j%{8;`>?qT|}ViMa>412juz4Yn?ADm;%(=#Qghn4-35~3zs=r8g&1=#e>%X*_dEGGr`7t zR!lB&=sel^@yBux7iLK0*^oTF6<-6)tW+Hr4yuLRLqsN2XnUh9HyZW(NbV$i7;Psp zb^`)Op`g>6pdufFHZva|FC4r%o*OO9NY+E7gMh+AA={(i+a$XRA_5VFcF={{oz$N0 zSZwpJdgf#J4VL(}TFKprL{}RnUEOjqv{&kPN>%$5iLF$(j$@^$7TPA5`;up-<4(A6 zz>aUf-dx({nY%a@$(<^ z%$0bMKlU8KdS4XsVK65egq{H-1L!|?jq+U1XP2R)0@;~Uxf9wMm>}T^Gs4+Gzd>yh zNb{3O0PMw=3I~4??#a0z4r4ngJ(_!{c<=>~<5Xc!GdbJ5zvcId$2_cCK>(f ztl~`mk=zNJ&>CT<&@}N+8-5$|UO4#c@SoZ7635&96DFRdgp(s6o;h>oA-Z>m>EJbO zOmU;QkwbLWKY-5AoD_Q~%!p8zW_*m(kvA#KKT~|8csf5p%{K&O3zxj$mp{$+Qkv%4 zd3|%70n5exUvz@O!6kbN#u<8Cl<-j~;lU}^o+X9s5-cqz1(cHvOi7N9Axweqk8=tE z-IwU#%p{+JI24VK!c<}EanGEd`^X!qr&7qbsiEocE#8SXBNxt3VHNhwvs*KpQ!_8s zr_OEGF5yKoQ>&hP`SMKd+{{+(O7+roZF=(xKPCDh&pe-ah?V}y&zH*W(mID#SA?ad ze!X;IYU<)S0)EEw5zmZYys#DE8g+x0dUa>YpSZ2f1kf4Cbu-=!R)V9{>o>*_{QIUact#Bry3vq-sO#o8UWX8 zotk?v0(w#}Rf4|0Oc1`Ys&C!CvAkDG%HO!z2zkJvRO#zmjsnx=H@LpmL$6_Gce1N^ zw`|;k-oRNcsD{D2R5{~W zO?UFYw1$>Wzw(^lUaxkTb7zpHeIa2|i73WnPi960Xqd4peA~Uv3CxF7@SBpnuQWR_j=X-BrJwGvwMJ zM+5iotD~2gtA6>)IV;Fb;b>2%ZJjCB?f$!j8w4;gZ{QB-VS<*Eo&2!mAcI2*R%qv1 zqH*NQQ^H&=hX^_8+~89VIC46;%UqmegmZ)_ajourj*NMg9f2b;@t^>t0^67I{#~H%$&1U23E-P(QAhxDU<2`9B?AhsK@Z7xvPA zZ&FiEG--cw4VdCj&O|df3e4EF=JO=&G@6_>dVC5p>5Be1^N5`fG@mZN+l1ClpWC)a z?M4?j7p-&~==7;`G_S<(j+g!?Ff1{9?e|4oU0e(sh54*q$4b)PT3~Y%h?O`= z!@K!zd#Uk`{~bf%7y`!-IEKJ61dbta41r?^97Et30{;&~053`Tfqqu%`tiSG2pmJ; l7y`!-IEKJ61dbta41r?^97Et30>= + + + InTheHand.Net.Personal + + + + + Defines configuration option names for the class when used with IrDA. + + + + + Returns a list of IrDA device IDs for IR capable devices within range. + + + + + Enables an application to set a single class in the local IAS. + The application specifies the class to set, the attribute, and attribute type. + + + + + Queries IAS on a given service and class name for its attributes. + + + + + Retrieves the maximum PDU length required to use . + + + + + Sets socket to bypass TinyTP layer to directly communicate with IrLMP. + + + + + Disables TinyTP mode and sends data directly over IrLMP frames. + + + + + Puts the IrDA socket into IrCOMM mode. + + + + + Enables the Sharp mode. + + + + + Summary description for WsaQuerySet. + + + + + Returns name of device if specified in query. + + + + + Identifies the services class in the form of a GUID. + + + + + This context varies depending upon the function. + + + + + Represents an IrDA device address. + + + + + Initializes a new instance of the class with the specified address. + + Address as 4 byte array. + address passed was not a 4 byte array. + + + + Initializes a new instance of the class with the specified address. + + representation of the address. + + + + Returns the IrDA address as an integer. + + + + + + Returns the internal byte array. + + + + + + Determines whether a string is a valid IrDA address. + + The string to validate. + The version of the string. + true if irdaString is a valid IrDA address; otherwise, false. + + + + Converts the string representation of an IrDA address to a new instance. + + A string containing an address to convert. + New instance. + Address must be specified in hex format optionally separated by the colon or period character e.g. 00000000, 00:00:00:00 or 00.00.00.00. + + + + Converts the address to its equivalent string representation. + + The string representation of this instance. + + + + Returns a representation of the value of this instance, according to the provided format specifier. + + A single format specifier that indicates how to format the value of this Guid. The format parameter can be "N", "C" or "P". If format is null or the empty string (""), "N" is used. + A representation of the value of this . + + SpecifierFormat of Return Value + N8 digits: XXXXXXXX + C8 digits separated by colons: XX:XX:XX:XX + P8 digits separated by periods: XX.XX.XX.XX + + + + + Compares two instances for equality. + + + + + + + Returns the hash code for this instance. + + + + + + Returns an indication whether the values of two specified objects are equal. + + + + + + + + Returns an indication whether the values of two specified objects are not equal. + + + + + + + + Provides a null IrDA address. + + + + + Dummy SDP record into which we can insert the Guid and channel + + + + + Register the service. For SAP, this means sending out a periodic broadcast. + This is an NOP for the DNS namespace. + For persistent data stores, this means updating the address information. + + + + + Remove the service from the registry. + For SAP, this means stop sending out the periodic broadcast. + This is an NOP for the DNS namespace. + For persistent data stores this means deleting address information. + + + + + Delete the service from dynamic name and persistent spaces. + For services represented by multiple CSADDR_INFO structures (using the SERVICE_MULTIPLE flag), only the specified address will be deleted, and this must match exactly the corresponding CSADDR_INFO structure that was specified when the service was registered + + + + + Stores version information for a Bluetooth device. + + + + + + + + + + + Version of the current Host Controller Interface (HCI) in the Bluetooth hardware. + + This value changes only when new versions of the Bluetooth hardware are created for the new Bluetooth Special Interest Group (SIG) specifications. + + + + Version of the current Link Manager Protocol (LMP) in the Bluetooth hardware. + + + + + Name of the Bluetooth hardware manufacturer. + + + + + + + + + + Specifies the status codes returned for an Object Exchange (OBEX) operation. + + OBEX codes are directly related to their HTTP equivalents - see . + + + + Applied to another code to indicate this is the only response or final response in a series. + + + + + Equivalent to HTTP status 100. + Continue indicates that the client can continue with its request. + + + + + Equivalent to HTTP status 200. + OK indicates that the request succeeded and that the requested information is in the response. + This is the most common status code to receive. + + + + + Equivalent to HTTP status 201. + Created indicates that the request resulted in a new resource created before the response was sent. + + + + + Equivalent to HTTP status 202. + Accepted indicates that the request has been accepted for further processing. + + + + + Equivalent to HTTP status 203. + NonAuthoritativeInformation indicates that the returned metainformation is from a cached copy instead of the origin server and therefore may be incorrect. + + + + + Equivalent to HTTP status 204. + NoContent indicates that the request has been successfully processed and that the response is intentionally blank. + + + + + Equivalent to HTTP status 205. + ResetContent indicates that the client should reset (not reload) the current resource. + + + + + Equivalent to HTTP status 206. + PartialContent indicates that the response is a partial response as requested by a GET request that includes a byte range. + + + + + Equivalent to HTTP status 300. + MultipleChoices indicates that the requested information has multiple representations. + + + + + Equivalent to HTTP status 301. + MovedPermanently indicates that the requested information has been moved to the URI specified in the Location header. + The default action when this status is received is to follow the Location header associated with the response. + + + + + Equivalent to HTTP status 302. + Redirect indicates that the requested information is located at the URI specified in the Location header. + The default action when this status is received is to follow the Location header associated with the response. + When the original request method was POST, the redirected request will use the GET method. + + + + + Equivalent to HTTP status 303. + SeeOther automatically redirects the client to the URI specified in the Location header as the result of a POST. The request to the resource specified by the Location header will be made with a GET. + + + + + Equivalent to HTTP status 304. + NotModified indicates that the client's cached copy is up to date. + The contents of the resource are not transferred. + + + + + Equivalent to HTTP status 305. + UseProxy indicates that the request should use the proxy server at the URI specified in the Location header. + + + + + Equivalent to HTTP status 400. + BadRequest indicates that the request could not be understood by the server. BadRequest is sent when no other error is applicable, or if the exact error is unknown or does not have its own error code. + + + + + Equivalent to HTTP status 401. + Unauthorized indicates that the requested resource requires authentication. The WWW-Authenticate header contains the details of how to perform the authentication. + + + + + Equivalent to HTTP status 402. + PaymentRequired is reserved for future use. + + + + + Equivalent to HTTP status 403. + Forbidden indicates that the server refuses to fulfill the request. + + + + + Equivalent to HTTP status 404. + NotFound indicates that the requested resource does not exist on the server. + + + + + Equivalent to HTTP status 405. + MethodNotAllowed indicates that the request method (POST or GET) is not allowed on the requested resource. + + + + + Equivalent to HTTP status 406. + NotAcceptable indicates that the client has indicated with Accept headers that it will not accept any of the available representations of the resource. + + + + + Equivalent to HTTP status 407. + ProxyAuthenticationRequired indicates that the requested proxy requires authentication. + The Proxy-authenticate header contains the details of how to perform the authentication. + + + + + Equivalent to HTTP status 408. + RequestTimeout indicates that the client did not send a request within the time the server was expecting the request. + + + + + Equivalent to HTTP status 409. + Conflict indicates that the request could not be carried out because of a conflict on the server. + + + + + Equivalent to HTTP status 410. + Gone indicates that the requested resource is no longer available. + + + + + Equivalent to HTTP status 411. + LengthRequired indicates that the required Content-length header is missing. + + + + + Equivalent to HTTP status 412. + PreconditionFailed indicates that a condition set for this request failed, and the request cannot be carried out. + Conditions are set with conditional request headers like If-Match, If-None-Match, or If-Unmodified-Since. + + + + + Equivalent to HTTP status 413. + RequestEntityTooLarge indicates that the request is too large for the server to process. + + + + + Equivalent to HTTP status 414. + RequestUriTooLong indicates that the URI is too long. + + + + + Equivalent to HTTP status 415. + UnsupportedMediaType indicates that the request is an unsupported type. + + + + + Equivalent to HTTP status 500. + InternalServerError indicates that a generic error has occurred on the server. + + + + + Equivalent to HTTP status 501. + NotImplemented indicates that the server does not support the requested function. + + + + + Equivalent to HTTP status 502. + BadGateway indicates that an intermediate proxy server received a bad response from another proxy or the origin server. + + + + + Equivalent to HTTP status 503. + ServiceUnavailable indicates that the server is temporarily unavailable, usually due to high load or maintenance. + + + + + Equivalent to HTTP status 504. + GatewayTimeout indicates that an intermediate proxy server timed out while waiting for a response from another proxy or the origin server. + + + + + Equivalent to HTTP status 505. + HttpVersionNotSupported indicates that the requested HTTP version is not supported by the server. + + + + + + + + + + + + + + + Standard Bluetooth Profile identifiers. + + + + + Represents an empty service Guid. + + + + + Represents the base Guid from which all standard Bluetooth profiles are derived - not used for connections. + + + + + + + + + + + + + + + + + + + + Provides a basic Serial emulation connect over Bluetooth. + + + + + Used to establish PPP connections over RFComm channels. + + + + + + + + + + + + + + + Used for sending binary objects between devices. + + + + + OBEX version of an FTP server + + + + + + + + + + Supports Bluetooth headset devices. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Supports hands free kits such as a car kits which provide audio and more advanced call control than the Headset profile. + + + + + + + + + + + + + + + + + + + + Used for printing simple text, HTML, vCard objects and similar. + + + + + + + + + + Supports human interface devices such as keyboards and mice. + + + + + + + + + + + + + + + + + + + + Common_ISDN_Access + + + + + + + + + + UDI_MT + + + + + UDI_TA + + + + + + + + + + SIM_Access + + + + + Phonebook Access - PCE + + + + + Phonebook Access - PSE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ESDP_UPNP_IP_PAN + + + + + ESDP_UPNP_IP_LAP + + + + + ESDP_UPNP_L2CAP + + + + + + + + + + + + + + + + + + + + Handles security between bluetooth devices. Current supported on devices only. + + + + + This function stores the personal identification number (PIN) for the Bluetooth device. + Not supported on Windows XP + + Address of remote device. + Pin, alphanumeric string of between 1 and 16 ASCII characters. + True on success, else False. + Not supported on Windows XP - use PairRequest + + + + This function revokes the personal identification number (PIN) for the Bluetooth device. + Not supported on Windows XP + + The remote device. + True on success, else False. + + + + Intiates pairing for a remote device. + + Remote device with which to pair. + Chosen PIN code, must be between 1 and 16 ASCII characters. + + + + + Remove the pairing with the specified device + + Remote device with which to remove pairing. + TRUE if device was successfully removed, else FALSE. + + + + Not supported on Windows XP + + + + + + + + Retrieves the address of the Bluetooth peer device authentication that requires the PIN code. + Not supported on Windows XP + + of the remote device, or null if there is no outstanding PIN request. + + + + Refuses an outstanding PIN request. + Not supported on Windows XP + + Address of the requesting device. + + + + Provides connection services for an infrared connection. + + Provides services for an infrared end point that includes making connections, obtaining data streams and discovering devices. + Infrared connections are made by specifying a service name, which can be any value provided the participating devices refer the same name. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class for a specified service. + + + + + + Initializes a new instance of the class for connecting to a specified endpoint. + + An . + + + + Obtains information about available devices. + + Returns a maximum of 8 devices, for more flexibility use the other overloads. + + + + Obtains information about a specified number of devices. + + The maximum number of devices to get information about. + + + + + Obtains information about available devices using a socket. + + The maximum number of devices to get information about. + + + + + + Gets the name of a device using a specified socket. + + A valid socket. + The name of the remote device. + + + + Connects a client to a specified endpoint. + + + + + + Connects a client to a specified service. + + + + + + Closes the socket of the connection. + + + + + Gets the underlying stream of data. + + + + + + The number of bytes of data received from the network and available to be read. + + + + + Gets or sets the underlying . + + + + + Gets a value indicating whether the underlying for an is connected to a remote host. + + + + + Gets the name of the device participating in the communication. + + + + + Provides an OBEX implementation of the class. + + + + + Create a new Obex request with the specified . + + + Uri must use one of the following schemes - obex, obex-push, obex-ftp, obex-sync. + The host name must be the device address in short hex, or dotted hex notation - not the default representation using the colon separator + + + + Gets a object to use to write request data. + + + + + + Reads the contents of the specified file to the request stream. + + The filename (including the path) from which to read. + Provides an easy equivalent to manually writing the file contents to the request stream. + + + + Returns the OBEX server response. + + + + + + + + + + + Gets or sets the method for the request. + + For Object Exchange the method code is mapped to the equivalent HTTP style method. + For example "PUT", "GET" etc. In this version only "PUT" is supported and is the default value. + + + + Gets or sets the value of the Type OBEX header. + + + + + Gets or sets the Length OBEX header. + + This property is mandatory, if not set no data will be sent. + If you use the helper method this value is automatically populated with the size of the file that was read. + + + + Not Supported - do not use, this will throw an exception. + + + + + Gets or sets the time-out value for the method. + + The number of milliseconds to wait before the request times out. + The default is 50,000 milliseconds (50 seconds). + A value of -1 or 0 represents no time-out. + + + + Gets the original Uniform Resource Identifier (URI) of the request. + + For an ObexPush request the URI will use the "obex://" prefix, followed by the numerical device id in hex format. + The path section of the URI represents the remote filename of the pushed object. Subfolders are not supported. Some devices may only support specific object types e.g. V-Card. + + + + Methods which can be carried out in an Object Exchange transaction. + + + + + Sends an object to a receiving device. + + + + + Requests a file from the remote device. + + + + + Negotiate an Object Exchange connection with a remote device. + + + + + Disconnect an existing Object Exchange session. + + + + + Sends the last packet of an object to a receiving device. + + + + + Change remote path on an Object Exchange server. + + + + + Manufacturer codes. + + Defined in Bluetooth Specifications Assigned Numbers. + + + + + + + + + Internal bytes + + + + + + Size of the structure. + + + + + Defines configuration option names for the class. + + + + + On connected socket, triggers authentication. + On not connected socket, forces authentication on connection. + For incoming connection this means that connection is rejected if authentication cannot be performed. + + The optval and optlen parameters are ignored; however, Winsock implementation on Windows CE requires optlen to be at least 4 and optval to point to at least an integer datum. + + + + Toggles authentication under Windows XP. + + optlen=sizeof(ULONG), optval = &(ULONG)TRUE/FALSE + + + + On a connected socket, this command turns encryption on or off. + On an unconnected socket, this forces encryption to be on or off on connection. + For an incoming connection, this means that the connection is rejected if the encryption cannot be turned on. + + + + + This sets or revokes PIN code to use with a connection or socket. + + + + + This sets or revokes link key to use with a connection or peer device. + + + + + Returns link key associated with peer Bluetooth device. + + + + + Get or set the default MTU on Windows XP. + + optlen=sizeof(ULONG), optval = &mtu + + + + This sets default MTU (maximum transmission unit) for connection negotiation. + While allowed for connected socket, it has no effect if the negotiation has already completed. + Setting it on listening socket will propagate the value for all incoming connections. + + + + + Returns MTU (maximum transmission unit). + For connected socket, this is negotiated value, for server (accepting) socket it is MTU proposed for negotiation on connection request. + + + + + Get or set the maximum MTU on Windows XP. + + optlen=sizeof(ULONG), optval = &max. mtu + + + + This sets maximum MTU for connection negotiation. + While allowed for connected socket, it has no effect if the negotiation has already completed. + Setting it on listening socket will propagate the value for all incoming connections. + + + + + Returns maximum MTU acceptable MTU value for a connection on this socket. + Because negotiation has already happened, has little meaning for connected socket. + + + + + Get or set the minimum MTU on Windows XP. + + optlen=sizeof(ULONG), optval = &min. mtu + + + + This sets minimum MTU for connection negotiation. + While allowed for connected socket, it has no effect if the negotiation has already completed. + Setting it on listening socket will propagate the value for all incoming connections. + + + + + Returns minimum MTU acceptable MTU value for a connection on this socket. + Because negotiation has already happened, has little meaning for connected socket. + + + + + This sets XON limit. + Setting it on listening socket will propagate the value for all incoming connections. + + + + + Returns XON limit for a connection. + XON limit is only used for peers that do not support credit-based flow control (mandatory in the Bluetooth Core Specification version 1.1). + When amount of incoming data received, but not read by an application for a given connection grows past this limit, a flow control command is sent to the peer requiring suspension of transmission. + + + + + This sets XOFF limit. + Setting it on listening socket will propagate the value for all incoming connections. + + + + + Returns XOFF limit for a connection. + XOFF limit is only used for peers that do not support credit-based flow control (mandatory in the Bluetooth Core Specification 1.1). + If flow has been suspended because of buffer run-up, when amount of incoming data received, but not read by an application for a given connection falls below this limit, a flow control command is sent to the peer allowing continuation of transmission. + + + + + Specifies maximum amount of data that can be buffered inside RFCOMM (this is amount of data before call to send blocks). + + + + + Returns maximum amount of data that can be buffered inside RFCOMM (this is amount of data before call to send blocks). + + + + + Specifies maximum amount of data that can be buffered for a connection. + This buffer size is used to compute number of credits granted to peer device when credit-based flow control is implemented. + This specifies the maximum amount of data that can be buffered. + + + + + Returns maximum amount of data that can be buffered for a connection. + This buffer size is used to compute number of credits granted to peer device when credit-based flow control is implemented. + This specifies the maximum amount of data that can be buffered. + + + + + Retrieves last v24 and break signals set through MSC command from peer device. + + + + + Retrieves last line status signals set through RLS command from peer device. + + + + + Sends MSC command. V24 and breaks are as specified in RFCOMM Specification. + Only modem signals and breaks can be controlled, RFCOMM reserved fields such as flow control are ignored and should be set to 0. + + + + + Sends RLS command. + Argument is as specified in RFCOMM Specification. + + + + + Gets flow control type on the connected socket. + + + + + Sets the page timeout for the card. + The socket does not have to be connected. + + + + + Gets the current page timeout. + The socket does not have to be connected. + + + + + Sets the scan mode for the card. + The socket does not have to be connected. + + + + + Gets the current scan mode. + The socket does not have to be connected. + + + + + Sets the class of the device. + The socket does not have to be connected. + + + + + Retrieve the Class of Device. + + + + + Get the version information from the Bluetooth adapter. + + + + + Get the version of the remote adapter. + + + + + Retrieves the authentication settings. + The socket does not have to be connected. + + + + + Sets the authentication policy of the device. + + + + + Reads the remote name of the device. + The socket does not have to be connected. + + + + + Retrieves the link policy of the device. + + + + + Sets the link policy for an existing baseband connection. + The socket must be connected. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gets the current mode of the connection. + The mode can either be sniff, park, or hold. The socket must be connected. + + + + + Contains helper functionality. + + + + + Specifies that the URI is accessed through the Object Exchange (OBEX) protocol. + + + + + Specifies that the URI is accessed through the Object Exchange (OBEX) Push protocol. + + + + + Specifies that the URI is accessed through the Object Exchange (OBEX) FTP protocol. + + + + + Specifies that the URI is accessed through the Object Exchange (OBEX) Sync protocol. + + + + + Provides information about remote devices connected by infrared communications. + + + + + + Compares two instances for equality. + + + + + + + Returns the hash code for this instance. + + + + + + Returns the address of the remote device. + + + + + Provided solely for compatibility with System.Net.IrDA - consider using instead. + + + + + Gets the name of the device. + + + + + Gets the character set used by the server, such as ASCII. + + + + + Gets the type of the device, such as a computer. + + + + + Specifies the current status of the Bluetooth hardware. + + + + + Status cannot be determined. + + + + + Bluetooth radio not present. + + + + + Bluetooth radio is in the process of starting up. + + + + + Bluetooth radio is active. + + + + + Bluetooth radio is in the process of shutting down. + + + + + Bluetooth radio is in an error state. + + + + + Class of Device flags as assigned in the Bluetooth specifications. + + Defined in Bluetooth Specifications Assigned Numbers. + + + + Defines additional IrDA socket option levels for the and methods. + + + + + + + + + + Defines the type of an IAS attribute. + + + + + Identifies an integer attribute value. + + + + + Identifies a binary, or octet, attribute value. + + + + + Identifies a string attribute value. + + + + + Represents an end point for an infrared connection. + + + + + + Initializes a new instance of the class. + + The device identifier. + The name of the service to connect to. + + + + Initializes a new instance of the class. + + The device address. + The name of the service to connect to. + + + + Serializes endpoint information into a . + + + + + + Creates an from a socket address + + A . + + + + + Compares two instances for equality. + + + + + + + Returns the hash code for this instance. + + + + + + Gets or sets an address for the device. + + + + + Gets or sets an identifier for the device. + + + + + Gets or sets the name of the service. + + + + + Gets the address family to which the endpoint belongs. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Bluetooth specific flags returned from WSALookupServiceNext + in WSAQUERYSET.dwOutputFlags in response to device inquiry. + + + + + Establishes connections to a peer device and provides Bluetooth port information. + + + + + Specifies the minimum value that can be assigned to the Port property. + + + + + Specifies the maximum value that can be assigned to the Port property. + + + + + Initializes a new instance of the class with the specified address and service. + + The Bluetooth address of the device. A six byte array. + The Bluetooth service to use. + + + + Initializes a new instance of the class with the specified address, service and port number. + + The Bluetooth address of the device. A six byte array. + The Bluetooth service to use. + Radio channel to use, -1 for any. + + + + Serializes endpoint information into a instance. + + A instance containing the socket address for the endpoint. + + + + Creates an endpoint from a socket address. + + The to use for the endpoint. + An instance using the specified socket address. + + + + Compares two instances for equality. + + + + + + + Returns the hash code for this instance. + + + + + + Gets the address family of the Bluetooth address. + + + + + Gets or sets the Bluetooth address of the endpoint. + + + + + Gets or sets the Bluetooth service to use for the connection. + + + + + Gets or sets the service channel number of the endpoint. + + + + + Defines additional Bluetooth socket option levels for the and methods. + + + + + + + + + + + + + + + + + + + + Provides information about an available device obtained by the client during device discovery. + + + + + + + + + + + + + + + + + Forces the system to refresh the device information. + + + + + Updates the device name used to display the device. + + On Windows CE this only affects devices which are already paired. + + + + Enables or disables services for a Bluetooth device. + + The service GUID on the remote device. + Service state - TRUE to enable the service, FALSE to disable it. + This function only supports Windows XP, calling it on CE will throw a PlatformNotSupportedException. + Thrown if this method is called on Windows CE platforms. + + + + + + + + + + + Displays information about the device. + + + + + Compares two instances for equality. + + + + + + + Returns the hash code for this instance. + + + + + + Gets the device identifier. + + + + + Gets a name of a device. + + + + + Returns the Class of Device of the remote device. + + + + + Returns a list of services which are already installed for use on the calling machine. + + Will only return available services for paired devices. + + + + Device connected. + + Not supported under Windows CE and will always return false. + + + + Device remembered. + + Not supported under Windows CE and will always return false. + + + + Device Authenticated. + + Now supported on both CE and XP. + + + + Date and Time this device was last seen by the system. + + Not supported under Windows CE and will return DateTime.MinValue. + + + + Date and Time this device was last used by the system. + + Not supported under Windows CE and will return DateTime.MinValue. + + + + Places a socket in a listening state to monitor infrared connections from a specified service or network address. + + This class monitors a service by specifying a service name or a network address. + The listener does not listen until you call the method. + + + + + Initializes a new instance of the class. + + The network address to monitor for making a connection. + + + + Initializes a new instance of the class. + + The name of the service to listen for. + + + + Starts the socket to listen for incoming connections. + + + + + Stops the socket from monitoring connections. + + + + + Creates a new socket for a connection. + + A socket. + + + + Creates a client object for a connection when the specified service or endpoint is detected by the listener component. + + An object. + + + + Determines if a connection is pending. + + true if there is a connection pending; otherwise, false. + + + + Gets the underlying network . + + + + + Gets a value that indicates whether the is actively listening for client connections. + + + + + Gets an representing the local device. + + + + + Provides client connections for Bluetooth network services. + + This class currently only supports devices which use the Microsoft Bluetooth stack such as the Orange SPV E200, devices which use the WidComm stack will not work. + + + + Creates a new instance of . + + + + + Initializes a new instance of the class and binds it to the specified local endpoint. + + The to which you bind the Bluetooth Socket. + Only necessary on multi-radio system where you want to select the local radio to use. + + + + Discovers accessible Bluetooth devices and returns their names and addresses. + + An array of BluetoothDeviceInfo objects describing the devices discovered. + + + + Discovers accessible Bluetooth devices and returns their names and addresses. + + The maximum number of devices to get information about. + An array of BluetoothDeviceInfo objects describing the devices discovered. + + + + Discovers accessible Bluetooth devices and returns their names and addresses. + + The maximum number of devices to get information about. + True to return previously authenticated/paired devices. + True to return remembered devices. + True to return previously unknown devices. + An array of BluetoothDeviceInfo objects describing the devices discovered. + + + + Connects a client to a specified endpoint. + + A that represents the remote device. + + + + Closes the socket of the connection. + + + + + Gets the underlying stream of data. + + The underlying . + returns a that you can use to send and receive data. + The class inherits from the class, which provides a rich collection of methods and properties used to facilitate network communications. + You must call the method first, or the method will throw an . + After you have obtained the , call the method to send data to the remote host. + Call the method to receive data arriving from the remote host. + Both of these methods block until the specified operation is performed. + You can avoid blocking on a read operation by checking the property. + A true value means that data has arrived from the remote host and is available for reading. + In this case, is guaranteed to complete immediately. + If the remote host has shutdown its connection, will immediately return with zero bytes. + The is not connected to a remote host. + The has been closed. + + + + Set or change the PIN to be used with a specific remote device. + + Address of Bluetooth device. + PIN string consisting of 1-16 ASCII characters. + + + + Gets the name of the specified remote device. + + Address of remote device. + Friendly name of specified device. + + + + Gets the name of a device by a specified socket. + + A . + Returns a string value of the computer or device name. + + + + + + + + + + + + + + + Frees resources used by the class. + + + + + Amount of time allowed to perform the query. + + On Windows CE the actual value used is expressed in units of 1.28 seconds, so will be the nearest match for the value supplied. + The default value is 10 seconds. The maximum is 60 seconds. + + + + Gets the amount of data that has been received from the network and is available to be read. + + The number of bytes of data received from the network and available to be read. + The has been closed. + + + + Gets or sets the underlying . + + + + + Gets a value indicating whether the underlying for a is connected to a remote host. + + true if the socket was connected to a remote resource as of the most recent operation; otherwise, false. + + + + Gets or sets the authentication state of the current connect or behaviour to use when connection is established. + + + For disconnected sockets, specifies that authentication is required in order for a connect or accept operation to complete successfully. + Setting this option actively initiates authentication during connection establishment, if the two Bluetooth devices were not previously authenticated. + The user interface for passkey exchange, if necessary, is provided by the operating system outside the application context. + For outgoing connections that require authentication, the connect operation fails with WSAEACCES if authentication is not successful. + In response, the application may prompt the user to authenticate the two Bluetooth devices before connection. + For incoming connections, the connection is rejected if authentication cannot be established and returns a WSAEHOSTDOWN error. + + + + + On unconnected sockets, enforces encryption to establish a connection. + Encryption is only available for authenticated connections. + For incoming connections, a connection for which encryption cannot be established is automatically rejected and returns WSAEHOSTDOWN as the error. + For outgoing connections, the connect function fails with WSAEACCES if encryption cannot be established. + In response, the application may prompt the user to authenticate the two Bluetooth devices before connection. + + + + + Returns link key associated with peer Bluetooth device. + + + + + Returns the Link Policy of the current connection. + + + + + Retrieves the version of the local Bluetooth equipment. + + + + + Sets the PIN associated with the currently connected device. + + PIN which must be composed of 1 to 16 ASCII characters. + Assigning null (Nothing in VB) or an empty String will revoke the PIN. + + + + Gets the name of the remote device. + + + + + Provides access to the request and response objects used by the class. + + + + + Gets the that represents a client's request for a resource + + + + + Describes the character sets supported by the device. + + The enumeration describes the following character sets, which are used by the and classes. + + + + + The ASCII character set. + + + + + The western European graphic character set. + + + + + The eastern European graphic character set. + + + + + The southern European graphic character set. + + + + + The northern European graphic character set. + + + + + The Cyrillic graphic character set. + + + + + The Arabic graphic character set. + + + + + The Greek graphic character set. + + + + + The Hebrew graphic character set. + + + + + The Turkish graphic character set. + + + + + The Unicode character set. + + + + + Specifies the media type information for an object. + + + + + Specifies the type of image data in an object. + + + + + Specifies that the image data is in Graphics Interchange Format (GIF). + + + + + Specifies that the image data is in Joint Photographic Experts Group (JPEG) format. + + + + + Specifies the type of text data in an object. + + + + + Specifies that the data is in HTML format. + + + + + Specifies that the data is in plain text format. + + + + + Specifies that the data is in vCalendar format. + + + + + Specifies that the data is in vCard format. + + + + + Specifies that the data is in vMsg format. + + + + + Specifies that the data is in vNote format. + + + + + Specifies that the data is in XML format. + + + + + Specifies the type of Object Exchange specific data. + + + + + Used to retrieve supported object types. + + + + + Used to retrieve folder listing with OBEX FTP. + + + + + Used to retrieve an object profile. + + + + + Provides an OBEX implementation of the class. + + + + + Gets the stream used to read the body of the response from the server. + + + + + + Writes the contents of the response to the specified file path. + + The filename (including the path) from which to read. + + + + Frees the resources held by the response. + + + + + Gets the headers associated with this response from the server. + + + + + + + + + + + + + + + Returns a status code to indicate the outcome of the request. + + + + + Used to create a new web request for obex uri scheme + + + + + Supported network transports for Object Exchange. + + + + + Infrared (IrDA) + + + + + Bluetooth + + + + + TCP/IP + + + + + Flags to describe Link Policy. + + + + + Disables all LAN Manager (LM) modes. + + + + + Enables the master slave switch. + + + + + Enables Hold mode. + + + + + Enables Sniff Mode. + + + + + Enables Park Mode. + + + + + Represents a Bluetooth Radio device. + + Allows you to query properties of the radio hardware and set the mode. + + + + Gets a value that indicates whether the 32feet.NET library can be used with the current device. + + + + + Gets the primary . + + For Windows CE based devices this is the only , for Windows XP this is the first available device. + If the device has a third-party stack this property will return null + + + + Gets an array of all Bluetooth radios on the system. + + Under Windows CE this will only ever return a single device. + If the device has a third-party stack this property will return an empty collection + + + + Gets the handle for this radio. + + Relevant only on Windows XP. + + + + Returns the current status of the Bluetooth radio hardware. + + A member of the enumeration. + + + + Gets or Sets the current mode of operation of the Bluetooth radio. + + This setting will be persisted when the device is reset. + An Icon will be displayed in the tray on the Home screen and the device will emit a blue LED when Bluetooth is enabled. + + + + Returns the address of the local Bluetooth radio device. + + + + + Returns the friendly name of the local Bluetooth radio. + + + + + Returns the Class of Device. + + + + + Returns the manufacturer of the device. + + + + + Returns the manufacturer of the Bluetooth software stack running locally. + Currently only Microsoft is supported. + + + + + Specifies additional protocols that the class supports. + + + + + Bluetooth RFComm protocol. + + + + + Describes an enumeration of possible device types, such as Fax. + + + + + + Unspecified device type. + + + + + A Plug and Play interface. + + + + + A Pocket PC or similar. + + + + + A personal computer. + + + + + A printer. + + + + + A modem. + + + + + A fax. + + + + + A local area network access. + + + + + Contains extended hint bytes. + + + + + A telephonic device. + + + + + A personal computer file server. + + + + + Device supports IrCOMM. + + + + + Device supports Object Exchange. + + + + + Describes the device and service capabilities of a device. + + + + + + + + + + + + + + + + + Returns the device type. + + + + + Returns supported service types. + + + + + Describes an incoming OBEX request to an object. + + + + + Writes the body of the request to the specified file path. + + The filename (including the path) to write to. + + + + Gets the length of the body data included in the request. + New in v1.5.51015 + + A long value that contains the value from the request's Length header. + This value is -1 if the content length is not known. + The Length header expresses the length, in bytes, of the body data that accompanies the request. + + + + Gets the MIME type of the body data included in the request. + + A that contains the text of the request's Type header. + + + + Gets the collection of header name/value pairs sent in the request. + + A that contains the OBEX headers included in the request. + For a complete list of request headers, see the enumeration. + + + + Get the device address and service to which the request is directed. + + + + + Gets the method specified by the client. + + Only PUT is supported in this version. + + + + Gets a stream that contains the body data sent by the client. + + + + + Gets the OBEX version used by the requesting client + + + + + Gets the URL information (without the host and port) requested by the client. + + A that contains the raw URL for this request. + + + + Gets the device address and service from which the request originated. + + + + + Gets the server address to which the request is directed. + + + + + Gets the object requested by the client. + + A object that identifies the resource requested by the client. + + + + Determine all the possible modes of operation of the Bluetooth radio. + + + + + Bluetooth is disabled on the device. + + + + + Bluetooth is connectable but your device cannot be discovered by other devices. + + + + + Bluetooth is activated and fully discoverable. + + + + + Listens for connections from Bluetooth network clients. + + The class provides simple methods that listen for and accept incoming connection requests in blocking synchronous mode. + You can use either a or a to connect with a + + + + Initializes a new instance of the class. + + The device address to monitor for making a connection. + + + + Initializes a new instance of the class that listens for incoming connection attempts on the specified local Bluetooth address and service identifier. + + A that represents the local Bluetooth radio address. + The Bluetooth service to listen for. + + + + Initializes a new instance of the class. + + The Bluetooth service to listen for. + + + + Initializes a new instance of the class. + + The Bluetooth service to listen for. + Prepared SDP Record to publish + Offset into the SDP record in which to place the actual channel. + It is recommended that you use the alternative constructor which takes just a service guid for your custom profile implementations. + + + + Initializes a new instance of the class. + + A that represents the local Bluetooth radio address. + The Bluetooth service to listen for. + Prepared SDP Record to publish + Offset into the SDP record in which to place the actual channel. + It is recommended that you use the alternative constructor which takes just a service guid for your custom profile implementations. + + + + Starts the socket to listen for incoming connections. + + + + + Stops the socket from monitoring connections. + + + + + Creates a new socket for a connection. + + AcceptSocket is a blocking method that returns a that you can use to send and receive data. + If you want to avoid blocking, use the method to determine if connection requests are available in the incoming connection queue. + The returned is initialized with the address and channel number of the remote device. + You can use any of the Send and Receive methods available in the class to communicate with the remote device. + When you are finished using the , be sure to call its method. + If your application is relatively simple, consider using the method rather than the AcceptSocket method. + provides you with simple methods for sending and receiving data over a network in blocking synchronous mode. + A used to send and receive data. + Listener is stopped. + + + + Creates a client object for a connection when the specified service or endpoint is detected by the listener component. + + AcceptTcpClient is a blocking method that returns a that you can use to send and receive data. + Use the method to determine if connection requests are available in the incoming connection queue if you want to avoid blocking. + Use the method to obtain the underlying of the returned . + The will provide you with methods for sending and receiving with the remote host. + When you are through with the , be sure to call its method. + If you want greater flexibility than a offers, consider using . + A component. + Listener is stopped. + + + + Determines if there is a connection pending. + + true if there is a connection pending; otherwise, false. + + + + Gets the underlying of the current . + + + + + Get or set class of device flags which this service adds to the host device. + + + + + Gets the underlying network . + + The underlying . + creates a to listen for incoming client connection requests. + Classes deriving from can use this property to get this . + Use the underlying returned by the property if you require access beyond that which provides. + Note property only returns the used to listen for incoming client connection requests. + Use the method to accept a pending connection request and obtain a for sending and receiving data. + You can also use the method to accept a pending connection request and obtain a for sending and receiving data. + + + + Specifies additional addressing schemes that an instance of the class can use. + + + + + Bluetooth address. + + 32 + + + + IrDA address used on some Windows CE platforms (Has a different value to AddressFamily.IrDA). + + 22 + + + + Provides a simple, programmatically controlled OBEX protocol listener. + + + + + Initializes a new instance of the ObexListener class using the Bluetooth transport. + + + + + Initializes a new instance of the ObexListener class specifiying the transport to use. + + + + + Allows this instance to receive incoming requests. + + + + + Causes this instance to stop receiving incoming requests. + + + + + Shuts down the ObexListener. + + + + + Waits for an incoming request and returns when one is received. + + + + + + Gets a value that indicates whether the has been started. + + + + + Standard IrDA service names. + + + + + + + + + + + + + + + + + + + + Represents a Bluetooth device address. + + + + + + + + + + + + + + + + + + + + + + + + + Initializes a new instance of the class with the specified address. + + representation of the address. + + + + Initializes a new instance of the class with the specified address. + + Address as 6 byte array. + address passed was not a 6 byte array. + + + + Determines whether a string is a valid Bluetooth address. + + The string to validate. + The version of the string. + true if bluetoothString is a valid Bluetooth address; otherwise, false. + + + + Converts the string representation of a Bluetooth address to a new instance. + + A string containing an address to convert. + New instance. + Address must be specified in hex format optionally separated by the colon or period character e.g. 000000000000, 00:00:00:00:00:00 or 00.00.00.00.00.00. + + + + Returns the internal byte array. + + + + + + Returns the Bluetooth address as a long integer. + + + + + + Compares two instances for equality. + + + + + + + Returns the hash code for this instance. + + + + + + Returns an indication whether the values of two specified objects are equal.New in v1.5 + + + + + + + + Returns an indication whether the values of two specified objects are not equal. + + + + + + + + Converts the address to its equivalent string representation. + + The string representation of this instance. + The default return format is without a separator character - use the other overload for ToString for more formatting options. + + + + Returns a representation of the value of this instance, according to the provided format specifier. + + A single format specifier that indicates how to format the value of this Guid. + The format parameter can be "N", "C", or "P". + If format is null or the empty string (""), "D" is used. + A representation of the value of this . + + SpecifierFormat of Return Value + N12 digits: XXXXXXXXXXXX + C12 digits separated by colons: XX:XX:XX:XX:XX:XX + P12 digits separated by periods: XX.XX.XX.XX.XX.XX + + + + + Provides a null Bluetooth address. + + + + + Significant address part. + + + + + Non-significant address part. + + + + + Provides helper methods for the class. + + + + + Indicates whether the specified String object is a null reference. + + A reference. + true if the value parameter is a null reference (Nothing in Visual Basic) or an empty string (""); otherwise, false. + IsNullOrEmpty is a convenience method that enables you to simultaneously test whether a String is a null reference (Nothing in Visual Basic) or its value is . + + + + Provides a form to select an available Bluetooth device. + + + + + + + + + + + + + + + + Gets or sets the information text. + + + + + + + + + + If TRUE, invokes the Add New Device Wizard. + + Supported only on Windows XP + + + + If TRUE, forces authentication before returning. + + Supported only on Windows XP + + + + If TRUE, authenticated devices are shown in the picker. + + + + + If TRUE, remembered devices are shown in the picker. + + Supported only on Windows XP. + + + + If TRUE, unknown devices are shown in the picker. + + + + + If TRUE, skips the Services page in the Add New Device Wizard. + + Supported only on Windows XP + + + + Represents an individual SDP record. + + + + + Creates a new instance from the raw SDP record bytes. + + SDP record. + + + + Returns the record bytes. + + + + + diff --git a/Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/obj/Debug/IRChat_Desktop_CS.Form1.resources b/Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/obj/Debug/IRChat_Desktop_CS.Form1.resources new file mode 100644 index 0000000000000000000000000000000000000000..06c24d06c1cab750788146ce052b37770f3fa530 GIT binary patch literal 180 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 K;DP_S2mT9%Yf?7= literal 0 HcmV?d00001 diff --git a/Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/obj/Debug/IRChat_Desktop_CS.pdb b/Chapter04(Infrared)/IRChat_Desktop_CS/IRChat_Desktop_CS/obj/Debug/IRChat_Desktop_CS.pdb new file mode 100644 index 0000000000000000000000000000000000000000..8c40460b1ba15c02df8ca53ba0f6b457ec644c9f GIT binary patch literal 28160 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 R&>Jz + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {D86B83B8-5886-4CB1-BCAA-6DD95D8337D7} + WinExe + Attendance.My.MyApplication + Attendance + Attendance + WindowsForms + + + true + full + true + true + bin\Debug\ + Attendance.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + Attendance.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + + + + + + + + + + + + + + + Form + + + Form1.vb + Form + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + True + True + NorthwindDataSet.xsd + + + + + Designer + Form1.vb + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + NorthwindDataSet.xsd + + + MSDataSetGenerator + NorthwindDataSet.Designer.vb + Designer + + + NorthwindDataSet.xsd + + + + + \ No newline at end of file diff --git a/Chapter05(RFID)/Attendance_Parallax/Attendance.vbproj.user b/Chapter05(RFID)/Attendance_Parallax/Attendance.vbproj.user new file mode 100644 index 0000000..a1d742b --- /dev/null +++ b/Chapter05(RFID)/Attendance_Parallax/Attendance.vbproj.user @@ -0,0 +1,5 @@ + + + ProjectFiles + + \ No newline at end of file diff --git a/Chapter05(RFID)/Attendance_Parallax/Form1.Designer.vb b/Chapter05(RFID)/Attendance_Parallax/Form1.Designer.vb new file mode 100644 index 0000000..6375231 --- /dev/null +++ b/Chapter05(RFID)/Attendance_Parallax/Form1.Designer.vb @@ -0,0 +1,472 @@ + _ +Partial Class Form1 + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.components = New System.ComponentModel.Container + Dim EmployeeIDLabel As System.Windows.Forms.Label + Dim LastNameLabel As System.Windows.Forms.Label + Dim FirstNameLabel As System.Windows.Forms.Label + Dim TitleLabel As System.Windows.Forms.Label + Dim PhotoLabel As System.Windows.Forms.Label + Dim TagIDLabel As System.Windows.Forms.Label + Dim Label2 As System.Windows.Forms.Label + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(Form1)) + Me.GroupBox1 = New System.Windows.Forms.GroupBox + Me.btnDeassign = New System.Windows.Forms.Button + Me.txtEmployeeID = New System.Windows.Forms.TextBox + Me.btnFind = New System.Windows.Forms.Button + Me.btnAssign = New System.Windows.Forms.Button + Me.txtTagID = New System.Windows.Forms.TextBox + Me.Label1 = New System.Windows.Forms.Label + Me.NorthwindDataSet = New Attendance.NorthwindDataSet + Me.EmployeesBindingSource = New System.Windows.Forms.BindingSource(Me.components) + Me.EmployeesTableAdapter = New Attendance.NorthwindDataSetTableAdapters.EmployeesTableAdapter + Me.EmployeesBindingNavigator = New System.Windows.Forms.BindingNavigator(Me.components) + Me.BindingNavigatorAddNewItem = New System.Windows.Forms.ToolStripButton + Me.BindingNavigatorCountItem = New System.Windows.Forms.ToolStripLabel + Me.BindingNavigatorDeleteItem = New System.Windows.Forms.ToolStripButton + Me.BindingNavigatorMoveFirstItem = New System.Windows.Forms.ToolStripButton + Me.BindingNavigatorMovePreviousItem = New System.Windows.Forms.ToolStripButton + Me.BindingNavigatorSeparator = New System.Windows.Forms.ToolStripSeparator + Me.BindingNavigatorPositionItem = New System.Windows.Forms.ToolStripTextBox + Me.BindingNavigatorSeparator1 = New System.Windows.Forms.ToolStripSeparator + Me.BindingNavigatorMoveNextItem = New System.Windows.Forms.ToolStripButton + Me.BindingNavigatorMoveLastItem = New System.Windows.Forms.ToolStripButton + Me.BindingNavigatorSeparator2 = New System.Windows.Forms.ToolStripSeparator + Me.EmployeesBindingNavigatorSaveItem = New System.Windows.Forms.ToolStripButton + Me.EmployeeIDLabel1 = New System.Windows.Forms.Label + Me.LastNameTextBox = New System.Windows.Forms.TextBox + Me.FirstNameTextBox = New System.Windows.Forms.TextBox + Me.TitleTextBox = New System.Windows.Forms.TextBox + Me.PhotoPictureBox = New System.Windows.Forms.PictureBox + Me.TagIDLabel1 = New System.Windows.Forms.Label + Me.StatusStrip1 = New System.Windows.Forms.StatusStrip + Me.ToolStripStatusLabel1 = New System.Windows.Forms.ToolStripStatusLabel + Me.Timer1 = New System.Windows.Forms.Timer(Me.components) + EmployeeIDLabel = New System.Windows.Forms.Label + LastNameLabel = New System.Windows.Forms.Label + FirstNameLabel = New System.Windows.Forms.Label + TitleLabel = New System.Windows.Forms.Label + PhotoLabel = New System.Windows.Forms.Label + TagIDLabel = New System.Windows.Forms.Label + Label2 = New System.Windows.Forms.Label + Me.GroupBox1.SuspendLayout() + CType(Me.NorthwindDataSet, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.EmployeesBindingSource, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.EmployeesBindingNavigator, System.ComponentModel.ISupportInitialize).BeginInit() + Me.EmployeesBindingNavigator.SuspendLayout() + CType(Me.PhotoPictureBox, System.ComponentModel.ISupportInitialize).BeginInit() + Me.StatusStrip1.SuspendLayout() + Me.SuspendLayout() + ' + 'EmployeeIDLabel + ' + EmployeeIDLabel.AutoSize = True + EmployeeIDLabel.Location = New System.Drawing.Point(10, 58) + EmployeeIDLabel.Name = "EmployeeIDLabel" + EmployeeIDLabel.Size = New System.Drawing.Size(70, 13) + EmployeeIDLabel.TabIndex = 12 + EmployeeIDLabel.Text = "Employee ID:" + ' + 'LastNameLabel + ' + LastNameLabel.AutoSize = True + LastNameLabel.Location = New System.Drawing.Point(10, 81) + LastNameLabel.Name = "LastNameLabel" + LastNameLabel.Size = New System.Drawing.Size(61, 13) + LastNameLabel.TabIndex = 14 + LastNameLabel.Text = "Last Name:" + ' + 'FirstNameLabel + ' + FirstNameLabel.AutoSize = True + FirstNameLabel.Location = New System.Drawing.Point(10, 107) + FirstNameLabel.Name = "FirstNameLabel" + FirstNameLabel.Size = New System.Drawing.Size(60, 13) + FirstNameLabel.TabIndex = 16 + FirstNameLabel.Text = "First Name:" + ' + 'TitleLabel + ' + TitleLabel.AutoSize = True + TitleLabel.Location = New System.Drawing.Point(10, 133) + TitleLabel.Name = "TitleLabel" + TitleLabel.Size = New System.Drawing.Size(30, 13) + TitleLabel.TabIndex = 18 + TitleLabel.Text = "Title:" + ' + 'PhotoLabel + ' + PhotoLabel.AutoSize = True + PhotoLabel.Location = New System.Drawing.Point(10, 156) + PhotoLabel.Name = "PhotoLabel" + PhotoLabel.Size = New System.Drawing.Size(38, 13) + PhotoLabel.TabIndex = 20 + PhotoLabel.Text = "Photo:" + ' + 'TagIDLabel + ' + TagIDLabel.AutoSize = True + TagIDLabel.Location = New System.Drawing.Point(10, 35) + TagIDLabel.Name = "TagIDLabel" + TagIDLabel.Size = New System.Drawing.Size(43, 13) + TagIDLabel.TabIndex = 22 + TagIDLabel.Text = "Tag ID:" + ' + 'Label2 + ' + Label2.AutoSize = True + Label2.Location = New System.Drawing.Point(5, 104) + Label2.Name = "Label2" + Label2.Size = New System.Drawing.Size(139, 13) + Label2.TabIndex = 13 + Label2.Text = "Search for Employee (by ID)" + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.btnDeassign) + Me.GroupBox1.Controls.Add(Me.txtEmployeeID) + Me.GroupBox1.Controls.Add(Me.btnFind) + Me.GroupBox1.Controls.Add(Label2) + Me.GroupBox1.Controls.Add(Me.btnAssign) + Me.GroupBox1.Controls.Add(Me.txtTagID) + Me.GroupBox1.Controls.Add(Me.Label1) + Me.GroupBox1.Location = New System.Drawing.Point(224, 34) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(176, 232) + Me.GroupBox1.TabIndex = 11 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Administrator" + ' + 'btnDeassign + ' + Me.btnDeassign.Location = New System.Drawing.Point(5, 189) + Me.btnDeassign.Name = "btnDeassign" + Me.btnDeassign.Size = New System.Drawing.Size(163, 37) + Me.btnDeassign.TabIndex = 19 + Me.btnDeassign.Text = "Deassign Tag from Employee" + Me.btnDeassign.UseVisualStyleBackColor = True + ' + 'txtEmployeeID + ' + Me.txtEmployeeID.Location = New System.Drawing.Point(5, 120) + Me.txtEmployeeID.Name = "txtEmployeeID" + Me.txtEmployeeID.Size = New System.Drawing.Size(103, 20) + Me.txtEmployeeID.TabIndex = 18 + ' + 'btnFind + ' + Me.btnFind.Location = New System.Drawing.Point(114, 118) + Me.btnFind.Name = "btnFind" + Me.btnFind.Size = New System.Drawing.Size(54, 23) + Me.btnFind.TabIndex = 17 + Me.btnFind.Text = "Find" + Me.btnFind.UseVisualStyleBackColor = True + ' + 'btnAssign + ' + Me.btnAssign.Location = New System.Drawing.Point(5, 146) + Me.btnAssign.Name = "btnAssign" + Me.btnAssign.Size = New System.Drawing.Size(163, 37) + Me.btnAssign.TabIndex = 3 + Me.btnAssign.Text = "Assign Tag to Employee" + Me.btnAssign.UseVisualStyleBackColor = True + ' + 'txtTagID + ' + Me.txtTagID.Location = New System.Drawing.Point(6, 32) + Me.txtTagID.Multiline = True + Me.txtTagID.Name = "txtTagID" + Me.txtTagID.ReadOnly = True + Me.txtTagID.Size = New System.Drawing.Size(162, 20) + Me.txtTagID.TabIndex = 2 + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.Location = New System.Drawing.Point(3, 16) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(40, 13) + Me.Label1.TabIndex = 1 + Me.Label1.Text = "Tag ID" + ' + 'NorthwindDataSet + ' + Me.NorthwindDataSet.DataSetName = "NorthwindDataSet" + Me.NorthwindDataSet.SchemaSerializationMode = System.Data.SchemaSerializationMode.IncludeSchema + ' + 'EmployeesBindingSource + ' + Me.EmployeesBindingSource.DataMember = "Employees" + Me.EmployeesBindingSource.DataSource = Me.NorthwindDataSet + ' + 'EmployeesTableAdapter + ' + Me.EmployeesTableAdapter.ClearBeforeFill = True + ' + 'EmployeesBindingNavigator + ' + Me.EmployeesBindingNavigator.AddNewItem = Me.BindingNavigatorAddNewItem + Me.EmployeesBindingNavigator.BindingSource = Me.EmployeesBindingSource + Me.EmployeesBindingNavigator.CountItem = Me.BindingNavigatorCountItem + Me.EmployeesBindingNavigator.DeleteItem = Me.BindingNavigatorDeleteItem + Me.EmployeesBindingNavigator.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.BindingNavigatorMoveFirstItem, Me.BindingNavigatorMovePreviousItem, Me.BindingNavigatorSeparator, Me.BindingNavigatorPositionItem, Me.BindingNavigatorCountItem, Me.BindingNavigatorSeparator1, Me.BindingNavigatorMoveNextItem, Me.BindingNavigatorMoveLastItem, Me.BindingNavigatorSeparator2, Me.BindingNavigatorAddNewItem, Me.BindingNavigatorDeleteItem, Me.EmployeesBindingNavigatorSaveItem}) + Me.EmployeesBindingNavigator.Location = New System.Drawing.Point(0, 0) + Me.EmployeesBindingNavigator.MoveFirstItem = Me.BindingNavigatorMoveFirstItem + Me.EmployeesBindingNavigator.MoveLastItem = Me.BindingNavigatorMoveLastItem + Me.EmployeesBindingNavigator.MoveNextItem = Me.BindingNavigatorMoveNextItem + Me.EmployeesBindingNavigator.MovePreviousItem = Me.BindingNavigatorMovePreviousItem + Me.EmployeesBindingNavigator.Name = "EmployeesBindingNavigator" + Me.EmployeesBindingNavigator.PositionItem = Me.BindingNavigatorPositionItem + Me.EmployeesBindingNavigator.Size = New System.Drawing.Size(412, 25) + Me.EmployeesBindingNavigator.TabIndex = 12 + Me.EmployeesBindingNavigator.Text = "BindingNavigator1" + ' + 'BindingNavigatorAddNewItem + ' + Me.BindingNavigatorAddNewItem.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image + Me.BindingNavigatorAddNewItem.Image = CType(resources.GetObject("BindingNavigatorAddNewItem.Image"), System.Drawing.Image) + Me.BindingNavigatorAddNewItem.Name = "BindingNavigatorAddNewItem" + Me.BindingNavigatorAddNewItem.RightToLeftAutoMirrorImage = True + Me.BindingNavigatorAddNewItem.Size = New System.Drawing.Size(23, 22) + Me.BindingNavigatorAddNewItem.Text = "Add new" + ' + 'BindingNavigatorCountItem + ' + Me.BindingNavigatorCountItem.Name = "BindingNavigatorCountItem" + Me.BindingNavigatorCountItem.Size = New System.Drawing.Size(36, 22) + Me.BindingNavigatorCountItem.Text = "of {0}" + Me.BindingNavigatorCountItem.ToolTipText = "Total number of items" + ' + 'BindingNavigatorDeleteItem + ' + Me.BindingNavigatorDeleteItem.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image + Me.BindingNavigatorDeleteItem.Image = CType(resources.GetObject("BindingNavigatorDeleteItem.Image"), System.Drawing.Image) + Me.BindingNavigatorDeleteItem.Name = "BindingNavigatorDeleteItem" + Me.BindingNavigatorDeleteItem.RightToLeftAutoMirrorImage = True + Me.BindingNavigatorDeleteItem.Size = New System.Drawing.Size(23, 22) + Me.BindingNavigatorDeleteItem.Text = "Delete" + ' + 'BindingNavigatorMoveFirstItem + ' + Me.BindingNavigatorMoveFirstItem.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image + Me.BindingNavigatorMoveFirstItem.Image = CType(resources.GetObject("BindingNavigatorMoveFirstItem.Image"), System.Drawing.Image) + Me.BindingNavigatorMoveFirstItem.Name = "BindingNavigatorMoveFirstItem" + Me.BindingNavigatorMoveFirstItem.RightToLeftAutoMirrorImage = True + Me.BindingNavigatorMoveFirstItem.Size = New System.Drawing.Size(23, 22) + Me.BindingNavigatorMoveFirstItem.Text = "Move first" + ' + 'BindingNavigatorMovePreviousItem + ' + Me.BindingNavigatorMovePreviousItem.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image + Me.BindingNavigatorMovePreviousItem.Image = CType(resources.GetObject("BindingNavigatorMovePreviousItem.Image"), System.Drawing.Image) + Me.BindingNavigatorMovePreviousItem.Name = "BindingNavigatorMovePreviousItem" + Me.BindingNavigatorMovePreviousItem.RightToLeftAutoMirrorImage = True + Me.BindingNavigatorMovePreviousItem.Size = New System.Drawing.Size(23, 22) + Me.BindingNavigatorMovePreviousItem.Text = "Move previous" + ' + 'BindingNavigatorSeparator + ' + Me.BindingNavigatorSeparator.Name = "BindingNavigatorSeparator" + Me.BindingNavigatorSeparator.Size = New System.Drawing.Size(6, 25) + ' + 'BindingNavigatorPositionItem + ' + Me.BindingNavigatorPositionItem.AccessibleName = "Position" + Me.BindingNavigatorPositionItem.AutoSize = False + Me.BindingNavigatorPositionItem.Name = "BindingNavigatorPositionItem" + Me.BindingNavigatorPositionItem.Size = New System.Drawing.Size(50, 21) + Me.BindingNavigatorPositionItem.Text = "0" + Me.BindingNavigatorPositionItem.ToolTipText = "Current position" + ' + 'BindingNavigatorSeparator1 + ' + Me.BindingNavigatorSeparator1.Name = "BindingNavigatorSeparator1" + Me.BindingNavigatorSeparator1.Size = New System.Drawing.Size(6, 25) + ' + 'BindingNavigatorMoveNextItem + ' + Me.BindingNavigatorMoveNextItem.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image + Me.BindingNavigatorMoveNextItem.Image = CType(resources.GetObject("BindingNavigatorMoveNextItem.Image"), System.Drawing.Image) + Me.BindingNavigatorMoveNextItem.Name = "BindingNavigatorMoveNextItem" + Me.BindingNavigatorMoveNextItem.RightToLeftAutoMirrorImage = True + Me.BindingNavigatorMoveNextItem.Size = New System.Drawing.Size(23, 22) + Me.BindingNavigatorMoveNextItem.Text = "Move next" + ' + 'BindingNavigatorMoveLastItem + ' + Me.BindingNavigatorMoveLastItem.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image + Me.BindingNavigatorMoveLastItem.Image = CType(resources.GetObject("BindingNavigatorMoveLastItem.Image"), System.Drawing.Image) + Me.BindingNavigatorMoveLastItem.Name = "BindingNavigatorMoveLastItem" + Me.BindingNavigatorMoveLastItem.RightToLeftAutoMirrorImage = True + Me.BindingNavigatorMoveLastItem.Size = New System.Drawing.Size(23, 22) + Me.BindingNavigatorMoveLastItem.Text = "Move last" + ' + 'BindingNavigatorSeparator2 + ' + Me.BindingNavigatorSeparator2.Name = "BindingNavigatorSeparator2" + Me.BindingNavigatorSeparator2.Size = New System.Drawing.Size(6, 25) + ' + 'EmployeesBindingNavigatorSaveItem + ' + Me.EmployeesBindingNavigatorSaveItem.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image + Me.EmployeesBindingNavigatorSaveItem.Image = CType(resources.GetObject("EmployeesBindingNavigatorSaveItem.Image"), System.Drawing.Image) + Me.EmployeesBindingNavigatorSaveItem.Name = "EmployeesBindingNavigatorSaveItem" + Me.EmployeesBindingNavigatorSaveItem.Size = New System.Drawing.Size(23, 22) + Me.EmployeesBindingNavigatorSaveItem.Text = "Save Data" + ' + 'EmployeeIDLabel1 + ' + Me.EmployeeIDLabel1.DataBindings.Add(New System.Windows.Forms.Binding("Text", Me.EmployeesBindingSource, "EmployeeID", True)) + Me.EmployeeIDLabel1.Location = New System.Drawing.Point(86, 58) + Me.EmployeeIDLabel1.Name = "EmployeeIDLabel1" + Me.EmployeeIDLabel1.Size = New System.Drawing.Size(124, 13) + Me.EmployeeIDLabel1.TabIndex = 13 + ' + 'LastNameTextBox + ' + Me.LastNameTextBox.DataBindings.Add(New System.Windows.Forms.Binding("Text", Me.EmployeesBindingSource, "LastName", True)) + Me.LastNameTextBox.Location = New System.Drawing.Point(86, 78) + Me.LastNameTextBox.Name = "LastNameTextBox" + Me.LastNameTextBox.Size = New System.Drawing.Size(124, 20) + Me.LastNameTextBox.TabIndex = 15 + ' + 'FirstNameTextBox + ' + Me.FirstNameTextBox.DataBindings.Add(New System.Windows.Forms.Binding("Text", Me.EmployeesBindingSource, "FirstName", True)) + Me.FirstNameTextBox.Location = New System.Drawing.Point(86, 104) + Me.FirstNameTextBox.Name = "FirstNameTextBox" + Me.FirstNameTextBox.Size = New System.Drawing.Size(124, 20) + Me.FirstNameTextBox.TabIndex = 17 + ' + 'TitleTextBox + ' + Me.TitleTextBox.DataBindings.Add(New System.Windows.Forms.Binding("Text", Me.EmployeesBindingSource, "Title", True)) + Me.TitleTextBox.Location = New System.Drawing.Point(86, 130) + Me.TitleTextBox.Name = "TitleTextBox" + Me.TitleTextBox.Size = New System.Drawing.Size(124, 20) + Me.TitleTextBox.TabIndex = 19 + ' + 'PhotoPictureBox + ' + Me.PhotoPictureBox.DataBindings.Add(New System.Windows.Forms.Binding("Image", Me.EmployeesBindingSource, "Photo", True)) + Me.PhotoPictureBox.Location = New System.Drawing.Point(86, 156) + Me.PhotoPictureBox.Name = "PhotoPictureBox" + Me.PhotoPictureBox.Size = New System.Drawing.Size(95, 110) + Me.PhotoPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage + Me.PhotoPictureBox.TabIndex = 21 + Me.PhotoPictureBox.TabStop = False + ' + 'TagIDLabel1 + ' + Me.TagIDLabel1.DataBindings.Add(New System.Windows.Forms.Binding("Text", Me.EmployeesBindingSource, "TagID", True)) + Me.TagIDLabel1.Location = New System.Drawing.Point(86, 35) + Me.TagIDLabel1.Name = "TagIDLabel1" + Me.TagIDLabel1.Size = New System.Drawing.Size(124, 13) + Me.TagIDLabel1.TabIndex = 23 + ' + 'StatusStrip1 + ' + Me.StatusStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.ToolStripStatusLabel1}) + Me.StatusStrip1.Location = New System.Drawing.Point(0, 277) + Me.StatusStrip1.Name = "StatusStrip1" + Me.StatusStrip1.Size = New System.Drawing.Size(412, 22) + Me.StatusStrip1.TabIndex = 24 + Me.StatusStrip1.Text = "StatusStrip1" + ' + 'ToolStripStatusLabel1 + ' + Me.ToolStripStatusLabel1.Name = "ToolStripStatusLabel1" + Me.ToolStripStatusLabel1.Size = New System.Drawing.Size(111, 17) + Me.ToolStripStatusLabel1.Text = "ToolStripStatusLabel1" + ' + 'Timer1 + ' + ' + 'Form1 + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(412, 299) + Me.Controls.Add(Me.StatusStrip1) + Me.Controls.Add(EmployeeIDLabel) + Me.Controls.Add(Me.EmployeeIDLabel1) + Me.Controls.Add(LastNameLabel) + Me.Controls.Add(Me.LastNameTextBox) + Me.Controls.Add(FirstNameLabel) + Me.Controls.Add(Me.FirstNameTextBox) + Me.Controls.Add(TitleLabel) + Me.Controls.Add(Me.TitleTextBox) + Me.Controls.Add(PhotoLabel) + Me.Controls.Add(Me.PhotoPictureBox) + Me.Controls.Add(TagIDLabel) + Me.Controls.Add(Me.TagIDLabel1) + Me.Controls.Add(Me.EmployeesBindingNavigator) + Me.Controls.Add(Me.GroupBox1) + Me.Name = "Form1" + Me.Text = "Attendance System" + Me.GroupBox1.ResumeLayout(False) + Me.GroupBox1.PerformLayout() + CType(Me.NorthwindDataSet, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.EmployeesBindingSource, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.EmployeesBindingNavigator, System.ComponentModel.ISupportInitialize).EndInit() + Me.EmployeesBindingNavigator.ResumeLayout(False) + Me.EmployeesBindingNavigator.PerformLayout() + CType(Me.PhotoPictureBox, System.ComponentModel.ISupportInitialize).EndInit() + Me.StatusStrip1.ResumeLayout(False) + Me.StatusStrip1.PerformLayout() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox + Friend WithEvents btnAssign As System.Windows.Forms.Button + Friend WithEvents txtTagID As System.Windows.Forms.TextBox + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents NorthwindDataSet As Attendance.NorthwindDataSet + Friend WithEvents EmployeesBindingSource As System.Windows.Forms.BindingSource + Friend WithEvents EmployeesTableAdapter As Attendance.NorthwindDataSetTableAdapters.EmployeesTableAdapter + Friend WithEvents EmployeesBindingNavigator As System.Windows.Forms.BindingNavigator + Friend WithEvents BindingNavigatorAddNewItem As System.Windows.Forms.ToolStripButton + Friend WithEvents BindingNavigatorCountItem As System.Windows.Forms.ToolStripLabel + Friend WithEvents BindingNavigatorDeleteItem As System.Windows.Forms.ToolStripButton + Friend WithEvents BindingNavigatorMoveFirstItem As System.Windows.Forms.ToolStripButton + Friend WithEvents BindingNavigatorMovePreviousItem As System.Windows.Forms.ToolStripButton + Friend WithEvents BindingNavigatorSeparator As System.Windows.Forms.ToolStripSeparator + Friend WithEvents BindingNavigatorPositionItem As System.Windows.Forms.ToolStripTextBox + Friend WithEvents BindingNavigatorSeparator1 As System.Windows.Forms.ToolStripSeparator + Friend WithEvents BindingNavigatorMoveNextItem As System.Windows.Forms.ToolStripButton + Friend WithEvents BindingNavigatorMoveLastItem As System.Windows.Forms.ToolStripButton + Friend WithEvents BindingNavigatorSeparator2 As System.Windows.Forms.ToolStripSeparator + Friend WithEvents EmployeesBindingNavigatorSaveItem As System.Windows.Forms.ToolStripButton + Friend WithEvents EmployeeIDLabel1 As System.Windows.Forms.Label + Friend WithEvents LastNameTextBox As System.Windows.Forms.TextBox + Friend WithEvents FirstNameTextBox As System.Windows.Forms.TextBox + Friend WithEvents TitleTextBox As System.Windows.Forms.TextBox + Friend WithEvents PhotoPictureBox As System.Windows.Forms.PictureBox + Friend WithEvents TagIDLabel1 As System.Windows.Forms.Label + Friend WithEvents btnFind As System.Windows.Forms.Button + Friend WithEvents txtEmployeeID As System.Windows.Forms.TextBox + Friend WithEvents btnDeassign As System.Windows.Forms.Button + Friend WithEvents StatusStrip1 As System.Windows.Forms.StatusStrip + Friend WithEvents ToolStripStatusLabel1 As System.Windows.Forms.ToolStripStatusLabel + Friend WithEvents Timer1 As System.Windows.Forms.Timer + +End Class diff --git a/Chapter05(RFID)/Attendance_Parallax/Form1.resx b/Chapter05(RFID)/Attendance_Parallax/Form1.resx new file mode 100644 index 0000000..93a07fa --- /dev/null +++ b/Chapter05(RFID)/Attendance_Parallax/Form1.resx @@ -0,0 +1,245 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + 17, 17 + + + 159, 17 + + + 335, 17 + + + 506, 17 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAU1JREFUOE9jYBi0 + 4O4C9v+35nH+vzqH6//FGbz/SXbodaDGP48a//952PD/5GQB0g04P50XbsDBHhHSDTg+SRBoe93/Pw+q + /u9oFydswKWZPP/PTuX7fxKo8Ui/0P993SJAzeX//94r+r++Qeb/qhq5/0srFf/PL1X+P6tIFdPAU0B/ + /nlYD9RUC8SV///cKwHivP9/72b+/3sn+f/f23H//92MAOKQ/5NyNDENONQrDHbu3/ulQI0FQI3ZQI2p + QI0J///digZqDPv/70bQ/3/X/f53peliGrCzXeL/lmap/+vAzpX/v6RC8f/fWzFAjeH/p+Zp/J+QpfW/ + O0P3f3uq/v/mREPCYTIb6E+Qc//dCPjfk6FDWAN6QgH5898NfyD2+9+arE+6Ad3pumD/gnB9nBHpBrQk + GfxviDf8XxNr/L8y2oR0A0hO++RqAAAkI9ieo+gjUwAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAW9JREFUOE+tkk0o + w3EYx3dV3kq5uKBWDiPT8hISMiQsMiEyQ9qBg0hoFwcHUi7kgIvkQFJSTrQ4zdvmrTW1/kuT0i74x+X3 + MRal/fEnv8tz+H2fz/N8vz0azX88PG6wmcDp4E881hYR3VUIixF2Nr+FcO2DlbnPGjaWoM+M6DAiOitg + YUoR8rqhsJTBWG/kP6fOMKTegGjKh/7mTyIx0oUw58C0/XubLM8iKtPeQIx2gfcMJgbD0FBVlRE+D7QU + hS2ZshANuTDQqq75fQIHe6GVcxHV6VCr/2VzQIKmAshOQNbHc6+PhTqDOggBP5jzoDCJoLUaLo7fwr3V + hSCr8z8EeHcLbSU8FCfjLU0nuL/70cB4Py5tDLL7UBnC8xMMW6EkhRNdIsGt9QjhTXkGUnsN8rVf4Q72 + tpFzEnGlRiH1NIL8qDjJoY1DdjkVADNjSGnReI2ZIF196VW22+D8SAFw6YLJITjaV5e2qotSIXoBiiMD + HEVvQ/IAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAStJREFUOE9jYBg0 + oHDW8/9NC57/z5z4+D8uR4W3P8Apx5A789n/VUfe/8elKL77wf/ghmu4DciY8vT/wn0fsCqK73n4f+n+ + ///9qy/gNiCh58n/aVveYyiKaL8P1pw56/9/r9ITuA2I7Hr0v3f1BxRFoa33wJpb1wFt7/z73yX/AG4D + Apsf/q+b/w6uKLjl7v9Fe///7wBqzpjz879d3c//9hnbcRvgUXX/f/60NyiK7Ipv/0+f8/u/f9e3/zqF + 7/5bJKzHbYB96d3/2ZNfYyjSTzn/36ToxX+VrE//jSOX4TbAIu/O/9T+11gVGSSd+C+b9vW/bvA83AYY + Zt3+H9byEqci/dTL/zV8p+E2QCftxn+/6od4Fal4TMBtgFPulf8gBXgVDZqMh+wQAPB2wKsSwCgmAAAA + AElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAL1JREFUOE9jYBgy + ILz9wX+yHRvf/eB/cMM18gyI73n4f+n+///9qy+QbkBE+32w5sxZ//97lZ4gzYDQ1ntgza3rgLZ3/v3v + kn+AeAOCW+7+X7T3//8OoOaMOT//29X9/G+fsZ14A0ChbVd8+3/6nN///bu+/dcpfPffImE9aQaADNFP + Of/fpOjFf5WsT/+NI5eRbgDIEIOkE/9l077+1w2eR54BYJekXv6v4TuNfANAhqh4TKDMALKTMc01AgDQ + FGCYkuTLEQAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAKtJREFUOE9jYBh0 + oHDW8/8UOSp35rP/Cd33yDckY8rT//P2//6f0HWHPEMSep78n73v1//OrX//u5VeJt2QyK5H/6ds+/W/ + ZOnf/wnT//63yT1LmiGBzQ//t659D9ZsXPLlv3T0tf/GkcuIN8Sj6v7/krnv4JoVXXqI1wyKPvvSu/8D + W56BbSZZM8gAi7w7/20KrpCnGWSAYdZt8jWDDNBJu0GanylKtoNCMwCgfl+gC2KedgAAAABJRU5ErkJg + gg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAATBJREFUOE9jYBhU + oHDW8/+4HASSa1rw/H/mxMc41TDkznz2P6H7HlYFILlVR97/D29/gNuAjClP/8/b//t/QtcdDEUguYX7 + PvwPbriG24CEnif/Z+/79b9z69//bqWXURSC5KZtef/fv/oCbgMiux79n7Lt1/+SpX//J0z/+98m9yxc + MUiud/WH/16lJ3AbENj88H/r2vdgzcYlX/5LR1/7bxy5DKwBJFc3/91/l/wDuA3wqLr/v2TuO7hmRZce + uGKQXP60N//tM7bjNsC+9O7/wJZnYJuRNYNcAJLLnvz6v0XCetwGWOTd+W9TcAVDM8gAkFxq/2u4l7Cm + F8Os21g1gxSD5MJaXv7XDZ6H2wU6aTdwSoLk/Kof/tfwnYbbAHz5yin3yn8VjwlgPKjyHwMAvtG/s0Vm + x8MAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAilJREFUOE+tk91L + k3EUx/cvdN9N0EW3NTWGa7EaPOUcyqphWBG9PZEv5dJlmqhYmUYtXyBb4dJJy+kknFT4BqZIjaFMJUsz + V7TEoabYRDD49ju/6Pm1Mm/qB+fy8znPOef7qFT/4z17GgWVr30Zbd4lPHYvoLEhgvuOGdTWfIL9dgg3 + yqdQWjKBwoLXyMsdxYXzQSi9CeztAWqqV7HRW1ldgzGtF4fTnvBSBN7WRS6orPjyV57gyMIKdpufQ62W + YTnkEQL3o3kuKC35vK7gJ/w+vIg4kw8Fl6dxwNwkBM76WS64ZHv3h+BXeGQygm2SF9accaSmOIWg7m6Y + C7KzRmMEv8ODwTA2692Q5QBMJocQVFd95AL5TEARrAf3+D9gU2IDjhx9gaSkWiG4WTmN7i6wUwLHT76C + 5dgA3zYtjGamz6bOP+A+HLR0QpLsQnC1bBIdPrAMAE2ub+zuX1F+fY4vlRZGM2dmBBU4ObUdBkOFEFwp + HIenGXjoXGPBicKYnhNT5hM2pJ8r4p2TUxi83wO9vkwIbHljDAaq7kR5ZxJQSOK0EobezmJsag5y7jXs + NbZxWLvHBZ2uSAgolo57UD6bBASfzb+FN6F5hGaWcLHYjni9i8GNiN/1ANrEfCHIzBhmcy/zmbcaPNiy + Q0JLRz98XYPo7vNj4OUQ9pksUOvqkcDg7Zo6aDTWWMHpU/08npQwCgndmU5F26aF0czUlYrgnQnZQvAv + f/R3bGg6a0rM640AAAAASUVORK5CYII= + + + + 696, 17 + + + 808, 17 + + \ No newline at end of file diff --git a/Chapter05(RFID)/Attendance_Parallax/Form1.vb b/Chapter05(RFID)/Attendance_Parallax/Form1.vb new file mode 100644 index 0000000..01228e6 --- /dev/null +++ b/Chapter05(RFID)/Attendance_Parallax/Form1.vb @@ -0,0 +1,197 @@ +Imports System.Data +Imports System.Data.SqlClient +Imports System.IO + +Public Class Form1 + '---serial port to listen to incoming data--- + Private WithEvents serialPort As New IO.Ports.SerialPort + '---tag ID read from the reader--- + Private tagID As String = String.Empty + '---the time that the tag ID was recorded--- + Private timeRecorded As DateTime = Now + + '---COM port to listen to--- + Const COM As String = "COM3" + '---file name of the log file--- + Const FILE_NAME As String = "C:\Attendance.csv" + '---the interval before the employee record is cleared + ' from the screen (in seconds)--- + Const INTERVAL As Integer = 3 + + Private Sub Form1_Load( _ + ByVal sender As System.Object, _ + ByVal e As System.EventArgs) Handles MyBase.Load + + 'TODO: This line of code loads data into the + ' 'NorthwindDataSet.Employees' table. You can move, + ' or remove it, as needed. + Me.EmployeesTableAdapter.Fill(Me.NorthwindDataSet.Employees) + + '---Clear the employee when the app is loaded--- + EmployeesBindingSource.Filter = "TAGID='xxxxxxxxxx'" + '---set the timer interval to clear the employee record--- + Timer1.Interval = INTERVAL * 1000 'convert to milliseconds + + '---open the serial port connecting to the reader--- + If serialPort.IsOpen Then + serialPort.Close() + End If + Try + With serialPort + .PortName = COM + .BaudRate = 2400 + .Parity = IO.Ports.Parity.None + .DataBits = 8 + .StopBits = IO.Ports.StopBits.One + .Handshake = IO.Ports.Handshake.None + End With + serialPort.Open() + Catch ex As Exception + MsgBox(ex.ToString) + End Try + End Sub + + Private Sub EmployeesBindingNavigatorSaveItem_Click( _ + ByVal sender As System.Object, ByVal e As System.EventArgs) _ + Handles EmployeesBindingNavigatorSaveItem.Click + Me.Validate() + Me.EmployeesBindingSource.EndEdit() + Me.EmployeesTableAdapter.Update(Me.NorthwindDataSet.Employees) + '------------------------------------------------------------- + End Sub + + Private Sub DataReceived( _ + ByVal sender As Object, _ + ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) _ + Handles serialPort.DataReceived + + '---when incoming data is received, update the TagID textbox--- + txtTagID.BeginInvoke(New _ + myDelegate(AddressOf updateTextBox), _ + New Object() {}) + End Sub + + '---update the Tag ID textbox--- + Public Delegate Sub myDelegate() + Public Sub updateTextBox() + '---for receiving plain ASCII text--- + With txtTagID + .AppendText(serialPort.ReadExisting) + .ScrollToCaret() + End With + End Sub + + Private Sub btnAssign_Click( _ + ByVal sender As System.Object, _ + ByVal e As System.EventArgs) _ + Handles btnAssign.Click + '---obtain the tag ID that was read--- + If txtTagID.Lines.Length > 1 Then + Dim tagID As String = txtTagID.Lines(txtTagID.Lines.Length - 2) + Else + ToolStripStatusLabel1.Text = "No tag id scanned." + Exit Sub + End If + + If txtTagID.Text <> String.Empty Then + '---assign the Tag ID to the current employee--- + TagIDLabel1.Text = tagID + ToolStripStatusLabel1.Text = "Tag associated with employee." + '---save the record--- + Me.Validate() + Me.EmployeesBindingSource.EndEdit() + Me.EmployeesTableAdapter.Update(Me.NorthwindDataSet.Employees) + End If + End Sub + + Private Sub txtTagID_TextChanged( _ + ByVal sender As System.Object, _ + ByVal e As System.EventArgs) _ + Handles txtTagID.TextChanged + + If txtTagID.Lines(txtTagID.Lines.Length - 1) = String.Empty Then + '---get the tag ID that is read--- + Dim temptagID As String = txtTagID.Lines(txtTagID.Lines.Length - 2) + + '---get the time interval between the last read time + ' and the current time--- + Dim tp As TimeSpan = Now.Subtract(timeRecorded) + Dim timeInterval As Double = tp.Ticks / TimeSpan.TicksPerSecond + + If (temptagID = tagID) And timeInterval < INTERVAL Then + '---if it is the same tag and the time interval + ' is less than 3 seconds, the tag won't be registered--- + Exit Sub + End If + + '---the tag is saved--- + tagID = temptagID + EmployeesBindingSource.RemoveFilter() + + '---find the employee associated with the tag--- + EmployeesBindingSource.Filter = "TAGID='" & tagID & "'" + If EmployeesBindingSource.Count < 1 Then + ToolStripStatusLabel1.Text = "Employee not found." + Else + ToolStripStatusLabel1.Text = "Employee found." + '---write the employee information to log file--- + WriteToLog(EmployeeIDLabel1.Text, _ + LastNameTextBox.Text & ", " & FirstNameTextBox.Text) + '---reset the timer--- + Timer1.Enabled = False + Timer1.Enabled = True + End If + '---save the time this tag was recorded--- + timeRecorded = Now + End If + End Sub + + Private Sub btnFind_Click( _ + ByVal sender As System.Object, _ + ByVal e As System.EventArgs) _ + Handles btnFind.Click + '---search for employee--- + If txtEmployeeID.Text = String.Empty Then + EmployeesBindingSource.RemoveFilter() + Else + EmployeesBindingSource.Filter = _ + "EmployeeID='" & txtEmployeeID.Text & "'" + End If + End Sub + + Private Sub btnDeassign_Click( _ + ByVal sender As System.Object, _ + ByVal e As System.EventArgs) _ + Handles btnDeassign.Click + + If Trim(TagIDLabel1.Text) = String.Empty Then + ToolStripStatusLabel1.Text = "Current employee has no tag ID." + Exit Sub + End If + '---deassociate tag ID from employee--- + TagIDLabel1.Text = String.Empty + '---save the record--- + Me.Validate() + Me.EmployeesBindingSource.EndEdit() + Me.EmployeesTableAdapter.Update(Me.NorthwindDataSet.Employees) + ToolStripStatusLabel1.Text = "Tag deassociated from employee." + End Sub + + Private Sub WriteToLog( _ + ByVal employeeID As String, _ + ByVal employeeName As String) + '---write to log file--- + Dim str As String = employeeID & "," & _ + employeeName & "," & Now & Chr(13) + My.Computer.FileSystem.WriteAllText(FILE_NAME, str, True) + End Sub + + Private Sub Timer1_Tick( _ + ByVal sender As System.Object, _ + ByVal e As System.EventArgs) _ + Handles Timer1.Tick + '---clear the employee--- + EmployeesBindingSource.Filter = "TAGID='xxxxxxxxxx'" + Timer1.Enabled = False + End Sub +End Class diff --git a/Chapter05(RFID)/Attendance_Parallax/My Project/Application.Designer.vb b/Chapter05(RFID)/Attendance_Parallax/My Project/Application.Designer.vb new file mode 100644 index 0000000..f55b41e --- /dev/null +++ b/Chapter05(RFID)/Attendance_Parallax/My Project/Application.Designer.vb @@ -0,0 +1,38 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.42 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + 'NOTE: This file is auto-generated; do not modify it directly. To make changes, + ' or if you encounter build errors in this file, go to the Project Designer + ' (go to Project Properties or double-click the My Project node in + ' Solution Explorer), and make changes on the Application tab. + ' + Partial Friend Class MyApplication + + _ + Public Sub New() + MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) + Me.IsSingleInstance = false + Me.EnableVisualStyles = true + Me.SaveMySettingsOnExit = true + Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses + End Sub + + _ + Protected Overrides Sub OnCreateMainForm() + Me.MainForm = Global.Attendance.Form1 + End Sub + End Class +End Namespace diff --git a/Chapter05(RFID)/Attendance_Parallax/My Project/Application.myapp b/Chapter05(RFID)/Attendance_Parallax/My Project/Application.myapp new file mode 100644 index 0000000..0f12f32 --- /dev/null +++ b/Chapter05(RFID)/Attendance_Parallax/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + true + Form1 + false + 0 + true + 0 + true + \ No newline at end of file diff --git a/Chapter05(RFID)/Attendance_Parallax/My Project/AssemblyInfo.vb b/Chapter05(RFID)/Attendance_Parallax/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..6f0671c --- /dev/null +++ b/Chapter05(RFID)/Attendance_Parallax/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Chapter05(RFID)/Attendance_Parallax/My Project/Resources.Designer.vb b/Chapter05(RFID)/Attendance_Parallax/My Project/Resources.Designer.vb new file mode 100644 index 0000000..8aa363f --- /dev/null +++ b/Chapter05(RFID)/Attendance_Parallax/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.42 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Attendance.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Chapter05(RFID)/Attendance_Parallax/My Project/Resources.resx b/Chapter05(RFID)/Attendance_Parallax/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Chapter05(RFID)/Attendance_Parallax/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter05(RFID)/Attendance_Parallax/My Project/Settings.Designer.vb b/Chapter05(RFID)/Attendance_Parallax/My Project/Settings.Designer.vb new file mode 100644 index 0000000..c3ec89f --- /dev/null +++ b/Chapter05(RFID)/Attendance_Parallax/My Project/Settings.Designer.vb @@ -0,0 +1,83 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.42 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + + _ + Public ReadOnly Property NorthwindConnectionString() As String + Get + Return CType(Me("NorthwindConnectionString"),String) + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.Attendance.My.MySettings + Get + Return Global.Attendance.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Chapter05(RFID)/Attendance_Parallax/My Project/Settings.settings b/Chapter05(RFID)/Attendance_Parallax/My Project/Settings.settings new file mode 100644 index 0000000..52b713c --- /dev/null +++ b/Chapter05(RFID)/Attendance_Parallax/My Project/Settings.settings @@ -0,0 +1,14 @@ + + + + + + <?xml version="1.0" encoding="utf-16"?> +<SerializableConnectionString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <ConnectionString>Data Source=.\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True</ConnectionString> + <ProviderName>System.Data.SqlClient</ProviderName> +</SerializableConnectionString> + Data Source=.\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True + + + \ No newline at end of file diff --git a/Chapter05(RFID)/Attendance_Parallax/NorthwindDataSet.Designer.vb b/Chapter05(RFID)/Attendance_Parallax/NorthwindDataSet.Designer.vb new file mode 100644 index 0000000..ada1df6 --- /dev/null +++ b/Chapter05(RFID)/Attendance_Parallax/NorthwindDataSet.Designer.vb @@ -0,0 +1,1006 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.42 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict Off +Option Explicit On + +Imports System + + + _ +Partial Public Class NorthwindDataSet + Inherits System.Data.DataSet + + Private tableEmployees As EmployeesDataTable + + Private _schemaSerializationMode As System.Data.SchemaSerializationMode = System.Data.SchemaSerializationMode.IncludeSchema + + _ + Public Sub New() + MyBase.New + Me.BeginInit + Me.InitClass + Dim schemaChangedHandler As System.ComponentModel.CollectionChangeEventHandler = AddressOf Me.SchemaChanged + AddHandler MyBase.Tables.CollectionChanged, schemaChangedHandler + AddHandler MyBase.Relations.CollectionChanged, schemaChangedHandler + Me.EndInit + End Sub + + _ + Protected Sub New(ByVal info As System.Runtime.Serialization.SerializationInfo, ByVal context As System.Runtime.Serialization.StreamingContext) + MyBase.New(info, context, false) + If (Me.IsBinarySerialized(info, context) = true) Then + Me.InitVars(false) + Dim schemaChangedHandler1 As System.ComponentModel.CollectionChangeEventHandler = AddressOf Me.SchemaChanged + AddHandler Me.Tables.CollectionChanged, schemaChangedHandler1 + AddHandler Me.Relations.CollectionChanged, schemaChangedHandler1 + Return + End If + Dim strSchema As String = CType(info.GetValue("XmlSchema", GetType(String)),String) + If (Me.DetermineSchemaSerializationMode(info, context) = System.Data.SchemaSerializationMode.IncludeSchema) Then + Dim ds As System.Data.DataSet = New System.Data.DataSet + ds.ReadXmlSchema(New System.Xml.XmlTextReader(New System.IO.StringReader(strSchema))) + If (Not (ds.Tables("Employees")) Is Nothing) Then + MyBase.Tables.Add(New EmployeesDataTable(ds.Tables("Employees"))) + End If + Me.DataSetName = ds.DataSetName + Me.Prefix = ds.Prefix + Me.Namespace = ds.Namespace + Me.Locale = ds.Locale + Me.CaseSensitive = ds.CaseSensitive + Me.EnforceConstraints = ds.EnforceConstraints + Me.Merge(ds, false, System.Data.MissingSchemaAction.Add) + Me.InitVars + Else + Me.ReadXmlSchema(New System.Xml.XmlTextReader(New System.IO.StringReader(strSchema))) + End If + Me.GetSerializationData(info, context) + Dim schemaChangedHandler As System.ComponentModel.CollectionChangeEventHandler = AddressOf Me.SchemaChanged + AddHandler MyBase.Tables.CollectionChanged, schemaChangedHandler + AddHandler Me.Relations.CollectionChanged, schemaChangedHandler + End Sub + + _ + Public ReadOnly Property Employees() As EmployeesDataTable + Get + Return Me.tableEmployees + End Get + End Property + + _ + Public Overrides Property SchemaSerializationMode() As System.Data.SchemaSerializationMode + Get + Return Me._schemaSerializationMode + End Get + Set + Me._schemaSerializationMode = value + End Set + End Property + + _ + Public Shadows ReadOnly Property Tables() As System.Data.DataTableCollection + Get + Return MyBase.Tables + End Get + End Property + + _ + Public Shadows ReadOnly Property Relations() As System.Data.DataRelationCollection + Get + Return MyBase.Relations + End Get + End Property + + _ + Protected Overrides Sub InitializeDerivedDataSet() + Me.BeginInit + Me.InitClass + Me.EndInit + End Sub + + _ + Public Overrides Function Clone() As System.Data.DataSet + Dim cln As NorthwindDataSet = CType(MyBase.Clone,NorthwindDataSet) + cln.InitVars + cln.SchemaSerializationMode = Me.SchemaSerializationMode + Return cln + End Function + + _ + Protected Overrides Function ShouldSerializeTables() As Boolean + Return false + End Function + + _ + Protected Overrides Function ShouldSerializeRelations() As Boolean + Return false + End Function + + _ + Protected Overrides Sub ReadXmlSerializable(ByVal reader As System.Xml.XmlReader) + If (Me.DetermineSchemaSerializationMode(reader) = System.Data.SchemaSerializationMode.IncludeSchema) Then + Me.Reset + Dim ds As System.Data.DataSet = New System.Data.DataSet + ds.ReadXml(reader) + If (Not (ds.Tables("Employees")) Is Nothing) Then + MyBase.Tables.Add(New EmployeesDataTable(ds.Tables("Employees"))) + End If + Me.DataSetName = ds.DataSetName + Me.Prefix = ds.Prefix + Me.Namespace = ds.Namespace + Me.Locale = ds.Locale + Me.CaseSensitive = ds.CaseSensitive + Me.EnforceConstraints = ds.EnforceConstraints + Me.Merge(ds, false, System.Data.MissingSchemaAction.Add) + Me.InitVars + Else + Me.ReadXml(reader) + Me.InitVars + End If + End Sub + + _ + Protected Overrides Function GetSchemaSerializable() As System.Xml.Schema.XmlSchema + Dim stream As System.IO.MemoryStream = New System.IO.MemoryStream + Me.WriteXmlSchema(New System.Xml.XmlTextWriter(stream, Nothing)) + stream.Position = 0 + Return System.Xml.Schema.XmlSchema.Read(New System.Xml.XmlTextReader(stream), Nothing) + End Function + + _ + Friend Overloads Sub InitVars() + Me.InitVars(true) + End Sub + + _ + Friend Overloads Sub InitVars(ByVal initTable As Boolean) + Me.tableEmployees = CType(MyBase.Tables("Employees"),EmployeesDataTable) + If (initTable = true) Then + If (Not (Me.tableEmployees) Is Nothing) Then + Me.tableEmployees.InitVars + End If + End If + End Sub + + _ + Private Sub InitClass() + Me.DataSetName = "NorthwindDataSet" + Me.Prefix = "" + Me.Namespace = "http://tempuri.org/NorthwindDataSet.xsd" + Me.EnforceConstraints = true + Me.SchemaSerializationMode = System.Data.SchemaSerializationMode.IncludeSchema + Me.tableEmployees = New EmployeesDataTable + MyBase.Tables.Add(Me.tableEmployees) + End Sub + + _ + Private Function ShouldSerializeEmployees() As Boolean + Return false + End Function + + _ + Private Sub SchemaChanged(ByVal sender As Object, ByVal e As System.ComponentModel.CollectionChangeEventArgs) + If (e.Action = System.ComponentModel.CollectionChangeAction.Remove) Then + Me.InitVars + End If + End Sub + + _ + Public Shared Function GetTypedDataSetSchema(ByVal xs As System.Xml.Schema.XmlSchemaSet) As System.Xml.Schema.XmlSchemaComplexType + Dim ds As NorthwindDataSet = New NorthwindDataSet + Dim type As System.Xml.Schema.XmlSchemaComplexType = New System.Xml.Schema.XmlSchemaComplexType + Dim sequence As System.Xml.Schema.XmlSchemaSequence = New System.Xml.Schema.XmlSchemaSequence + xs.Add(ds.GetSchemaSerializable) + Dim any As System.Xml.Schema.XmlSchemaAny = New System.Xml.Schema.XmlSchemaAny + any.Namespace = ds.Namespace + sequence.Items.Add(any) + type.Particle = sequence + Return type + End Function + + Public Delegate Sub EmployeesRowChangeEventHandler(ByVal sender As Object, ByVal e As EmployeesRowChangeEvent) + + _ + Partial Public Class EmployeesDataTable + Inherits System.Data.DataTable + Implements System.Collections.IEnumerable + + Private columnEmployeeID As System.Data.DataColumn + + Private columnLastName As System.Data.DataColumn + + Private columnFirstName As System.Data.DataColumn + + Private columnTitle As System.Data.DataColumn + + Private columnPhoto As System.Data.DataColumn + + Private columnTagID As System.Data.DataColumn + + _ + Public Sub New() + MyBase.New + Me.TableName = "Employees" + Me.BeginInit + Me.InitClass + Me.EndInit + End Sub + + _ + Friend Sub New(ByVal table As System.Data.DataTable) + MyBase.New + Me.TableName = table.TableName + If (table.CaseSensitive <> table.DataSet.CaseSensitive) Then + Me.CaseSensitive = table.CaseSensitive + End If + If (table.Locale.ToString <> table.DataSet.Locale.ToString) Then + Me.Locale = table.Locale + End If + If (table.Namespace <> table.DataSet.Namespace) Then + Me.Namespace = table.Namespace + End If + Me.Prefix = table.Prefix + Me.MinimumCapacity = table.MinimumCapacity + End Sub + + _ + Protected Sub New(ByVal info As System.Runtime.Serialization.SerializationInfo, ByVal context As System.Runtime.Serialization.StreamingContext) + MyBase.New(info, context) + Me.InitVars + End Sub + + _ + Public ReadOnly Property EmployeeIDColumn() As System.Data.DataColumn + Get + Return Me.columnEmployeeID + End Get + End Property + + _ + Public ReadOnly Property LastNameColumn() As System.Data.DataColumn + Get + Return Me.columnLastName + End Get + End Property + + _ + Public ReadOnly Property FirstNameColumn() As System.Data.DataColumn + Get + Return Me.columnFirstName + End Get + End Property + + _ + Public ReadOnly Property TitleColumn() As System.Data.DataColumn + Get + Return Me.columnTitle + End Get + End Property + + _ + Public ReadOnly Property PhotoColumn() As System.Data.DataColumn + Get + Return Me.columnPhoto + End Get + End Property + + _ + Public ReadOnly Property TagIDColumn() As System.Data.DataColumn + Get + Return Me.columnTagID + End Get + End Property + + _ + Public ReadOnly Property Count() As Integer + Get + Return Me.Rows.Count + End Get + End Property + + _ + Public Default ReadOnly Property Item(ByVal index As Integer) As EmployeesRow + Get + Return CType(Me.Rows(index),EmployeesRow) + End Get + End Property + + Public Event EmployeesRowChanging As EmployeesRowChangeEventHandler + + Public Event EmployeesRowChanged As EmployeesRowChangeEventHandler + + Public Event EmployeesRowDeleting As EmployeesRowChangeEventHandler + + Public Event EmployeesRowDeleted As EmployeesRowChangeEventHandler + + _ + Public Overloads Sub AddEmployeesRow(ByVal row As EmployeesRow) + Me.Rows.Add(row) + End Sub + + _ + Public Overloads Function AddEmployeesRow(ByVal LastName As String, ByVal FirstName As String, ByVal Title As String, ByVal Photo() As Byte, ByVal TagID As String) As EmployeesRow + Dim rowEmployeesRow As EmployeesRow = CType(Me.NewRow,EmployeesRow) + rowEmployeesRow.ItemArray = New Object() {Nothing, LastName, FirstName, Title, Photo, TagID} + Me.Rows.Add(rowEmployeesRow) + Return rowEmployeesRow + End Function + + _ + Public Function FindByEmployeeID(ByVal EmployeeID As Integer) As EmployeesRow + Return CType(Me.Rows.Find(New Object() {EmployeeID}),EmployeesRow) + End Function + + _ + Public Overridable Function GetEnumerator() As System.Collections.IEnumerator Implements System.Collections.IEnumerable.GetEnumerator + Return Me.Rows.GetEnumerator + End Function + + _ + Public Overrides Function Clone() As System.Data.DataTable + Dim cln As EmployeesDataTable = CType(MyBase.Clone,EmployeesDataTable) + cln.InitVars + Return cln + End Function + + _ + Protected Overrides Function CreateInstance() As System.Data.DataTable + Return New EmployeesDataTable + End Function + + _ + Friend Sub InitVars() + Me.columnEmployeeID = MyBase.Columns("EmployeeID") + Me.columnLastName = MyBase.Columns("LastName") + Me.columnFirstName = MyBase.Columns("FirstName") + Me.columnTitle = MyBase.Columns("Title") + Me.columnPhoto = MyBase.Columns("Photo") + Me.columnTagID = MyBase.Columns("TagID") + End Sub + + _ + Private Sub InitClass() + Me.columnEmployeeID = New System.Data.DataColumn("EmployeeID", GetType(Integer), Nothing, System.Data.MappingType.Element) + MyBase.Columns.Add(Me.columnEmployeeID) + Me.columnLastName = New System.Data.DataColumn("LastName", GetType(String), Nothing, System.Data.MappingType.Element) + MyBase.Columns.Add(Me.columnLastName) + Me.columnFirstName = New System.Data.DataColumn("FirstName", GetType(String), Nothing, System.Data.MappingType.Element) + MyBase.Columns.Add(Me.columnFirstName) + Me.columnTitle = New System.Data.DataColumn("Title", GetType(String), Nothing, System.Data.MappingType.Element) + MyBase.Columns.Add(Me.columnTitle) + Me.columnPhoto = New System.Data.DataColumn("Photo", GetType(Byte()), Nothing, System.Data.MappingType.Element) + MyBase.Columns.Add(Me.columnPhoto) + Me.columnTagID = New System.Data.DataColumn("TagID", GetType(String), Nothing, System.Data.MappingType.Element) + MyBase.Columns.Add(Me.columnTagID) + Me.Constraints.Add(New System.Data.UniqueConstraint("Constraint1", New System.Data.DataColumn() {Me.columnEmployeeID}, true)) + Me.columnEmployeeID.AutoIncrement = true + Me.columnEmployeeID.AllowDBNull = false + Me.columnEmployeeID.ReadOnly = true + Me.columnEmployeeID.Unique = true + Me.columnLastName.AllowDBNull = false + Me.columnLastName.MaxLength = 20 + Me.columnFirstName.AllowDBNull = false + Me.columnFirstName.MaxLength = 10 + Me.columnTitle.MaxLength = 30 + Me.columnTagID.MaxLength = 10 + End Sub + + _ + Public Function NewEmployeesRow() As EmployeesRow + Return CType(Me.NewRow,EmployeesRow) + End Function + + _ + Protected Overrides Function NewRowFromBuilder(ByVal builder As System.Data.DataRowBuilder) As System.Data.DataRow + Return New EmployeesRow(builder) + End Function + + _ + Protected Overrides Function GetRowType() As System.Type + Return GetType(EmployeesRow) + End Function + + _ + Protected Overrides Sub OnRowChanged(ByVal e As System.Data.DataRowChangeEventArgs) + MyBase.OnRowChanged(e) + If (Not (Me.EmployeesRowChangedEvent) Is Nothing) Then + RaiseEvent EmployeesRowChanged(Me, New EmployeesRowChangeEvent(CType(e.Row,EmployeesRow), e.Action)) + End If + End Sub + + _ + Protected Overrides Sub OnRowChanging(ByVal e As System.Data.DataRowChangeEventArgs) + MyBase.OnRowChanging(e) + If (Not (Me.EmployeesRowChangingEvent) Is Nothing) Then + RaiseEvent EmployeesRowChanging(Me, New EmployeesRowChangeEvent(CType(e.Row,EmployeesRow), e.Action)) + End If + End Sub + + _ + Protected Overrides Sub OnRowDeleted(ByVal e As System.Data.DataRowChangeEventArgs) + MyBase.OnRowDeleted(e) + If (Not (Me.EmployeesRowDeletedEvent) Is Nothing) Then + RaiseEvent EmployeesRowDeleted(Me, New EmployeesRowChangeEvent(CType(e.Row,EmployeesRow), e.Action)) + End If + End Sub + + _ + Protected Overrides Sub OnRowDeleting(ByVal e As System.Data.DataRowChangeEventArgs) + MyBase.OnRowDeleting(e) + If (Not (Me.EmployeesRowDeletingEvent) Is Nothing) Then + RaiseEvent EmployeesRowDeleting(Me, New EmployeesRowChangeEvent(CType(e.Row,EmployeesRow), e.Action)) + End If + End Sub + + _ + Public Sub RemoveEmployeesRow(ByVal row As EmployeesRow) + Me.Rows.Remove(row) + End Sub + + _ + Public Shared Function GetTypedTableSchema(ByVal xs As System.Xml.Schema.XmlSchemaSet) As System.Xml.Schema.XmlSchemaComplexType + Dim type As System.Xml.Schema.XmlSchemaComplexType = New System.Xml.Schema.XmlSchemaComplexType + Dim sequence As System.Xml.Schema.XmlSchemaSequence = New System.Xml.Schema.XmlSchemaSequence + Dim ds As NorthwindDataSet = New NorthwindDataSet + xs.Add(ds.GetSchemaSerializable) + Dim any1 As System.Xml.Schema.XmlSchemaAny = New System.Xml.Schema.XmlSchemaAny + any1.Namespace = "http://www.w3.org/2001/XMLSchema" + any1.MinOccurs = New Decimal(0) + any1.MaxOccurs = Decimal.MaxValue + any1.ProcessContents = System.Xml.Schema.XmlSchemaContentProcessing.Lax + sequence.Items.Add(any1) + Dim any2 As System.Xml.Schema.XmlSchemaAny = New System.Xml.Schema.XmlSchemaAny + any2.Namespace = "urn:schemas-microsoft-com:xml-diffgram-v1" + any2.MinOccurs = New Decimal(1) + any2.ProcessContents = System.Xml.Schema.XmlSchemaContentProcessing.Lax + sequence.Items.Add(any2) + Dim attribute1 As System.Xml.Schema.XmlSchemaAttribute = New System.Xml.Schema.XmlSchemaAttribute + attribute1.Name = "namespace" + attribute1.FixedValue = ds.Namespace + type.Attributes.Add(attribute1) + Dim attribute2 As System.Xml.Schema.XmlSchemaAttribute = New System.Xml.Schema.XmlSchemaAttribute + attribute2.Name = "tableTypeName" + attribute2.FixedValue = "EmployeesDataTable" + type.Attributes.Add(attribute2) + type.Particle = sequence + Return type + End Function + End Class + + _ + Partial Public Class EmployeesRow + Inherits System.Data.DataRow + + Private tableEmployees As EmployeesDataTable + + _ + Friend Sub New(ByVal rb As System.Data.DataRowBuilder) + MyBase.New(rb) + Me.tableEmployees = CType(Me.Table,EmployeesDataTable) + End Sub + + _ + Public Property EmployeeID() As Integer + Get + Return CType(Me(Me.tableEmployees.EmployeeIDColumn),Integer) + End Get + Set + Me(Me.tableEmployees.EmployeeIDColumn) = value + End Set + End Property + + _ + Public Property LastName() As String + Get + Return CType(Me(Me.tableEmployees.LastNameColumn),String) + End Get + Set + Me(Me.tableEmployees.LastNameColumn) = value + End Set + End Property + + _ + Public Property FirstName() As String + Get + Return CType(Me(Me.tableEmployees.FirstNameColumn),String) + End Get + Set + Me(Me.tableEmployees.FirstNameColumn) = value + End Set + End Property + + _ + Public Property Title() As String + Get + Try + Return CType(Me(Me.tableEmployees.TitleColumn),String) + Catch e As System.InvalidCastException + Throw New System.Data.StrongTypingException("The value for column 'Title' in table 'Employees' is DBNull.", e) + End Try + End Get + Set + Me(Me.tableEmployees.TitleColumn) = value + End Set + End Property + + _ + Public Property Photo() As Byte() + Get + Try + Return CType(Me(Me.tableEmployees.PhotoColumn),Byte()) + Catch e As System.InvalidCastException + Throw New System.Data.StrongTypingException("The value for column 'Photo' in table 'Employees' is DBNull.", e) + End Try + End Get + Set + Me(Me.tableEmployees.PhotoColumn) = value + End Set + End Property + + _ + Public Property TagID() As String + Get + Try + Return CType(Me(Me.tableEmployees.TagIDColumn),String) + Catch e As System.InvalidCastException + Throw New System.Data.StrongTypingException("The value for column 'TagID' in table 'Employees' is DBNull.", e) + End Try + End Get + Set + Me(Me.tableEmployees.TagIDColumn) = value + End Set + End Property + + _ + Public Function IsTitleNull() As Boolean + Return Me.IsNull(Me.tableEmployees.TitleColumn) + End Function + + _ + Public Sub SetTitleNull() + Me(Me.tableEmployees.TitleColumn) = System.Convert.DBNull + End Sub + + _ + Public Function IsPhotoNull() As Boolean + Return Me.IsNull(Me.tableEmployees.PhotoColumn) + End Function + + _ + Public Sub SetPhotoNull() + Me(Me.tableEmployees.PhotoColumn) = System.Convert.DBNull + End Sub + + _ + Public Function IsTagIDNull() As Boolean + Return Me.IsNull(Me.tableEmployees.TagIDColumn) + End Function + + _ + Public Sub SetTagIDNull() + Me(Me.tableEmployees.TagIDColumn) = System.Convert.DBNull + End Sub + End Class + + _ + Public Class EmployeesRowChangeEvent + Inherits System.EventArgs + + Private eventRow As EmployeesRow + + Private eventAction As System.Data.DataRowAction + + _ + Public Sub New(ByVal row As EmployeesRow, ByVal action As System.Data.DataRowAction) + MyBase.New + Me.eventRow = row + Me.eventAction = action + End Sub + + _ + Public ReadOnly Property Row() As EmployeesRow + Get + Return Me.eventRow + End Get + End Property + + _ + Public ReadOnly Property Action() As System.Data.DataRowAction + Get + Return Me.eventAction + End Get + End Property + End Class +End Class + +Namespace NorthwindDataSetTableAdapters + + _ + Partial Public Class EmployeesTableAdapter + Inherits System.ComponentModel.Component + + Private WithEvents _adapter As System.Data.SqlClient.SqlDataAdapter + + Private _connection As System.Data.SqlClient.SqlConnection + + Private _commandCollection() As System.Data.SqlClient.SqlCommand + + Private _clearBeforeFill As Boolean + + _ + Public Sub New() + MyBase.New + Me.ClearBeforeFill = true + End Sub + + _ + Private ReadOnly Property Adapter() As System.Data.SqlClient.SqlDataAdapter + Get + If (Me._adapter Is Nothing) Then + Me.InitAdapter + End If + Return Me._adapter + End Get + End Property + + _ + Friend Property Connection() As System.Data.SqlClient.SqlConnection + Get + If (Me._connection Is Nothing) Then + Me.InitConnection + End If + Return Me._connection + End Get + Set + Me._connection = value + If (Not (Me.Adapter.InsertCommand) Is Nothing) Then + Me.Adapter.InsertCommand.Connection = value + End If + If (Not (Me.Adapter.DeleteCommand) Is Nothing) Then + Me.Adapter.DeleteCommand.Connection = value + End If + If (Not (Me.Adapter.UpdateCommand) Is Nothing) Then + Me.Adapter.UpdateCommand.Connection = value + End If + Dim i As Integer = 0 + Do While (i < Me.CommandCollection.Length) + If (Not (Me.CommandCollection(i)) Is Nothing) Then + CType(Me.CommandCollection(i),System.Data.SqlClient.SqlCommand).Connection = value + End If + i = (i + 1) + Loop + End Set + End Property + + _ + Protected ReadOnly Property CommandCollection() As System.Data.SqlClient.SqlCommand() + Get + If (Me._commandCollection Is Nothing) Then + Me.InitCommandCollection + End If + Return Me._commandCollection + End Get + End Property + + _ + Public Property ClearBeforeFill() As Boolean + Get + Return Me._clearBeforeFill + End Get + Set + Me._clearBeforeFill = value + End Set + End Property + + _ + Private Sub InitAdapter() + Me._adapter = New System.Data.SqlClient.SqlDataAdapter + Dim tableMapping As System.Data.Common.DataTableMapping = New System.Data.Common.DataTableMapping + tableMapping.SourceTable = "Table" + tableMapping.DataSetTable = "Employees" + tableMapping.ColumnMappings.Add("EmployeeID", "EmployeeID") + tableMapping.ColumnMappings.Add("LastName", "LastName") + tableMapping.ColumnMappings.Add("FirstName", "FirstName") + tableMapping.ColumnMappings.Add("Title", "Title") + tableMapping.ColumnMappings.Add("Photo", "Photo") + tableMapping.ColumnMappings.Add("TagID", "TagID") + Me._adapter.TableMappings.Add(tableMapping) + Me._adapter.DeleteCommand = New System.Data.SqlClient.SqlCommand + Me._adapter.DeleteCommand.Connection = Me.Connection + Me._adapter.DeleteCommand.CommandText = "DELETE FROM [dbo].[Employees] WHERE (([EmployeeID] = @Original_EmployeeID) AND (["& _ + "LastName] = @Original_LastName) AND ([FirstName] = @Original_FirstName) AND ((@I"& _ + "sNull_Title = 1 AND [Title] IS NULL) OR ([Title] = @Original_Title)) AND ((@IsNu"& _ + "ll_TagID = 1 AND [TagID] IS NULL) OR ([TagID] = @Original_TagID)))" + Me._adapter.DeleteCommand.CommandType = System.Data.CommandType.Text + Me._adapter.DeleteCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Original_EmployeeID", System.Data.SqlDbType.Int, 0, System.Data.ParameterDirection.Input, 0, 0, "EmployeeID", System.Data.DataRowVersion.Original, false, Nothing, "", "", "")) + Me._adapter.DeleteCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Original_LastName", System.Data.SqlDbType.NVarChar, 0, System.Data.ParameterDirection.Input, 0, 0, "LastName", System.Data.DataRowVersion.Original, false, Nothing, "", "", "")) + Me._adapter.DeleteCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Original_FirstName", System.Data.SqlDbType.NVarChar, 0, System.Data.ParameterDirection.Input, 0, 0, "FirstName", System.Data.DataRowVersion.Original, false, Nothing, "", "", "")) + Me._adapter.DeleteCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@IsNull_Title", System.Data.SqlDbType.Int, 0, System.Data.ParameterDirection.Input, 0, 0, "Title", System.Data.DataRowVersion.Original, true, Nothing, "", "", "")) + Me._adapter.DeleteCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Original_Title", System.Data.SqlDbType.NVarChar, 0, System.Data.ParameterDirection.Input, 0, 0, "Title", System.Data.DataRowVersion.Original, false, Nothing, "", "", "")) + Me._adapter.DeleteCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@IsNull_TagID", System.Data.SqlDbType.Int, 0, System.Data.ParameterDirection.Input, 0, 0, "TagID", System.Data.DataRowVersion.Original, true, Nothing, "", "", "")) + Me._adapter.DeleteCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Original_TagID", System.Data.SqlDbType.NChar, 0, System.Data.ParameterDirection.Input, 0, 0, "TagID", System.Data.DataRowVersion.Original, false, Nothing, "", "", "")) + Me._adapter.InsertCommand = New System.Data.SqlClient.SqlCommand + Me._adapter.InsertCommand.Connection = Me.Connection + Me._adapter.InsertCommand.CommandText = "INSERT INTO [dbo].[Employees] ([LastName], [FirstName], [Title], [Photo], [TagID]"& _ + ") VALUES (@LastName, @FirstName, @Title, @Photo, @TagID);"&Global.Microsoft.VisualBasic.ChrW(13)&Global.Microsoft.VisualBasic.ChrW(10)&"SELECT EmployeeID, La"& _ + "stName, FirstName, Title, Photo, TagID FROM Employees WHERE (EmployeeID = SCOPE_"& _ + "IDENTITY())" + Me._adapter.InsertCommand.CommandType = System.Data.CommandType.Text + Me._adapter.InsertCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@LastName", System.Data.SqlDbType.NVarChar, 0, System.Data.ParameterDirection.Input, 0, 0, "LastName", System.Data.DataRowVersion.Current, false, Nothing, "", "", "")) + Me._adapter.InsertCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@FirstName", System.Data.SqlDbType.NVarChar, 0, System.Data.ParameterDirection.Input, 0, 0, "FirstName", System.Data.DataRowVersion.Current, false, Nothing, "", "", "")) + Me._adapter.InsertCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Title", System.Data.SqlDbType.NVarChar, 0, System.Data.ParameterDirection.Input, 0, 0, "Title", System.Data.DataRowVersion.Current, false, Nothing, "", "", "")) + Me._adapter.InsertCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Photo", System.Data.SqlDbType.Image, 0, System.Data.ParameterDirection.Input, 0, 0, "Photo", System.Data.DataRowVersion.Current, false, Nothing, "", "", "")) + Me._adapter.InsertCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@TagID", System.Data.SqlDbType.NChar, 0, System.Data.ParameterDirection.Input, 0, 0, "TagID", System.Data.DataRowVersion.Current, false, Nothing, "", "", "")) + Me._adapter.UpdateCommand = New System.Data.SqlClient.SqlCommand + Me._adapter.UpdateCommand.Connection = Me.Connection + Me._adapter.UpdateCommand.CommandText = "UPDATE [dbo].[Employees] SET [LastName] = @LastName, [FirstName] = @FirstName, [T"& _ + "itle] = @Title, [Photo] = @Photo, [TagID] = @TagID WHERE (([EmployeeID] = @Origi"& _ + "nal_EmployeeID) AND ([LastName] = @Original_LastName) AND ([FirstName] = @Origin"& _ + "al_FirstName) AND ((@IsNull_Title = 1 AND [Title] IS NULL) OR ([Title] = @Origin"& _ + "al_Title)) AND ((@IsNull_TagID = 1 AND [TagID] IS NULL) OR ([TagID] = @Original_"& _ + "TagID)));"&Global.Microsoft.VisualBasic.ChrW(13)&Global.Microsoft.VisualBasic.ChrW(10)&"SELECT EmployeeID, LastName, FirstName, Title, Photo, TagID FROM Empl"& _ + "oyees WHERE (EmployeeID = @EmployeeID)" + Me._adapter.UpdateCommand.CommandType = System.Data.CommandType.Text + Me._adapter.UpdateCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@LastName", System.Data.SqlDbType.NVarChar, 0, System.Data.ParameterDirection.Input, 0, 0, "LastName", System.Data.DataRowVersion.Current, false, Nothing, "", "", "")) + Me._adapter.UpdateCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@FirstName", System.Data.SqlDbType.NVarChar, 0, System.Data.ParameterDirection.Input, 0, 0, "FirstName", System.Data.DataRowVersion.Current, false, Nothing, "", "", "")) + Me._adapter.UpdateCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Title", System.Data.SqlDbType.NVarChar, 0, System.Data.ParameterDirection.Input, 0, 0, "Title", System.Data.DataRowVersion.Current, false, Nothing, "", "", "")) + Me._adapter.UpdateCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Photo", System.Data.SqlDbType.Image, 0, System.Data.ParameterDirection.Input, 0, 0, "Photo", System.Data.DataRowVersion.Current, false, Nothing, "", "", "")) + Me._adapter.UpdateCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@TagID", System.Data.SqlDbType.NChar, 0, System.Data.ParameterDirection.Input, 0, 0, "TagID", System.Data.DataRowVersion.Current, false, Nothing, "", "", "")) + Me._adapter.UpdateCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Original_EmployeeID", System.Data.SqlDbType.Int, 0, System.Data.ParameterDirection.Input, 0, 0, "EmployeeID", System.Data.DataRowVersion.Original, false, Nothing, "", "", "")) + Me._adapter.UpdateCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Original_LastName", System.Data.SqlDbType.NVarChar, 0, System.Data.ParameterDirection.Input, 0, 0, "LastName", System.Data.DataRowVersion.Original, false, Nothing, "", "", "")) + Me._adapter.UpdateCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Original_FirstName", System.Data.SqlDbType.NVarChar, 0, System.Data.ParameterDirection.Input, 0, 0, "FirstName", System.Data.DataRowVersion.Original, false, Nothing, "", "", "")) + Me._adapter.UpdateCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@IsNull_Title", System.Data.SqlDbType.Int, 0, System.Data.ParameterDirection.Input, 0, 0, "Title", System.Data.DataRowVersion.Original, true, Nothing, "", "", "")) + Me._adapter.UpdateCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Original_Title", System.Data.SqlDbType.NVarChar, 0, System.Data.ParameterDirection.Input, 0, 0, "Title", System.Data.DataRowVersion.Original, false, Nothing, "", "", "")) + Me._adapter.UpdateCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@IsNull_TagID", System.Data.SqlDbType.Int, 0, System.Data.ParameterDirection.Input, 0, 0, "TagID", System.Data.DataRowVersion.Original, true, Nothing, "", "", "")) + Me._adapter.UpdateCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Original_TagID", System.Data.SqlDbType.NChar, 0, System.Data.ParameterDirection.Input, 0, 0, "TagID", System.Data.DataRowVersion.Original, false, Nothing, "", "", "")) + Me._adapter.UpdateCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@EmployeeID", System.Data.SqlDbType.Int, 4, System.Data.ParameterDirection.Input, 0, 0, "EmployeeID", System.Data.DataRowVersion.Current, false, Nothing, "", "", "")) + End Sub + + _ + Private Sub InitConnection() + Me._connection = New System.Data.SqlClient.SqlConnection + Me._connection.ConnectionString = Global.Attendance.My.MySettings.Default.NorthwindConnectionString + End Sub + + _ + Private Sub InitCommandCollection() + Me._commandCollection = New System.Data.SqlClient.SqlCommand(0) {} + Me._commandCollection(0) = New System.Data.SqlClient.SqlCommand + Me._commandCollection(0).Connection = Me.Connection + Me._commandCollection(0).CommandText = "SELECT EmployeeID, LastName, FirstName, Title, Photo, TagID FROM dbo.Employees" + Me._commandCollection(0).CommandType = System.Data.CommandType.Text + End Sub + + _ + Public Overloads Overridable Function Fill(ByVal dataTable As NorthwindDataSet.EmployeesDataTable) As Integer + Me.Adapter.SelectCommand = Me.CommandCollection(0) + If (Me.ClearBeforeFill = true) Then + dataTable.Clear + End If + Dim returnValue As Integer = Me.Adapter.Fill(dataTable) + Return returnValue + End Function + + _ + Public Overloads Overridable Function GetData() As NorthwindDataSet.EmployeesDataTable + Me.Adapter.SelectCommand = Me.CommandCollection(0) + Dim dataTable As NorthwindDataSet.EmployeesDataTable = New NorthwindDataSet.EmployeesDataTable + Me.Adapter.Fill(dataTable) + Return dataTable + End Function + + _ + Public Overloads Overridable Function Update(ByVal dataTable As NorthwindDataSet.EmployeesDataTable) As Integer + Return Me.Adapter.Update(dataTable) + End Function + + _ + Public Overloads Overridable Function Update(ByVal dataSet As NorthwindDataSet) As Integer + Return Me.Adapter.Update(dataSet, "Employees") + End Function + + _ + Public Overloads Overridable Function Update(ByVal dataRow As System.Data.DataRow) As Integer + Return Me.Adapter.Update(New System.Data.DataRow() {dataRow}) + End Function + + _ + Public Overloads Overridable Function Update(ByVal dataRows() As System.Data.DataRow) As Integer + Return Me.Adapter.Update(dataRows) + End Function + + _ + Public Overloads Overridable Function Delete(ByVal Original_EmployeeID As Integer, ByVal Original_LastName As String, ByVal Original_FirstName As String, ByVal Original_Title As String, ByVal Original_TagID As String) As Integer + Me.Adapter.DeleteCommand.Parameters(0).Value = CType(Original_EmployeeID,Integer) + If (Original_LastName Is Nothing) Then + Throw New System.ArgumentNullException("Original_LastName") + Else + Me.Adapter.DeleteCommand.Parameters(1).Value = CType(Original_LastName,String) + End If + If (Original_FirstName Is Nothing) Then + Throw New System.ArgumentNullException("Original_FirstName") + Else + Me.Adapter.DeleteCommand.Parameters(2).Value = CType(Original_FirstName,String) + End If + If (Original_Title Is Nothing) Then + Me.Adapter.DeleteCommand.Parameters(3).Value = CType(1,Object) + Me.Adapter.DeleteCommand.Parameters(4).Value = System.DBNull.Value + Else + Me.Adapter.DeleteCommand.Parameters(3).Value = CType(0,Object) + Me.Adapter.DeleteCommand.Parameters(4).Value = CType(Original_Title,String) + End If + If (Original_TagID Is Nothing) Then + Me.Adapter.DeleteCommand.Parameters(5).Value = CType(1,Object) + Me.Adapter.DeleteCommand.Parameters(6).Value = System.DBNull.Value + Else + Me.Adapter.DeleteCommand.Parameters(5).Value = CType(0,Object) + Me.Adapter.DeleteCommand.Parameters(6).Value = CType(Original_TagID,String) + End If + Dim previousConnectionState As System.Data.ConnectionState = Me.Adapter.DeleteCommand.Connection.State + If ((Me.Adapter.DeleteCommand.Connection.State And System.Data.ConnectionState.Open) _ + <> System.Data.ConnectionState.Open) Then + Me.Adapter.DeleteCommand.Connection.Open + End If + Try + Dim returnValue As Integer = Me.Adapter.DeleteCommand.ExecuteNonQuery + Return returnValue + Finally + If (previousConnectionState = System.Data.ConnectionState.Closed) Then + Me.Adapter.DeleteCommand.Connection.Close + End If + End Try + End Function + + _ + Public Overloads Overridable Function Insert(ByVal LastName As String, ByVal FirstName As String, ByVal Title As String, ByVal Photo() As Byte, ByVal TagID As String) As Integer + If (LastName Is Nothing) Then + Throw New System.ArgumentNullException("LastName") + Else + Me.Adapter.InsertCommand.Parameters(0).Value = CType(LastName,String) + End If + If (FirstName Is Nothing) Then + Throw New System.ArgumentNullException("FirstName") + Else + Me.Adapter.InsertCommand.Parameters(1).Value = CType(FirstName,String) + End If + If (Title Is Nothing) Then + Me.Adapter.InsertCommand.Parameters(2).Value = System.DBNull.Value + Else + Me.Adapter.InsertCommand.Parameters(2).Value = CType(Title,String) + End If + If (Photo Is Nothing) Then + Me.Adapter.InsertCommand.Parameters(3).Value = System.DBNull.Value + Else + Me.Adapter.InsertCommand.Parameters(3).Value = CType(Photo,Byte()) + End If + If (TagID Is Nothing) Then + Me.Adapter.InsertCommand.Parameters(4).Value = System.DBNull.Value + Else + Me.Adapter.InsertCommand.Parameters(4).Value = CType(TagID,String) + End If + Dim previousConnectionState As System.Data.ConnectionState = Me.Adapter.InsertCommand.Connection.State + If ((Me.Adapter.InsertCommand.Connection.State And System.Data.ConnectionState.Open) _ + <> System.Data.ConnectionState.Open) Then + Me.Adapter.InsertCommand.Connection.Open + End If + Try + Dim returnValue As Integer = Me.Adapter.InsertCommand.ExecuteNonQuery + Return returnValue + Finally + If (previousConnectionState = System.Data.ConnectionState.Closed) Then + Me.Adapter.InsertCommand.Connection.Close + End If + End Try + End Function + + _ + Public Overloads Overridable Function Update(ByVal LastName As String, ByVal FirstName As String, ByVal Title As String, ByVal Photo() As Byte, ByVal TagID As String, ByVal Original_EmployeeID As Integer, ByVal Original_LastName As String, ByVal Original_FirstName As String, ByVal Original_Title As String, ByVal Original_TagID As String, ByVal EmployeeID As Integer) As Integer + If (LastName Is Nothing) Then + Throw New System.ArgumentNullException("LastName") + Else + Me.Adapter.UpdateCommand.Parameters(0).Value = CType(LastName,String) + End If + If (FirstName Is Nothing) Then + Throw New System.ArgumentNullException("FirstName") + Else + Me.Adapter.UpdateCommand.Parameters(1).Value = CType(FirstName,String) + End If + If (Title Is Nothing) Then + Me.Adapter.UpdateCommand.Parameters(2).Value = System.DBNull.Value + Else + Me.Adapter.UpdateCommand.Parameters(2).Value = CType(Title,String) + End If + If (Photo Is Nothing) Then + Me.Adapter.UpdateCommand.Parameters(3).Value = System.DBNull.Value + Else + Me.Adapter.UpdateCommand.Parameters(3).Value = CType(Photo,Byte()) + End If + If (TagID Is Nothing) Then + Me.Adapter.UpdateCommand.Parameters(4).Value = System.DBNull.Value + Else + Me.Adapter.UpdateCommand.Parameters(4).Value = CType(TagID,String) + End If + Me.Adapter.UpdateCommand.Parameters(5).Value = CType(Original_EmployeeID,Integer) + If (Original_LastName Is Nothing) Then + Throw New System.ArgumentNullException("Original_LastName") + Else + Me.Adapter.UpdateCommand.Parameters(6).Value = CType(Original_LastName,String) + End If + If (Original_FirstName Is Nothing) Then + Throw New System.ArgumentNullException("Original_FirstName") + Else + Me.Adapter.UpdateCommand.Parameters(7).Value = CType(Original_FirstName,String) + End If + If (Original_Title Is Nothing) Then + Me.Adapter.UpdateCommand.Parameters(8).Value = CType(1,Object) + Me.Adapter.UpdateCommand.Parameters(9).Value = System.DBNull.Value + Else + Me.Adapter.UpdateCommand.Parameters(8).Value = CType(0,Object) + Me.Adapter.UpdateCommand.Parameters(9).Value = CType(Original_Title,String) + End If + If (Original_TagID Is Nothing) Then + Me.Adapter.UpdateCommand.Parameters(10).Value = CType(1,Object) + Me.Adapter.UpdateCommand.Parameters(11).Value = System.DBNull.Value + Else + Me.Adapter.UpdateCommand.Parameters(10).Value = CType(0,Object) + Me.Adapter.UpdateCommand.Parameters(11).Value = CType(Original_TagID,String) + End If + Me.Adapter.UpdateCommand.Parameters(12).Value = CType(EmployeeID,Integer) + Dim previousConnectionState As System.Data.ConnectionState = Me.Adapter.UpdateCommand.Connection.State + If ((Me.Adapter.UpdateCommand.Connection.State And System.Data.ConnectionState.Open) _ + <> System.Data.ConnectionState.Open) Then + Me.Adapter.UpdateCommand.Connection.Open + End If + Try + Dim returnValue As Integer = Me.Adapter.UpdateCommand.ExecuteNonQuery + Return returnValue + Finally + If (previousConnectionState = System.Data.ConnectionState.Closed) Then + Me.Adapter.UpdateCommand.Connection.Close + End If + End Try + End Function + End Class +End Namespace diff --git a/Chapter05(RFID)/Attendance_Parallax/NorthwindDataSet.xsc b/Chapter05(RFID)/Attendance_Parallax/NorthwindDataSet.xsc new file mode 100644 index 0000000..2dbd3f0 --- /dev/null +++ b/Chapter05(RFID)/Attendance_Parallax/NorthwindDataSet.xsc @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Chapter05(RFID)/Attendance_Parallax/NorthwindDataSet.xsd b/Chapter05(RFID)/Attendance_Parallax/NorthwindDataSet.xsd new file mode 100644 index 0000000..2ad06dc --- /dev/null +++ b/Chapter05(RFID)/Attendance_Parallax/NorthwindDataSet.xsd @@ -0,0 +1,159 @@ + + + + + + + + + + + + + + + + DELETE FROM [dbo].[Employees] WHERE (([EmployeeID] = @Original_EmployeeID) AND ([LastName] = @Original_LastName) AND ([FirstName] = @Original_FirstName) AND ((@IsNull_Title = 1 AND [Title] IS NULL) OR ([Title] = @Original_Title)) AND ((@IsNull_TagID = 1 AND [TagID] IS NULL) OR ([TagID] = @Original_TagID))) + + + + + + + + + + + + + + + + + + + + + INSERT INTO [dbo].[Employees] ([LastName], [FirstName], [Title], [Photo], [TagID]) VALUES (@LastName, @FirstName, @Title, @Photo, @TagID); +SELECT EmployeeID, LastName, FirstName, Title, Photo, TagID FROM Employees WHERE (EmployeeID = SCOPE_IDENTITY()) + + + + + + + + + + + + + + + + + SELECT EmployeeID, LastName, FirstName, Title, Photo, TagID FROM dbo.Employees + + + + + + + UPDATE [dbo].[Employees] SET [LastName] = @LastName, [FirstName] = @FirstName, [Title] = @Title, [Photo] = @Photo, [TagID] = @TagID WHERE (([EmployeeID] = @Original_EmployeeID) AND ([LastName] = @Original_LastName) AND ([FirstName] = @Original_FirstName) AND ((@IsNull_Title = 1 AND [Title] IS NULL) OR ([Title] = @Original_Title)) AND ((@IsNull_TagID = 1 AND [TagID] IS NULL) OR ([TagID] = @Original_TagID))); +SELECT EmployeeID, LastName, FirstName, Title, Photo, TagID FROM Employees WHERE (EmployeeID = @EmployeeID) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Chapter05(RFID)/Attendance_Parallax/NorthwindDataSet.xss b/Chapter05(RFID)/Attendance_Parallax/NorthwindDataSet.xss new file mode 100644 index 0000000..5f28270 --- /dev/null +++ b/Chapter05(RFID)/Attendance_Parallax/NorthwindDataSet.xss @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Chapter05(RFID)/Attendance_Parallax/app.config b/Chapter05(RFID)/Attendance_Parallax/app.config new file mode 100644 index 0000000..f541ced --- /dev/null +++ b/Chapter05(RFID)/Attendance_Parallax/app.config @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter05(RFID)/Attendance_Parallax/bin/Debug/Attendance.exe b/Chapter05(RFID)/Attendance_Parallax/bin/Debug/Attendance.exe new file mode 100644 index 0000000000000000000000000000000000000000..9b68e90fbe7a758d3e8969ea247ea7dbee5212eb GIT binary patch literal 81920 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 literal 0 HcmV?d00001 diff --git a/Chapter05(RFID)/Attendance_Parallax/bin/Debug/Attendance.exe.config b/Chapter05(RFID)/Attendance_Parallax/bin/Debug/Attendance.exe.config new file mode 100644 index 0000000..f541ced --- /dev/null +++ b/Chapter05(RFID)/Attendance_Parallax/bin/Debug/Attendance.exe.config @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter05(RFID)/Attendance_Parallax/bin/Debug/Attendance.pdb b/Chapter05(RFID)/Attendance_Parallax/bin/Debug/Attendance.pdb new file mode 100644 index 0000000000000000000000000000000000000000..078412f288fdc7c734104c882b23ceb1ce35f18f GIT binary patch literal 173568 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 literal 0 HcmV?d00001 diff --git a/Chapter05(RFID)/Attendance_Parallax/bin/Debug/Attendance.vshost.exe b/Chapter05(RFID)/Attendance_Parallax/bin/Debug/Attendance.vshost.exe new file mode 100644 index 0000000000000000000000000000000000000000..ce3f102c36be07551ba7c7fad64c8b24709bdb91 GIT binary patch literal 5632 zcmeHLX>3&26+Umg;MiccvX$*QEU{T$9osBr9ou8T!CO4GX{f1rGjlzDVoO|!Prgq~qltDz9r~?B;$Ix=|OT07mVmN>1Z}RE2drlP`Q)*5X zG<6uR8guNZqj#!d-Lh;?4GGnWTdHBHf%>4@X-9-MYENnj=gbf*dm1jLN#cftptQL=|aWNfvWlQP?*hWf2t+?Lo}%k$q{6hp9nL zgjRO$01v%$;r&I$YdXI8&)FG$2N&cn{PM~EIUlboSblZ6|HQ<{cD(w-H$Pi{GB!Q7 z|H6B@KUnhF)GHNJoBn(6mQTf)Ia@0-J4*9+&;GPbIdCa>RcoH#{Qln`m|0=hKQWNC z!#y@@!#j(1Un%|Q)aTD`kDfW+w4v>(rqa#M$bmyo{cgLmeRW{M$FpYm3da-W&f8x& z0nLKxvau(Eo?AGHIeD_NCo>0YuLwR+p^ze1#Ifrt(TcT2#Y;+-Fe_7rvIeo7wS(yA zX#bP}I_Nou6?Iv{Lq2$0&05=B9YEWMekRLTn0AN-P|#J@A{QJ}x~7y8++mAT5@Rw| z@Q22sG9U6Nxk<0GsfFs1h&|K+JVrkSo|br>`a#cB7|RvrMHFKBr(Uw zl5-@k@UiBtzD8d*9q>KoTQAp`O~3WAt@psmrLqha^n)4xjBMH^@f9F@n1~ujPf^Cu z1X8hoxc8RIqmNGBB-e08_V!a4+g72m#M~*saoB2`Xc84k`hJPumRK&aTH=EeACjm` zG$d}7*dy^#;3Rrn;NPL;}jK9&ZX=lbcdYSfRoToq2>!3ASPn#8u z^5_H5<0%vLR4N9}qQ$`Zh^$7XR0mux@nJd(I!OC~-=*IJ!;-UI&T=Kai#`PZNxBT& zOIH;?y#RZey+d~b$L>D*2U4BLHo7PZt&wf=(v$RGXdorBqSlVYO|go)+z#9IG|?@n z%JQ6^2HUVasx`un?b_|0)?&DE-3)s1h+%8%Ad2nU;Mif|y42~0ZO1f16zp+5(Mk28 zEh6lZ7WQn1YIVa(4rq;W%QHHKR%v&}3{yBk;dB{LLCFE;>z)xZOvCFb_i!dcaZe1+ z7VReV8n#8{t}8l2X3u)jvj&QWL{kF+Vd_0WBWeu|C7jb5g=@zhHd-g*o}-(Cj2hjF z#`S2LwxI3_6TXN_8!^$tUW;&C*dJ1wvR7@j+fFBZw=LZqR*HQcc5v8%N;}r$7|{;z zRXI0nx6BteC@kn? zx7}3wC`~t$^_JixeXZ}r;oYm_b%)++Tlw0>+HX%C`+@-Ake_bp%{*%iWKZ&%~jNE(TX9o*6g%-Rh7EHhP*OlHTd*KJ4?D*a4-;jvD#}$T zOIQn=@p>DHr7y*I8$Y743XSBB{D^C1B}AnPX@5AP4(=bd(sp9DBln=DmYb$353H*? z$g9&OB6vF%DKvX%LSbW(nz&Qd#HFe-r=+-e5z#jlnlL1prkZH9Lb+*IH9O7$Qj&K* zi1dqo@D0qF`iTGURq zl$y==AvIxC2iL{8P9EfJ^b+N0<`}+a;gbg`1N`W1H1*>kDp+;uS4JU@0csxjmC)CT zpTKMnR`9n2umfBdeGU9>R4z4m@TcTs(x)CoK$mlQycQmW;RnyOu?i1|k+nM%lbG(k zU)oNsIsglXDI;B4QqNAHkZxdK@%Jm&3M+mh+d;;>sRJgjdxC zjKDHcB4+hTNzOL=or(eXIE%yQ&!joDM74@5pgblnV%bN-JGR6=O_ohmcu4Tp%XjSM5Nh|8#A5K!MWx={dKuZ TBcLY!&!}P9UAq3eeA)j4ZC9R* literal 0 HcmV?d00001 diff --git a/Chapter05(RFID)/Attendance_Parallax/bin/Debug/Attendance.vshost.exe.config b/Chapter05(RFID)/Attendance_Parallax/bin/Debug/Attendance.vshost.exe.config new file mode 100644 index 0000000..f541ced --- /dev/null +++ b/Chapter05(RFID)/Attendance_Parallax/bin/Debug/Attendance.vshost.exe.config @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter05(RFID)/Attendance_Parallax/bin/Debug/Attendance.xml b/Chapter05(RFID)/Attendance_Parallax/bin/Debug/Attendance.xml new file mode 100644 index 0000000..afe0f32 --- /dev/null +++ b/Chapter05(RFID)/Attendance_Parallax/bin/Debug/Attendance.xml @@ -0,0 +1,11 @@ + + + + +Attendance + + + + + + \ No newline at end of file diff --git a/Chapter05(RFID)/Attendance_Parallax/obj/Attendance.vbproj.FileList.txt b/Chapter05(RFID)/Attendance_Parallax/obj/Attendance.vbproj.FileList.txt new file mode 100644 index 0000000..a02c32c --- /dev/null +++ b/Chapter05(RFID)/Attendance_Parallax/obj/Attendance.vbproj.FileList.txt @@ -0,0 +1,11 @@ +bin\Debug\Attendance.exe.config +bin\Debug\Attendance.exe +bin\Debug\Attendance.pdb +bin\Debug\Attendance.xml +obj\Debug\ResolveAssemblyReference.cache +obj\Debug\Attendance.Form1.resources +obj\Debug\Attendance.Resources.resources +obj\Debug\Attendance.vbproj.GenerateResource.Cache +obj\Debug\Attendance.exe +obj\Debug\Attendance.xml +obj\Debug\Attendance.pdb diff --git a/Chapter05(RFID)/Attendance_Parallax/obj/Debug/Attendance.Form1.resources b/Chapter05(RFID)/Attendance_Parallax/obj/Debug/Attendance.Form1.resources new file mode 100644 index 0000000000000000000000000000000000000000..1aa111d8436b95c0c47bcb2e9d468b8856dc706c GIT binary patch literal 5130 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 literal 0 HcmV?d00001 diff --git a/Chapter05(RFID)/Attendance_Parallax/obj/Debug/Attendance.pdb b/Chapter05(RFID)/Attendance_Parallax/obj/Debug/Attendance.pdb new file mode 100644 index 0000000000000000000000000000000000000000..078412f288fdc7c734104c882b23ceb1ce35f18f GIT binary patch literal 173568 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 literal 0 HcmV?d00001 diff --git a/Chapter05(RFID)/Attendance_Parallax/obj/Debug/Attendance.vbproj.GenerateResource.Cache b/Chapter05(RFID)/Attendance_Parallax/obj/Debug/Attendance.vbproj.GenerateResource.Cache new file mode 100644 index 0000000000000000000000000000000000000000..829cb65352cb42a36a04299ab7a933a5cc002647 GIT binary patch literal 900 zcma)4&2G~`5Vo7xNt{$9hpIyK5FrjojjW_qRW1=yQ>9ciqO?&}BrY58SY5L5mL0pQ zc>+#63vWTs@C@8|1q3q&DwJA?u{7S@nfd0MAIEhZ=LZS@Sz0Tk&L=9e22GrXdzsQQ zoC=&{uX_d-l}UzMVV}QVca-TgvoK5`ORdno?r}ELDtZq2)XX6n&idQ&PP`ir26Cq_ zwuQ%O9+#qrCx8c#?87A_5|T&(GL?n}JRd6!xIPmIM=F_v5iPR4R_=HS1-$4*y_1D&c&1 z2mjm4Cr@{oRnR2e@L2hz+I-@E`32{(v5P@SL%H_r^mu=gcZuQ~>cwjspvi0m_{-cN zbHMIf#l6j7jME5M6-ioj^7uL^pWxk<*rcao9k|0yeY*{~emm`)w_`IVm52pASbEn2 z(}|HPRv_1wY;dhGMW3d=>K3zHWu{#AM(xD^`uXO)>oV`6fO~A?7C37!zIY!#k&VkK cY#p|7{nL-%->$r(xDG?HbU2Qs!%i&CpQbnX3jhEB literal 0 HcmV?d00001 diff --git a/Chapter05(RFID)/Attendance_Parallax/obj/Debug/Attendance.xml b/Chapter05(RFID)/Attendance_Parallax/obj/Debug/Attendance.xml new file mode 100644 index 0000000..afe0f32 --- /dev/null +++ b/Chapter05(RFID)/Attendance_Parallax/obj/Debug/Attendance.xml @@ -0,0 +1,11 @@ + + + + +Attendance + + + + + + \ No newline at end of file diff --git a/Chapter05(RFID)/Attendance_Parallax/obj/Debug/TempPE/My Project.Resources.Designer.vb.dll b/Chapter05(RFID)/Attendance_Parallax/obj/Debug/TempPE/My Project.Resources.Designer.vb.dll new file mode 100644 index 0000000000000000000000000000000000000000..2840e96833cef9fa6f12dd8a9bff374e232eb8ef GIT binary patch literal 8192 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 literal 0 HcmV?d00001 diff --git a/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS.sln b/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS.sln new file mode 100644 index 0000000..d6407ad --- /dev/null +++ b/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Attendance_CS", "Attendance_CS\Attendance_CS.csproj", "{821C624A-FAFE-4B97-9BDA-1C12E5A70669}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {821C624A-FAFE-4B97-9BDA-1C12E5A70669}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {821C624A-FAFE-4B97-9BDA-1C12E5A70669}.Debug|Any CPU.Build.0 = Debug|Any CPU + {821C624A-FAFE-4B97-9BDA-1C12E5A70669}.Release|Any CPU.ActiveCfg = Release|Any CPU + {821C624A-FAFE-4B97-9BDA-1C12E5A70669}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS.suo b/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS.suo new file mode 100644 index 0000000000000000000000000000000000000000..fd978024f3a764f34c78980fa0cf087ed34a13f0 GIT binary patch literal 17408 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 + + Debug + AnyCPU + 8.0.50727 + 2.0 + {821C624A-FAFE-4B97-9BDA-1C12E5A70669} + WinExe + Properties + Attendance_CS + Attendance_CS + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + Form + + + Form1.cs + + + True + True + NorthwindDataSet.xsd + + + + + Designer + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + + NorthwindDataSet.xsd + + + MSDataSetGenerator + NorthwindDataSet.Designer.cs + Designer + + + NorthwindDataSet.xsd + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + \ No newline at end of file diff --git a/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/Form1.Designer.cs b/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/Form1.Designer.cs new file mode 100644 index 0000000..32fc624 --- /dev/null +++ b/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/Form1.Designer.cs @@ -0,0 +1,505 @@ +namespace Attendance_CS +{ + partial class Form1 + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1)); + System.Windows.Forms.Label employeeIDLabel; + System.Windows.Forms.Label lastNameLabel; + System.Windows.Forms.Label firstNameLabel; + System.Windows.Forms.Label titleLabel; + System.Windows.Forms.Label photoLabel; + System.Windows.Forms.Label tagIDLabel; + System.Windows.Forms.Label Label2; + this.northwindDataSet = new Attendance_CS.NorthwindDataSet(); + this.employeesBindingSource = new System.Windows.Forms.BindingSource(this.components); + this.employeesTableAdapter = new Attendance_CS.NorthwindDataSetTableAdapters.EmployeesTableAdapter(); + this.employeesBindingNavigator = new System.Windows.Forms.BindingNavigator(this.components); + this.bindingNavigatorMoveFirstItem = new System.Windows.Forms.ToolStripButton(); + this.bindingNavigatorMovePreviousItem = new System.Windows.Forms.ToolStripButton(); + this.bindingNavigatorSeparator = new System.Windows.Forms.ToolStripSeparator(); + this.bindingNavigatorPositionItem = new System.Windows.Forms.ToolStripTextBox(); + this.bindingNavigatorCountItem = new System.Windows.Forms.ToolStripLabel(); + this.bindingNavigatorSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.bindingNavigatorMoveNextItem = new System.Windows.Forms.ToolStripButton(); + this.bindingNavigatorMoveLastItem = new System.Windows.Forms.ToolStripButton(); + this.bindingNavigatorSeparator2 = new System.Windows.Forms.ToolStripSeparator(); + this.bindingNavigatorAddNewItem = new System.Windows.Forms.ToolStripButton(); + this.bindingNavigatorDeleteItem = new System.Windows.Forms.ToolStripButton(); + this.employeesBindingNavigatorSaveItem = new System.Windows.Forms.ToolStripButton(); + this.employeeIDLabel1 = new System.Windows.Forms.Label(); + this.lastNameTextBox = new System.Windows.Forms.TextBox(); + this.firstNameTextBox = new System.Windows.Forms.TextBox(); + this.titleTextBox = new System.Windows.Forms.TextBox(); + this.photoPictureBox = new System.Windows.Forms.PictureBox(); + this.tagIDLabel1 = new System.Windows.Forms.Label(); + this.StatusStrip1 = new System.Windows.Forms.StatusStrip(); + this.ToolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel(); + this.GroupBox1 = new System.Windows.Forms.GroupBox(); + this.btnDeassign = new System.Windows.Forms.Button(); + this.txtEmployeeID = new System.Windows.Forms.TextBox(); + this.btnFind = new System.Windows.Forms.Button(); + this.btnAssign = new System.Windows.Forms.Button(); + this.txtTagID = new System.Windows.Forms.TextBox(); + this.Label1 = new System.Windows.Forms.Label(); + this.timer1 = new System.Windows.Forms.Timer(this.components); + employeeIDLabel = new System.Windows.Forms.Label(); + lastNameLabel = new System.Windows.Forms.Label(); + firstNameLabel = new System.Windows.Forms.Label(); + titleLabel = new System.Windows.Forms.Label(); + photoLabel = new System.Windows.Forms.Label(); + tagIDLabel = new System.Windows.Forms.Label(); + Label2 = new System.Windows.Forms.Label(); + ((System.ComponentModel.ISupportInitialize)(this.northwindDataSet)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.employeesBindingSource)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.employeesBindingNavigator)).BeginInit(); + this.employeesBindingNavigator.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.photoPictureBox)).BeginInit(); + this.StatusStrip1.SuspendLayout(); + this.GroupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // northwindDataSet + // + this.northwindDataSet.DataSetName = "NorthwindDataSet"; + this.northwindDataSet.SchemaSerializationMode = System.Data.SchemaSerializationMode.IncludeSchema; + // + // employeesBindingSource + // + this.employeesBindingSource.DataMember = "Employees"; + this.employeesBindingSource.DataSource = this.northwindDataSet; + // + // employeesTableAdapter + // + this.employeesTableAdapter.ClearBeforeFill = true; + // + // employeesBindingNavigator + // + this.employeesBindingNavigator.AddNewItem = this.bindingNavigatorAddNewItem; + this.employeesBindingNavigator.BindingSource = this.employeesBindingSource; + this.employeesBindingNavigator.CountItem = this.bindingNavigatorCountItem; + this.employeesBindingNavigator.DeleteItem = this.bindingNavigatorDeleteItem; + this.employeesBindingNavigator.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.bindingNavigatorMoveFirstItem, + this.bindingNavigatorMovePreviousItem, + this.bindingNavigatorSeparator, + this.bindingNavigatorPositionItem, + this.bindingNavigatorCountItem, + this.bindingNavigatorSeparator1, + this.bindingNavigatorMoveNextItem, + this.bindingNavigatorMoveLastItem, + this.bindingNavigatorSeparator2, + this.bindingNavigatorAddNewItem, + this.bindingNavigatorDeleteItem, + this.employeesBindingNavigatorSaveItem}); + this.employeesBindingNavigator.Location = new System.Drawing.Point(0, 0); + this.employeesBindingNavigator.MoveFirstItem = this.bindingNavigatorMoveFirstItem; + this.employeesBindingNavigator.MoveLastItem = this.bindingNavigatorMoveLastItem; + this.employeesBindingNavigator.MoveNextItem = this.bindingNavigatorMoveNextItem; + this.employeesBindingNavigator.MovePreviousItem = this.bindingNavigatorMovePreviousItem; + this.employeesBindingNavigator.Name = "employeesBindingNavigator"; + this.employeesBindingNavigator.PositionItem = this.bindingNavigatorPositionItem; + this.employeesBindingNavigator.Size = new System.Drawing.Size(412, 25); + this.employeesBindingNavigator.TabIndex = 0; + this.employeesBindingNavigator.Text = "bindingNavigator1"; + // + // bindingNavigatorMoveFirstItem + // + this.bindingNavigatorMoveFirstItem.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.bindingNavigatorMoveFirstItem.Image = ((System.Drawing.Image)(resources.GetObject("bindingNavigatorMoveFirstItem.Image"))); + this.bindingNavigatorMoveFirstItem.Name = "bindingNavigatorMoveFirstItem"; + this.bindingNavigatorMoveFirstItem.RightToLeftAutoMirrorImage = true; + this.bindingNavigatorMoveFirstItem.Size = new System.Drawing.Size(23, 22); + this.bindingNavigatorMoveFirstItem.Text = "Move first"; + // + // bindingNavigatorMovePreviousItem + // + this.bindingNavigatorMovePreviousItem.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.bindingNavigatorMovePreviousItem.Image = ((System.Drawing.Image)(resources.GetObject("bindingNavigatorMovePreviousItem.Image"))); + this.bindingNavigatorMovePreviousItem.Name = "bindingNavigatorMovePreviousItem"; + this.bindingNavigatorMovePreviousItem.RightToLeftAutoMirrorImage = true; + this.bindingNavigatorMovePreviousItem.Size = new System.Drawing.Size(23, 22); + this.bindingNavigatorMovePreviousItem.Text = "Move previous"; + // + // bindingNavigatorSeparator + // + this.bindingNavigatorSeparator.Name = "bindingNavigatorSeparator"; + this.bindingNavigatorSeparator.Size = new System.Drawing.Size(6, 25); + // + // bindingNavigatorPositionItem + // + this.bindingNavigatorPositionItem.AccessibleName = "Position"; + this.bindingNavigatorPositionItem.AutoSize = false; + this.bindingNavigatorPositionItem.Name = "bindingNavigatorPositionItem"; + this.bindingNavigatorPositionItem.Size = new System.Drawing.Size(50, 21); + this.bindingNavigatorPositionItem.Text = "0"; + this.bindingNavigatorPositionItem.ToolTipText = "Current position"; + // + // bindingNavigatorCountItem + // + this.bindingNavigatorCountItem.Name = "bindingNavigatorCountItem"; + this.bindingNavigatorCountItem.Size = new System.Drawing.Size(36, 13); + this.bindingNavigatorCountItem.Text = "of {0}"; + this.bindingNavigatorCountItem.ToolTipText = "Total number of items"; + // + // bindingNavigatorSeparator1 + // + this.bindingNavigatorSeparator1.Name = "bindingNavigatorSeparator"; + this.bindingNavigatorSeparator1.Size = new System.Drawing.Size(6, 6); + // + // bindingNavigatorMoveNextItem + // + this.bindingNavigatorMoveNextItem.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.bindingNavigatorMoveNextItem.Image = ((System.Drawing.Image)(resources.GetObject("bindingNavigatorMoveNextItem.Image"))); + this.bindingNavigatorMoveNextItem.Name = "bindingNavigatorMoveNextItem"; + this.bindingNavigatorMoveNextItem.RightToLeftAutoMirrorImage = true; + this.bindingNavigatorMoveNextItem.Size = new System.Drawing.Size(23, 20); + this.bindingNavigatorMoveNextItem.Text = "Move next"; + // + // bindingNavigatorMoveLastItem + // + this.bindingNavigatorMoveLastItem.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.bindingNavigatorMoveLastItem.Image = ((System.Drawing.Image)(resources.GetObject("bindingNavigatorMoveLastItem.Image"))); + this.bindingNavigatorMoveLastItem.Name = "bindingNavigatorMoveLastItem"; + this.bindingNavigatorMoveLastItem.RightToLeftAutoMirrorImage = true; + this.bindingNavigatorMoveLastItem.Size = new System.Drawing.Size(23, 20); + this.bindingNavigatorMoveLastItem.Text = "Move last"; + // + // bindingNavigatorSeparator2 + // + this.bindingNavigatorSeparator2.Name = "bindingNavigatorSeparator"; + this.bindingNavigatorSeparator2.Size = new System.Drawing.Size(6, 6); + // + // bindingNavigatorAddNewItem + // + this.bindingNavigatorAddNewItem.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.bindingNavigatorAddNewItem.Image = ((System.Drawing.Image)(resources.GetObject("bindingNavigatorAddNewItem.Image"))); + this.bindingNavigatorAddNewItem.Name = "bindingNavigatorAddNewItem"; + this.bindingNavigatorAddNewItem.RightToLeftAutoMirrorImage = true; + this.bindingNavigatorAddNewItem.Size = new System.Drawing.Size(23, 22); + this.bindingNavigatorAddNewItem.Text = "Add new"; + // + // bindingNavigatorDeleteItem + // + this.bindingNavigatorDeleteItem.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.bindingNavigatorDeleteItem.Image = ((System.Drawing.Image)(resources.GetObject("bindingNavigatorDeleteItem.Image"))); + this.bindingNavigatorDeleteItem.Name = "bindingNavigatorDeleteItem"; + this.bindingNavigatorDeleteItem.RightToLeftAutoMirrorImage = true; + this.bindingNavigatorDeleteItem.Size = new System.Drawing.Size(23, 20); + this.bindingNavigatorDeleteItem.Text = "Delete"; + // + // employeesBindingNavigatorSaveItem + // + this.employeesBindingNavigatorSaveItem.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.employeesBindingNavigatorSaveItem.Image = ((System.Drawing.Image)(resources.GetObject("employeesBindingNavigatorSaveItem.Image"))); + this.employeesBindingNavigatorSaveItem.Name = "employeesBindingNavigatorSaveItem"; + this.employeesBindingNavigatorSaveItem.Size = new System.Drawing.Size(23, 23); + this.employeesBindingNavigatorSaveItem.Text = "Save Data"; + this.employeesBindingNavigatorSaveItem.Click += new System.EventHandler(this.employeesBindingNavigatorSaveItem_Click); + // + // employeeIDLabel + // + employeeIDLabel.AutoSize = true; + employeeIDLabel.Location = new System.Drawing.Point(13, 59); + employeeIDLabel.Name = "employeeIDLabel"; + employeeIDLabel.Size = new System.Drawing.Size(70, 13); + employeeIDLabel.TabIndex = 1; + employeeIDLabel.Text = "Employee ID:"; + // + // employeeIDLabel1 + // + this.employeeIDLabel1.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.employeesBindingSource, "EmployeeID", true)); + this.employeeIDLabel1.Location = new System.Drawing.Point(89, 59); + this.employeeIDLabel1.Name = "employeeIDLabel1"; + this.employeeIDLabel1.Size = new System.Drawing.Size(100, 23); + this.employeeIDLabel1.TabIndex = 2; + // + // lastNameLabel + // + lastNameLabel.AutoSize = true; + lastNameLabel.Location = new System.Drawing.Point(13, 88); + lastNameLabel.Name = "lastNameLabel"; + lastNameLabel.Size = new System.Drawing.Size(61, 13); + lastNameLabel.TabIndex = 3; + lastNameLabel.Text = "Last Name:"; + // + // lastNameTextBox + // + this.lastNameTextBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.employeesBindingSource, "LastName", true)); + this.lastNameTextBox.Location = new System.Drawing.Point(89, 85); + this.lastNameTextBox.Name = "lastNameTextBox"; + this.lastNameTextBox.Size = new System.Drawing.Size(129, 20); + this.lastNameTextBox.TabIndex = 4; + // + // firstNameLabel + // + firstNameLabel.AutoSize = true; + firstNameLabel.Location = new System.Drawing.Point(13, 114); + firstNameLabel.Name = "firstNameLabel"; + firstNameLabel.Size = new System.Drawing.Size(60, 13); + firstNameLabel.TabIndex = 5; + firstNameLabel.Text = "First Name:"; + // + // firstNameTextBox + // + this.firstNameTextBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.employeesBindingSource, "FirstName", true)); + this.firstNameTextBox.Location = new System.Drawing.Point(89, 111); + this.firstNameTextBox.Name = "firstNameTextBox"; + this.firstNameTextBox.Size = new System.Drawing.Size(129, 20); + this.firstNameTextBox.TabIndex = 6; + // + // titleLabel + // + titleLabel.AutoSize = true; + titleLabel.Location = new System.Drawing.Point(13, 140); + titleLabel.Name = "titleLabel"; + titleLabel.Size = new System.Drawing.Size(30, 13); + titleLabel.TabIndex = 7; + titleLabel.Text = "Title:"; + // + // titleTextBox + // + this.titleTextBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.employeesBindingSource, "Title", true)); + this.titleTextBox.Location = new System.Drawing.Point(89, 137); + this.titleTextBox.Name = "titleTextBox"; + this.titleTextBox.Size = new System.Drawing.Size(129, 20); + this.titleTextBox.TabIndex = 8; + // + // photoLabel + // + photoLabel.AutoSize = true; + photoLabel.Location = new System.Drawing.Point(13, 163); + photoLabel.Name = "photoLabel"; + photoLabel.Size = new System.Drawing.Size(38, 13); + photoLabel.TabIndex = 9; + photoLabel.Text = "Photo:"; + // + // photoPictureBox + // + this.photoPictureBox.DataBindings.Add(new System.Windows.Forms.Binding("Image", this.employeesBindingSource, "Photo", true)); + this.photoPictureBox.Location = new System.Drawing.Point(89, 163); + this.photoPictureBox.Name = "photoPictureBox"; + this.photoPictureBox.Size = new System.Drawing.Size(95, 110); + this.photoPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.photoPictureBox.TabIndex = 10; + this.photoPictureBox.TabStop = false; + // + // tagIDLabel + // + tagIDLabel.AutoSize = true; + tagIDLabel.Location = new System.Drawing.Point(13, 36); + tagIDLabel.Name = "tagIDLabel"; + tagIDLabel.Size = new System.Drawing.Size(43, 13); + tagIDLabel.TabIndex = 11; + tagIDLabel.Text = "Tag ID:"; + // + // tagIDLabel1 + // + this.tagIDLabel1.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.employeesBindingSource, "TagID", true)); + this.tagIDLabel1.Location = new System.Drawing.Point(89, 36); + this.tagIDLabel1.Name = "tagIDLabel1"; + this.tagIDLabel1.Size = new System.Drawing.Size(100, 23); + this.tagIDLabel1.TabIndex = 12; + // + // StatusStrip1 + // + this.StatusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.ToolStripStatusLabel1}); + this.StatusStrip1.Location = new System.Drawing.Point(0, 277); + this.StatusStrip1.Name = "StatusStrip1"; + this.StatusStrip1.Size = new System.Drawing.Size(412, 22); + this.StatusStrip1.TabIndex = 26; + this.StatusStrip1.Text = "StatusStrip1"; + // + // ToolStripStatusLabel1 + // + this.ToolStripStatusLabel1.Name = "ToolStripStatusLabel1"; + this.ToolStripStatusLabel1.Size = new System.Drawing.Size(111, 17); + this.ToolStripStatusLabel1.Text = "ToolStripStatusLabel1"; + // + // GroupBox1 + // + this.GroupBox1.Controls.Add(this.btnDeassign); + this.GroupBox1.Controls.Add(this.txtEmployeeID); + this.GroupBox1.Controls.Add(this.btnFind); + this.GroupBox1.Controls.Add(Label2); + this.GroupBox1.Controls.Add(this.btnAssign); + this.GroupBox1.Controls.Add(this.txtTagID); + this.GroupBox1.Controls.Add(this.Label1); + this.GroupBox1.Location = new System.Drawing.Point(224, 36); + this.GroupBox1.Name = "GroupBox1"; + this.GroupBox1.Size = new System.Drawing.Size(176, 232); + this.GroupBox1.TabIndex = 25; + this.GroupBox1.TabStop = false; + this.GroupBox1.Text = "Administrator"; + // + // btnDeassign + // + this.btnDeassign.Location = new System.Drawing.Point(5, 189); + this.btnDeassign.Name = "btnDeassign"; + this.btnDeassign.Size = new System.Drawing.Size(163, 37); + this.btnDeassign.TabIndex = 19; + this.btnDeassign.Text = "Deassign Tag from Employee"; + this.btnDeassign.UseVisualStyleBackColor = true; + this.btnDeassign.Click += new System.EventHandler(this.btnDeassign_Click); + // + // txtEmployeeID + // + this.txtEmployeeID.Location = new System.Drawing.Point(5, 120); + this.txtEmployeeID.Name = "txtEmployeeID"; + this.txtEmployeeID.Size = new System.Drawing.Size(103, 20); + this.txtEmployeeID.TabIndex = 18; + // + // btnFind + // + this.btnFind.Location = new System.Drawing.Point(114, 118); + this.btnFind.Name = "btnFind"; + this.btnFind.Size = new System.Drawing.Size(54, 23); + this.btnFind.TabIndex = 17; + this.btnFind.Text = "Find"; + this.btnFind.UseVisualStyleBackColor = true; + this.btnFind.Click += new System.EventHandler(this.btnFind_Click); + // + // Label2 + // + Label2.AutoSize = true; + Label2.Location = new System.Drawing.Point(5, 104); + Label2.Name = "Label2"; + Label2.Size = new System.Drawing.Size(139, 13); + Label2.TabIndex = 13; + Label2.Text = "Search for Employee (by ID)"; + // + // btnAssign + // + this.btnAssign.Location = new System.Drawing.Point(5, 146); + this.btnAssign.Name = "btnAssign"; + this.btnAssign.Size = new System.Drawing.Size(163, 37); + this.btnAssign.TabIndex = 3; + this.btnAssign.Text = "Assign Tag to Employee"; + this.btnAssign.UseVisualStyleBackColor = true; + this.btnAssign.Click += new System.EventHandler(this.btnAssign_Click); + // + // txtTagID + // + this.txtTagID.Location = new System.Drawing.Point(6, 32); + this.txtTagID.Multiline = true; + this.txtTagID.Name = "txtTagID"; + this.txtTagID.ReadOnly = true; + this.txtTagID.Size = new System.Drawing.Size(162, 20); + this.txtTagID.TabIndex = 2; + this.txtTagID.TextChanged += new System.EventHandler(this.txtTagID_TextChanged); + // + // Label1 + // + this.Label1.AutoSize = true; + this.Label1.Location = new System.Drawing.Point(3, 16); + this.Label1.Name = "Label1"; + this.Label1.Size = new System.Drawing.Size(40, 13); + this.Label1.TabIndex = 1; + this.Label1.Text = "Tag ID"; + // + // timer1 + // + this.timer1.Tick += new System.EventHandler(this.timer1_Tick); + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(412, 299); + this.Controls.Add(this.StatusStrip1); + this.Controls.Add(this.GroupBox1); + this.Controls.Add(employeeIDLabel); + this.Controls.Add(this.employeeIDLabel1); + this.Controls.Add(lastNameLabel); + this.Controls.Add(this.lastNameTextBox); + this.Controls.Add(firstNameLabel); + this.Controls.Add(this.firstNameTextBox); + this.Controls.Add(titleLabel); + this.Controls.Add(this.titleTextBox); + this.Controls.Add(photoLabel); + this.Controls.Add(this.photoPictureBox); + this.Controls.Add(tagIDLabel); + this.Controls.Add(this.tagIDLabel1); + this.Controls.Add(this.employeesBindingNavigator); + this.Name = "Form1"; + this.Text = "Form1"; + this.Load += new System.EventHandler(this.Form1_Load); + ((System.ComponentModel.ISupportInitialize)(this.northwindDataSet)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.employeesBindingSource)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.employeesBindingNavigator)).EndInit(); + this.employeesBindingNavigator.ResumeLayout(false); + this.employeesBindingNavigator.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.photoPictureBox)).EndInit(); + this.StatusStrip1.ResumeLayout(false); + this.StatusStrip1.PerformLayout(); + this.GroupBox1.ResumeLayout(false); + this.GroupBox1.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private NorthwindDataSet northwindDataSet; + private System.Windows.Forms.BindingSource employeesBindingSource; + private Attendance_CS.NorthwindDataSetTableAdapters.EmployeesTableAdapter employeesTableAdapter; + private System.Windows.Forms.BindingNavigator employeesBindingNavigator; + private System.Windows.Forms.ToolStripButton bindingNavigatorAddNewItem; + private System.Windows.Forms.ToolStripLabel bindingNavigatorCountItem; + private System.Windows.Forms.ToolStripButton bindingNavigatorDeleteItem; + private System.Windows.Forms.ToolStripButton bindingNavigatorMoveFirstItem; + private System.Windows.Forms.ToolStripButton bindingNavigatorMovePreviousItem; + private System.Windows.Forms.ToolStripSeparator bindingNavigatorSeparator; + private System.Windows.Forms.ToolStripTextBox bindingNavigatorPositionItem; + private System.Windows.Forms.ToolStripSeparator bindingNavigatorSeparator1; + private System.Windows.Forms.ToolStripButton bindingNavigatorMoveNextItem; + private System.Windows.Forms.ToolStripButton bindingNavigatorMoveLastItem; + private System.Windows.Forms.ToolStripSeparator bindingNavigatorSeparator2; + private System.Windows.Forms.ToolStripButton employeesBindingNavigatorSaveItem; + private System.Windows.Forms.Label employeeIDLabel1; + private System.Windows.Forms.TextBox lastNameTextBox; + private System.Windows.Forms.TextBox firstNameTextBox; + private System.Windows.Forms.TextBox titleTextBox; + private System.Windows.Forms.PictureBox photoPictureBox; + private System.Windows.Forms.Label tagIDLabel1; + internal System.Windows.Forms.StatusStrip StatusStrip1; + internal System.Windows.Forms.ToolStripStatusLabel ToolStripStatusLabel1; + internal System.Windows.Forms.GroupBox GroupBox1; + internal System.Windows.Forms.Button btnDeassign; + internal System.Windows.Forms.TextBox txtEmployeeID; + internal System.Windows.Forms.Button btnFind; + internal System.Windows.Forms.Button btnAssign; + internal System.Windows.Forms.TextBox txtTagID; + internal System.Windows.Forms.Label Label1; + private System.Windows.Forms.Timer timer1; + } +} + diff --git a/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/Form1.cs b/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/Form1.cs new file mode 100644 index 0000000..12b43df --- /dev/null +++ b/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/Form1.cs @@ -0,0 +1,166 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +using System.Data; +using System.Data.SqlClient; +using System.IO; + +namespace Attendance_CS +{ + public partial class Form1 : Form + { + private System.IO.Ports.SerialPort serialPort = new System.IO.Ports.SerialPort(); + private string tagID = string.Empty; + private DateTime timeRecorded = System.DateTime.Today; + const string COM = "COM6"; + const string FILE_NAME = "C:\\Attendance.csv"; + const int INTERVAL = 3; + + public Form1() + { + InitializeComponent(); + } + + private void employeesBindingNavigatorSaveItem_Click(object sender, EventArgs e) + { + this.Validate(); + this.employeesBindingSource.EndEdit(); + this.employeesTableAdapter.Update(this.northwindDataSet.Employees); + } + + private void Form1_Load(object sender, EventArgs e) + { + // TODO: This line of code loads data into the 'northwindDataSet.Employees' table. You can move, or remove it, as needed. + this.employeesTableAdapter.Fill(this.northwindDataSet.Employees); + + serialPort.DataReceived += + new System.IO.Ports.SerialDataReceivedEventHandler(DataReceived); + + employeesBindingSource.Filter = "TAGID='xxxxxxxxxx'"; + timer1.Interval = INTERVAL * 1000; + if (serialPort.IsOpen) + { + serialPort.Close(); + } + try + { + serialPort.PortName = COM; + serialPort.BaudRate = 9600; + serialPort.Parity = System.IO.Ports.Parity.None; + serialPort.DataBits = 8; + serialPort.StopBits = System.IO.Ports.StopBits.One; + serialPort.Handshake = System.IO.Ports.Handshake.None; + serialPort.Open(); + } + catch (Exception ex) + { + MessageBox.Show(ex.ToString()); + } + } + + private void DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) + { + txtTagID.BeginInvoke(new myDelegate(updateTextBox), new object[] { }); + } + + public delegate void myDelegate(); + public void updateTextBox() + { + txtTagID.AppendText(serialPort.ReadExisting()); + txtTagID.ScrollToCaret(); + } + + private void btnFind_Click(object sender, EventArgs e) + { + if (txtEmployeeID.Text == string.Empty) + { + employeesBindingSource.RemoveFilter(); + } + else + { + employeesBindingSource.Filter = "EmployeeID='" + txtEmployeeID.Text + "'"; + } + } + + private void WriteToLog(string employeeID, string employeeName) + { + string str = employeeID + "," + employeeName + "," + System.DateTime.Today.ToString() + Environment.NewLine; + File.AppendAllText(FILE_NAME, str); + } + + private void txtTagID_TextChanged(object sender, EventArgs e) + { + if (txtTagID.Lines[txtTagID.Lines.Length - 1] == string.Empty) + { + string temptagID = txtTagID.Lines[txtTagID.Lines.Length - 2]; + TimeSpan tp = System.DateTime.Today.Subtract(timeRecorded); + double timeInterval = tp.Ticks / TimeSpan.TicksPerSecond; + if ((temptagID == tagID) & timeInterval < INTERVAL) + { + return; + } + tagID = temptagID; + employeesBindingSource.RemoveFilter(); + employeesBindingSource.Filter = "TAGID='" + tagID + "'"; + if (employeesBindingSource.Count < 1) + { + ToolStripStatusLabel1.Text = "Employee not found."; + } + else + { + ToolStripStatusLabel1.Text = "Employee found."; + WriteToLog(employeeIDLabel1.Text, lastNameTextBox.Text + ", " + firstNameTextBox.Text); + timer1.Enabled = false; + timer1.Enabled = true; + } + timeRecorded = System.DateTime.Today; + } + } + + private void timer1_Tick(object sender, EventArgs e) + { + employeesBindingSource.Filter = "TAGID='xxxxxxxxxx'"; + timer1.Enabled = false; + } + + private void btnAssign_Click(object sender, EventArgs e) + { + if (txtTagID.Lines.Length > 1) + { + string tagID = txtTagID.Lines[txtTagID.Lines.Length - 2]; + } + else + { + ToolStripStatusLabel1.Text = "No tag id scanned."; + return; + } + if (txtTagID.Text != string.Empty) + { + tagIDLabel1.Text = tagID; + ToolStripStatusLabel1.Text = "Tag associated with employee."; + this.Validate(); + this.employeesBindingSource.EndEdit(); + this.employeesTableAdapter.Update(this.northwindDataSet.Employees); + } + } + + private void btnDeassign_Click(object sender, EventArgs e) + { + if (tagIDLabel1.Text.Trim() == string.Empty) + { + ToolStripStatusLabel1.Text = "Current employee has no tag ID."; + return; + } + tagIDLabel1.Text = string.Empty; + this.Validate(); + this.employeesBindingSource.EndEdit(); + this.employeesTableAdapter.Update(this.northwindDataSet.Employees); + ToolStripStatusLabel1.Text = "Tag deassociated from employee."; + } + } +} \ No newline at end of file diff --git a/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/Form1.resx b/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/Form1.resx new file mode 100644 index 0000000..b4eee7c --- /dev/null +++ b/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/Form1.resx @@ -0,0 +1,245 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 158, 17 + + + 333, 17 + + + 504, 17 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAU1JREFUOE9jYBi0 + 4O4C9v+35nH+vzqH6//FGbz/SXbodaDGP48a//952PD/5GQB0g04P50XbsDBHhHSDTg+SRBoe93/Pw+q + /u9oFydswKWZPP/PTuX7fxKo8Ui/0P993SJAzeX//94r+r++Qeb/qhq5/0srFf/PL1X+P6tIFdPAU0B/ + /nlYD9RUC8SV///cKwHivP9/72b+/3sn+f/f23H//92MAOKQ/5NyNDENONQrDHbu3/ulQI0FQI3ZQI2p + QI0J///digZqDPv/70bQ/3/X/f53peliGrCzXeL/lmap/+vAzpX/v6RC8f/fWzFAjeH/p+Zp/J+QpfW/ + O0P3f3uq/v/mREPCYTIb6E+Qc//dCPjfk6FDWAN6QgH5898NfyD2+9+arE+6Ad3pumD/gnB9nBHpBrQk + GfxviDf8XxNr/L8y2oR0A0hO++RqAAAkI9ieo+gjUwAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAW9JREFUOE+tkk0o + w3EYx3dV3kq5uKBWDiPT8hISMiQsMiEyQ9qBg0hoFwcHUi7kgIvkQFJSTrQ4zdvmrTW1/kuT0i74x+X3 + MRal/fEnv8tz+H2fz/N8vz0azX88PG6wmcDp4E881hYR3VUIixF2Nr+FcO2DlbnPGjaWoM+M6DAiOitg + YUoR8rqhsJTBWG/kP6fOMKTegGjKh/7mTyIx0oUw58C0/XubLM8iKtPeQIx2gfcMJgbD0FBVlRE+D7QU + hS2ZshANuTDQqq75fQIHe6GVcxHV6VCr/2VzQIKmAshOQNbHc6+PhTqDOggBP5jzoDCJoLUaLo7fwr3V + hSCr8z8EeHcLbSU8FCfjLU0nuL/70cB4Py5tDLL7UBnC8xMMW6EkhRNdIsGt9QjhTXkGUnsN8rVf4Q72 + tpFzEnGlRiH1NIL8qDjJoY1DdjkVADNjSGnReI2ZIF196VW22+D8SAFw6YLJITjaV5e2qotSIXoBiiMD + HEVvQ/IAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAStJREFUOE9jYBg0 + oHDW8/9NC57/z5z4+D8uR4W3P8Apx5A789n/VUfe/8elKL77wf/ghmu4DciY8vT/wn0fsCqK73n4f+n+ + ///9qy/gNiCh58n/aVveYyiKaL8P1pw56/9/r9ITuA2I7Hr0v3f1BxRFoa33wJpb1wFt7/z73yX/AG4D + Apsf/q+b/w6uKLjl7v9Fe///7wBqzpjz879d3c//9hnbcRvgUXX/f/60NyiK7Ipv/0+f8/u/f9e3/zqF + 7/5bJKzHbYB96d3/2ZNfYyjSTzn/36ToxX+VrE//jSOX4TbAIu/O/9T+11gVGSSd+C+b9vW/bvA83AYY + Zt3+H9byEqci/dTL/zV8p+E2QCftxn+/6od4Fal4TMBtgFPulf8gBXgVDZqMh+wQAPB2wKsSwCgmAAAA + AElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAL1JREFUOE9jYBgy + ILz9wX+yHRvf/eB/cMM18gyI73n4f+n+///9qy+QbkBE+32w5sxZ//97lZ4gzYDQ1ntgza3rgLZ3/v3v + kn+AeAOCW+7+X7T3//8OoOaMOT//29X9/G+fsZ14A0ChbVd8+3/6nN///bu+/dcpfPffImE9aQaADNFP + Of/fpOjFf5WsT/+NI5eRbgDIEIOkE/9l077+1w2eR54BYJekXv6v4TuNfANAhqh4TKDMALKTMc01AgDQ + FGCYkuTLEQAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAKtJREFUOE9jYBh0 + oHDW8/8UOSp35rP/Cd33yDckY8rT//P2//6f0HWHPEMSep78n73v1//OrX//u5VeJt2QyK5H/6ds+/W/ + ZOnf/wnT//63yT1LmiGBzQ//t659D9ZsXPLlv3T0tf/GkcuIN8Sj6v7/krnv4JoVXXqI1wyKPvvSu/8D + W56BbSZZM8gAi7w7/20KrpCnGWSAYdZt8jWDDNBJu0GanylKtoNCMwCgfl+gC2KedgAAAABJRU5ErkJg + gg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAATBJREFUOE9jYBhU + oHDW8/+4HASSa1rw/H/mxMc41TDkznz2P6H7HlYFILlVR97/D29/gNuAjClP/8/b//t/QtcdDEUguYX7 + PvwPbriG24CEnif/Z+/79b9z69//bqWXURSC5KZtef/fv/oCbgMiux79n7Lt1/+SpX//J0z/+98m9yxc + MUiud/WH/16lJ3AbENj88H/r2vdgzcYlX/5LR1/7bxy5DKwBJFc3/91/l/wDuA3wqLr/v2TuO7hmRZce + uGKQXP60N//tM7bjNsC+9O7/wJZnYJuRNYNcAJLLnvz6v0XCetwGWOTd+W9TcAVDM8gAkFxq/2u4l7Cm + F8Os21g1gxSD5MJaXv7XDZ6H2wU6aTdwSoLk/Kof/tfwnYbbAHz5yin3yn8VjwlgPKjyHwMAvtG/s0Vm + x8MAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAilJREFUOE+tk91L + k3EUx/cvdN9N0EW3NTWGa7EaPOUcyqphWBG9PZEv5dJlmqhYmUYtXyBb4dJJy+kknFT4BqZIjaFMJUsz + V7TEoabYRDD49ju/6Pm1Mm/qB+fy8znPOef7qFT/4z17GgWVr30Zbd4lPHYvoLEhgvuOGdTWfIL9dgg3 + yqdQWjKBwoLXyMsdxYXzQSi9CeztAWqqV7HRW1ldgzGtF4fTnvBSBN7WRS6orPjyV57gyMIKdpufQ62W + YTnkEQL3o3kuKC35vK7gJ/w+vIg4kw8Fl6dxwNwkBM76WS64ZHv3h+BXeGQygm2SF9accaSmOIWg7m6Y + C7KzRmMEv8ODwTA2692Q5QBMJocQVFd95AL5TEARrAf3+D9gU2IDjhx9gaSkWiG4WTmN7i6wUwLHT76C + 5dgA3zYtjGamz6bOP+A+HLR0QpLsQnC1bBIdPrAMAE2ub+zuX1F+fY4vlRZGM2dmBBU4ObUdBkOFEFwp + HIenGXjoXGPBicKYnhNT5hM2pJ8r4p2TUxi83wO9vkwIbHljDAaq7kR5ZxJQSOK0EobezmJsag5y7jXs + NbZxWLvHBZ2uSAgolo57UD6bBASfzb+FN6F5hGaWcLHYjni9i8GNiN/1ANrEfCHIzBhmcy/zmbcaPNiy + Q0JLRz98XYPo7vNj4OUQ9pksUOvqkcDg7Zo6aDTWWMHpU/08npQwCgndmU5F26aF0czUlYrgnQnZQvAv + f/R3bGg6a0rM640AAAAASUVORK5CYII= + + + + False + + + False + + + False + + + False + + + False + + + False + + + 808, 17 + + + False + + + 17, 54 + + \ No newline at end of file diff --git a/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/NorthwindDataSet.Designer.cs b/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/NorthwindDataSet.Designer.cs new file mode 100644 index 0000000..aac164a --- /dev/null +++ b/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/NorthwindDataSet.Designer.cs @@ -0,0 +1,1023 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +#pragma warning disable 1591 + +namespace Attendance_CS { + using System; + + + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")] + [Serializable()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.ComponentModel.ToolboxItem(true)] + [System.Xml.Serialization.XmlSchemaProviderAttribute("GetTypedDataSetSchema")] + [System.Xml.Serialization.XmlRootAttribute("NorthwindDataSet")] + [System.ComponentModel.Design.HelpKeywordAttribute("vs.data.DataSet")] + public partial class NorthwindDataSet : System.Data.DataSet { + + private EmployeesDataTable tableEmployees; + + private System.Data.SchemaSerializationMode _schemaSerializationMode = System.Data.SchemaSerializationMode.IncludeSchema; + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + public NorthwindDataSet() { + this.BeginInit(); + this.InitClass(); + System.ComponentModel.CollectionChangeEventHandler schemaChangedHandler = new System.ComponentModel.CollectionChangeEventHandler(this.SchemaChanged); + base.Tables.CollectionChanged += schemaChangedHandler; + base.Relations.CollectionChanged += schemaChangedHandler; + this.EndInit(); + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected NorthwindDataSet(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) : + base(info, context, false) { + if ((this.IsBinarySerialized(info, context) == true)) { + this.InitVars(false); + System.ComponentModel.CollectionChangeEventHandler schemaChangedHandler1 = new System.ComponentModel.CollectionChangeEventHandler(this.SchemaChanged); + this.Tables.CollectionChanged += schemaChangedHandler1; + this.Relations.CollectionChanged += schemaChangedHandler1; + return; + } + string strSchema = ((string)(info.GetValue("XmlSchema", typeof(string)))); + if ((this.DetermineSchemaSerializationMode(info, context) == System.Data.SchemaSerializationMode.IncludeSchema)) { + System.Data.DataSet ds = new System.Data.DataSet(); + ds.ReadXmlSchema(new System.Xml.XmlTextReader(new System.IO.StringReader(strSchema))); + if ((ds.Tables["Employees"] != null)) { + base.Tables.Add(new EmployeesDataTable(ds.Tables["Employees"])); + } + this.DataSetName = ds.DataSetName; + this.Prefix = ds.Prefix; + this.Namespace = ds.Namespace; + this.Locale = ds.Locale; + this.CaseSensitive = ds.CaseSensitive; + this.EnforceConstraints = ds.EnforceConstraints; + this.Merge(ds, false, System.Data.MissingSchemaAction.Add); + this.InitVars(); + } + else { + this.ReadXmlSchema(new System.Xml.XmlTextReader(new System.IO.StringReader(strSchema))); + } + this.GetSerializationData(info, context); + System.ComponentModel.CollectionChangeEventHandler schemaChangedHandler = new System.ComponentModel.CollectionChangeEventHandler(this.SchemaChanged); + base.Tables.CollectionChanged += schemaChangedHandler; + this.Relations.CollectionChanged += schemaChangedHandler; + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + [System.ComponentModel.Browsable(false)] + [System.ComponentModel.DesignerSerializationVisibility(System.ComponentModel.DesignerSerializationVisibility.Content)] + public EmployeesDataTable Employees { + get { + return this.tableEmployees; + } + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + [System.ComponentModel.BrowsableAttribute(true)] + [System.ComponentModel.DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Visible)] + public override System.Data.SchemaSerializationMode SchemaSerializationMode { + get { + return this._schemaSerializationMode; + } + set { + this._schemaSerializationMode = value; + } + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + [System.ComponentModel.DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public new System.Data.DataTableCollection Tables { + get { + return base.Tables; + } + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + [System.ComponentModel.DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public new System.Data.DataRelationCollection Relations { + get { + return base.Relations; + } + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override void InitializeDerivedDataSet() { + this.BeginInit(); + this.InitClass(); + this.EndInit(); + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + public override System.Data.DataSet Clone() { + NorthwindDataSet cln = ((NorthwindDataSet)(base.Clone())); + cln.InitVars(); + cln.SchemaSerializationMode = this.SchemaSerializationMode; + return cln; + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override bool ShouldSerializeTables() { + return false; + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override bool ShouldSerializeRelations() { + return false; + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override void ReadXmlSerializable(System.Xml.XmlReader reader) { + if ((this.DetermineSchemaSerializationMode(reader) == System.Data.SchemaSerializationMode.IncludeSchema)) { + this.Reset(); + System.Data.DataSet ds = new System.Data.DataSet(); + ds.ReadXml(reader); + if ((ds.Tables["Employees"] != null)) { + base.Tables.Add(new EmployeesDataTable(ds.Tables["Employees"])); + } + this.DataSetName = ds.DataSetName; + this.Prefix = ds.Prefix; + this.Namespace = ds.Namespace; + this.Locale = ds.Locale; + this.CaseSensitive = ds.CaseSensitive; + this.EnforceConstraints = ds.EnforceConstraints; + this.Merge(ds, false, System.Data.MissingSchemaAction.Add); + this.InitVars(); + } + else { + this.ReadXml(reader); + this.InitVars(); + } + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override System.Xml.Schema.XmlSchema GetSchemaSerializable() { + System.IO.MemoryStream stream = new System.IO.MemoryStream(); + this.WriteXmlSchema(new System.Xml.XmlTextWriter(stream, null)); + stream.Position = 0; + return System.Xml.Schema.XmlSchema.Read(new System.Xml.XmlTextReader(stream), null); + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + internal void InitVars() { + this.InitVars(true); + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + internal void InitVars(bool initTable) { + this.tableEmployees = ((EmployeesDataTable)(base.Tables["Employees"])); + if ((initTable == true)) { + if ((this.tableEmployees != null)) { + this.tableEmployees.InitVars(); + } + } + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + private void InitClass() { + this.DataSetName = "NorthwindDataSet"; + this.Prefix = ""; + this.Namespace = "http://tempuri.org/NorthwindDataSet.xsd"; + this.EnforceConstraints = true; + this.SchemaSerializationMode = System.Data.SchemaSerializationMode.IncludeSchema; + this.tableEmployees = new EmployeesDataTable(); + base.Tables.Add(this.tableEmployees); + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + private bool ShouldSerializeEmployees() { + return false; + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + private void SchemaChanged(object sender, System.ComponentModel.CollectionChangeEventArgs e) { + if ((e.Action == System.ComponentModel.CollectionChangeAction.Remove)) { + this.InitVars(); + } + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + public static System.Xml.Schema.XmlSchemaComplexType GetTypedDataSetSchema(System.Xml.Schema.XmlSchemaSet xs) { + NorthwindDataSet ds = new NorthwindDataSet(); + System.Xml.Schema.XmlSchemaComplexType type = new System.Xml.Schema.XmlSchemaComplexType(); + System.Xml.Schema.XmlSchemaSequence sequence = new System.Xml.Schema.XmlSchemaSequence(); + xs.Add(ds.GetSchemaSerializable()); + System.Xml.Schema.XmlSchemaAny any = new System.Xml.Schema.XmlSchemaAny(); + any.Namespace = ds.Namespace; + sequence.Items.Add(any); + type.Particle = sequence; + return type; + } + + public delegate void EmployeesRowChangeEventHandler(object sender, EmployeesRowChangeEvent e); + + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")] + [System.Serializable()] + [System.Xml.Serialization.XmlSchemaProviderAttribute("GetTypedTableSchema")] + public partial class EmployeesDataTable : System.Data.DataTable, System.Collections.IEnumerable { + + private System.Data.DataColumn columnEmployeeID; + + private System.Data.DataColumn columnLastName; + + private System.Data.DataColumn columnFirstName; + + private System.Data.DataColumn columnTitle; + + private System.Data.DataColumn columnPhoto; + + private System.Data.DataColumn columnTagID; + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + public EmployeesDataTable() { + this.TableName = "Employees"; + this.BeginInit(); + this.InitClass(); + this.EndInit(); + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + internal EmployeesDataTable(System.Data.DataTable table) { + this.TableName = table.TableName; + if ((table.CaseSensitive != table.DataSet.CaseSensitive)) { + this.CaseSensitive = table.CaseSensitive; + } + if ((table.Locale.ToString() != table.DataSet.Locale.ToString())) { + this.Locale = table.Locale; + } + if ((table.Namespace != table.DataSet.Namespace)) { + this.Namespace = table.Namespace; + } + this.Prefix = table.Prefix; + this.MinimumCapacity = table.MinimumCapacity; + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected EmployeesDataTable(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) : + base(info, context) { + this.InitVars(); + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + public System.Data.DataColumn EmployeeIDColumn { + get { + return this.columnEmployeeID; + } + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + public System.Data.DataColumn LastNameColumn { + get { + return this.columnLastName; + } + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + public System.Data.DataColumn FirstNameColumn { + get { + return this.columnFirstName; + } + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + public System.Data.DataColumn TitleColumn { + get { + return this.columnTitle; + } + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + public System.Data.DataColumn PhotoColumn { + get { + return this.columnPhoto; + } + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + public System.Data.DataColumn TagIDColumn { + get { + return this.columnTagID; + } + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + [System.ComponentModel.Browsable(false)] + public int Count { + get { + return this.Rows.Count; + } + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + public EmployeesRow this[int index] { + get { + return ((EmployeesRow)(this.Rows[index])); + } + } + + public event EmployeesRowChangeEventHandler EmployeesRowChanging; + + public event EmployeesRowChangeEventHandler EmployeesRowChanged; + + public event EmployeesRowChangeEventHandler EmployeesRowDeleting; + + public event EmployeesRowChangeEventHandler EmployeesRowDeleted; + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + public void AddEmployeesRow(EmployeesRow row) { + this.Rows.Add(row); + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + public EmployeesRow AddEmployeesRow(string LastName, string FirstName, string Title, byte[] Photo, string TagID) { + EmployeesRow rowEmployeesRow = ((EmployeesRow)(this.NewRow())); + rowEmployeesRow.ItemArray = new object[] { + null, + LastName, + FirstName, + Title, + Photo, + TagID}; + this.Rows.Add(rowEmployeesRow); + return rowEmployeesRow; + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + public EmployeesRow FindByEmployeeID(int EmployeeID) { + return ((EmployeesRow)(this.Rows.Find(new object[] { + EmployeeID}))); + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + public virtual System.Collections.IEnumerator GetEnumerator() { + return this.Rows.GetEnumerator(); + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + public override System.Data.DataTable Clone() { + EmployeesDataTable cln = ((EmployeesDataTable)(base.Clone())); + cln.InitVars(); + return cln; + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override System.Data.DataTable CreateInstance() { + return new EmployeesDataTable(); + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + internal void InitVars() { + this.columnEmployeeID = base.Columns["EmployeeID"]; + this.columnLastName = base.Columns["LastName"]; + this.columnFirstName = base.Columns["FirstName"]; + this.columnTitle = base.Columns["Title"]; + this.columnPhoto = base.Columns["Photo"]; + this.columnTagID = base.Columns["TagID"]; + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + private void InitClass() { + this.columnEmployeeID = new System.Data.DataColumn("EmployeeID", typeof(int), null, System.Data.MappingType.Element); + base.Columns.Add(this.columnEmployeeID); + this.columnLastName = new System.Data.DataColumn("LastName", typeof(string), null, System.Data.MappingType.Element); + base.Columns.Add(this.columnLastName); + this.columnFirstName = new System.Data.DataColumn("FirstName", typeof(string), null, System.Data.MappingType.Element); + base.Columns.Add(this.columnFirstName); + this.columnTitle = new System.Data.DataColumn("Title", typeof(string), null, System.Data.MappingType.Element); + base.Columns.Add(this.columnTitle); + this.columnPhoto = new System.Data.DataColumn("Photo", typeof(byte[]), null, System.Data.MappingType.Element); + base.Columns.Add(this.columnPhoto); + this.columnTagID = new System.Data.DataColumn("TagID", typeof(string), null, System.Data.MappingType.Element); + base.Columns.Add(this.columnTagID); + this.Constraints.Add(new System.Data.UniqueConstraint("Constraint1", new System.Data.DataColumn[] { + this.columnEmployeeID}, true)); + this.columnEmployeeID.AutoIncrement = true; + this.columnEmployeeID.AllowDBNull = false; + this.columnEmployeeID.ReadOnly = true; + this.columnEmployeeID.Unique = true; + this.columnLastName.AllowDBNull = false; + this.columnLastName.MaxLength = 20; + this.columnFirstName.AllowDBNull = false; + this.columnFirstName.MaxLength = 10; + this.columnTitle.MaxLength = 30; + this.columnTagID.MaxLength = 10; + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + public EmployeesRow NewEmployeesRow() { + return ((EmployeesRow)(this.NewRow())); + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override System.Data.DataRow NewRowFromBuilder(System.Data.DataRowBuilder builder) { + return new EmployeesRow(builder); + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override System.Type GetRowType() { + return typeof(EmployeesRow); + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override void OnRowChanged(System.Data.DataRowChangeEventArgs e) { + base.OnRowChanged(e); + if ((this.EmployeesRowChanged != null)) { + this.EmployeesRowChanged(this, new EmployeesRowChangeEvent(((EmployeesRow)(e.Row)), e.Action)); + } + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override void OnRowChanging(System.Data.DataRowChangeEventArgs e) { + base.OnRowChanging(e); + if ((this.EmployeesRowChanging != null)) { + this.EmployeesRowChanging(this, new EmployeesRowChangeEvent(((EmployeesRow)(e.Row)), e.Action)); + } + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override void OnRowDeleted(System.Data.DataRowChangeEventArgs e) { + base.OnRowDeleted(e); + if ((this.EmployeesRowDeleted != null)) { + this.EmployeesRowDeleted(this, new EmployeesRowChangeEvent(((EmployeesRow)(e.Row)), e.Action)); + } + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override void OnRowDeleting(System.Data.DataRowChangeEventArgs e) { + base.OnRowDeleting(e); + if ((this.EmployeesRowDeleting != null)) { + this.EmployeesRowDeleting(this, new EmployeesRowChangeEvent(((EmployeesRow)(e.Row)), e.Action)); + } + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + public void RemoveEmployeesRow(EmployeesRow row) { + this.Rows.Remove(row); + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + public static System.Xml.Schema.XmlSchemaComplexType GetTypedTableSchema(System.Xml.Schema.XmlSchemaSet xs) { + System.Xml.Schema.XmlSchemaComplexType type = new System.Xml.Schema.XmlSchemaComplexType(); + System.Xml.Schema.XmlSchemaSequence sequence = new System.Xml.Schema.XmlSchemaSequence(); + NorthwindDataSet ds = new NorthwindDataSet(); + xs.Add(ds.GetSchemaSerializable()); + System.Xml.Schema.XmlSchemaAny any1 = new System.Xml.Schema.XmlSchemaAny(); + any1.Namespace = "http://www.w3.org/2001/XMLSchema"; + any1.MinOccurs = new decimal(0); + any1.MaxOccurs = decimal.MaxValue; + any1.ProcessContents = System.Xml.Schema.XmlSchemaContentProcessing.Lax; + sequence.Items.Add(any1); + System.Xml.Schema.XmlSchemaAny any2 = new System.Xml.Schema.XmlSchemaAny(); + any2.Namespace = "urn:schemas-microsoft-com:xml-diffgram-v1"; + any2.MinOccurs = new decimal(1); + any2.ProcessContents = System.Xml.Schema.XmlSchemaContentProcessing.Lax; + sequence.Items.Add(any2); + System.Xml.Schema.XmlSchemaAttribute attribute1 = new System.Xml.Schema.XmlSchemaAttribute(); + attribute1.Name = "namespace"; + attribute1.FixedValue = ds.Namespace; + type.Attributes.Add(attribute1); + System.Xml.Schema.XmlSchemaAttribute attribute2 = new System.Xml.Schema.XmlSchemaAttribute(); + attribute2.Name = "tableTypeName"; + attribute2.FixedValue = "EmployeesDataTable"; + type.Attributes.Add(attribute2); + type.Particle = sequence; + return type; + } + } + + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")] + public partial class EmployeesRow : System.Data.DataRow { + + private EmployeesDataTable tableEmployees; + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + internal EmployeesRow(System.Data.DataRowBuilder rb) : + base(rb) { + this.tableEmployees = ((EmployeesDataTable)(this.Table)); + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + public int EmployeeID { + get { + return ((int)(this[this.tableEmployees.EmployeeIDColumn])); + } + set { + this[this.tableEmployees.EmployeeIDColumn] = value; + } + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + public string LastName { + get { + return ((string)(this[this.tableEmployees.LastNameColumn])); + } + set { + this[this.tableEmployees.LastNameColumn] = value; + } + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + public string FirstName { + get { + return ((string)(this[this.tableEmployees.FirstNameColumn])); + } + set { + this[this.tableEmployees.FirstNameColumn] = value; + } + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + public string Title { + get { + try { + return ((string)(this[this.tableEmployees.TitleColumn])); + } + catch (System.InvalidCastException e) { + throw new System.Data.StrongTypingException("The value for column \'Title\' in table \'Employees\' is DBNull.", e); + } + } + set { + this[this.tableEmployees.TitleColumn] = value; + } + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + public byte[] Photo { + get { + try { + return ((byte[])(this[this.tableEmployees.PhotoColumn])); + } + catch (System.InvalidCastException e) { + throw new System.Data.StrongTypingException("The value for column \'Photo\' in table \'Employees\' is DBNull.", e); + } + } + set { + this[this.tableEmployees.PhotoColumn] = value; + } + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + public string TagID { + get { + try { + return ((string)(this[this.tableEmployees.TagIDColumn])); + } + catch (System.InvalidCastException e) { + throw new System.Data.StrongTypingException("The value for column \'TagID\' in table \'Employees\' is DBNull.", e); + } + } + set { + this[this.tableEmployees.TagIDColumn] = value; + } + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + public bool IsTitleNull() { + return this.IsNull(this.tableEmployees.TitleColumn); + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + public void SetTitleNull() { + this[this.tableEmployees.TitleColumn] = System.Convert.DBNull; + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + public bool IsPhotoNull() { + return this.IsNull(this.tableEmployees.PhotoColumn); + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + public void SetPhotoNull() { + this[this.tableEmployees.PhotoColumn] = System.Convert.DBNull; + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + public bool IsTagIDNull() { + return this.IsNull(this.tableEmployees.TagIDColumn); + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + public void SetTagIDNull() { + this[this.tableEmployees.TagIDColumn] = System.Convert.DBNull; + } + } + + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")] + public class EmployeesRowChangeEvent : System.EventArgs { + + private EmployeesRow eventRow; + + private System.Data.DataRowAction eventAction; + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + public EmployeesRowChangeEvent(EmployeesRow row, System.Data.DataRowAction action) { + this.eventRow = row; + this.eventAction = action; + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + public EmployeesRow Row { + get { + return this.eventRow; + } + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + public System.Data.DataRowAction Action { + get { + return this.eventAction; + } + } + } + } +} +namespace Attendance_CS.NorthwindDataSetTableAdapters { + + + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.ComponentModel.ToolboxItem(true)] + [System.ComponentModel.DataObjectAttribute(true)] + [System.ComponentModel.DesignerAttribute("Microsoft.VSDesigner.DataSource.Design.TableAdapterDesigner, Microsoft.VSDesigner" + + ", Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")] + [System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")] + public partial class EmployeesTableAdapter : System.ComponentModel.Component { + + private System.Data.SqlClient.SqlDataAdapter _adapter; + + private System.Data.SqlClient.SqlConnection _connection; + + private System.Data.SqlClient.SqlCommand[] _commandCollection; + + private bool _clearBeforeFill; + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + public EmployeesTableAdapter() { + this.ClearBeforeFill = true; + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + private System.Data.SqlClient.SqlDataAdapter Adapter { + get { + if ((this._adapter == null)) { + this.InitAdapter(); + } + return this._adapter; + } + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + internal System.Data.SqlClient.SqlConnection Connection { + get { + if ((this._connection == null)) { + this.InitConnection(); + } + return this._connection; + } + set { + this._connection = value; + if ((this.Adapter.InsertCommand != null)) { + this.Adapter.InsertCommand.Connection = value; + } + if ((this.Adapter.DeleteCommand != null)) { + this.Adapter.DeleteCommand.Connection = value; + } + if ((this.Adapter.UpdateCommand != null)) { + this.Adapter.UpdateCommand.Connection = value; + } + for (int i = 0; (i < this.CommandCollection.Length); i = (i + 1)) { + if ((this.CommandCollection[i] != null)) { + ((System.Data.SqlClient.SqlCommand)(this.CommandCollection[i])).Connection = value; + } + } + } + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected System.Data.SqlClient.SqlCommand[] CommandCollection { + get { + if ((this._commandCollection == null)) { + this.InitCommandCollection(); + } + return this._commandCollection; + } + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + public bool ClearBeforeFill { + get { + return this._clearBeforeFill; + } + set { + this._clearBeforeFill = value; + } + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + private void InitAdapter() { + this._adapter = new System.Data.SqlClient.SqlDataAdapter(); + System.Data.Common.DataTableMapping tableMapping = new System.Data.Common.DataTableMapping(); + tableMapping.SourceTable = "Table"; + tableMapping.DataSetTable = "Employees"; + tableMapping.ColumnMappings.Add("EmployeeID", "EmployeeID"); + tableMapping.ColumnMappings.Add("LastName", "LastName"); + tableMapping.ColumnMappings.Add("FirstName", "FirstName"); + tableMapping.ColumnMappings.Add("Title", "Title"); + tableMapping.ColumnMappings.Add("Photo", "Photo"); + tableMapping.ColumnMappings.Add("TagID", "TagID"); + this._adapter.TableMappings.Add(tableMapping); + this._adapter.DeleteCommand = new System.Data.SqlClient.SqlCommand(); + this._adapter.DeleteCommand.Connection = this.Connection; + this._adapter.DeleteCommand.CommandText = @"DELETE FROM [dbo].[Employees] WHERE (([EmployeeID] = @Original_EmployeeID) AND ([LastName] = @Original_LastName) AND ([FirstName] = @Original_FirstName) AND ((@IsNull_Title = 1 AND [Title] IS NULL) OR ([Title] = @Original_Title)) AND ((@IsNull_TagID = 1 AND [TagID] IS NULL) OR ([TagID] = @Original_TagID)))"; + this._adapter.DeleteCommand.CommandType = System.Data.CommandType.Text; + this._adapter.DeleteCommand.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_EmployeeID", System.Data.SqlDbType.Int, 0, System.Data.ParameterDirection.Input, 0, 0, "EmployeeID", System.Data.DataRowVersion.Original, false, null, "", "", "")); + this._adapter.DeleteCommand.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_LastName", System.Data.SqlDbType.NVarChar, 0, System.Data.ParameterDirection.Input, 0, 0, "LastName", System.Data.DataRowVersion.Original, false, null, "", "", "")); + this._adapter.DeleteCommand.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_FirstName", System.Data.SqlDbType.NVarChar, 0, System.Data.ParameterDirection.Input, 0, 0, "FirstName", System.Data.DataRowVersion.Original, false, null, "", "", "")); + this._adapter.DeleteCommand.Parameters.Add(new System.Data.SqlClient.SqlParameter("@IsNull_Title", System.Data.SqlDbType.Int, 0, System.Data.ParameterDirection.Input, 0, 0, "Title", System.Data.DataRowVersion.Original, true, null, "", "", "")); + this._adapter.DeleteCommand.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_Title", System.Data.SqlDbType.NVarChar, 0, System.Data.ParameterDirection.Input, 0, 0, "Title", System.Data.DataRowVersion.Original, false, null, "", "", "")); + this._adapter.DeleteCommand.Parameters.Add(new System.Data.SqlClient.SqlParameter("@IsNull_TagID", System.Data.SqlDbType.Int, 0, System.Data.ParameterDirection.Input, 0, 0, "TagID", System.Data.DataRowVersion.Original, true, null, "", "", "")); + this._adapter.DeleteCommand.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_TagID", System.Data.SqlDbType.NChar, 0, System.Data.ParameterDirection.Input, 0, 0, "TagID", System.Data.DataRowVersion.Original, false, null, "", "", "")); + this._adapter.InsertCommand = new System.Data.SqlClient.SqlCommand(); + this._adapter.InsertCommand.Connection = this.Connection; + this._adapter.InsertCommand.CommandText = "INSERT INTO [dbo].[Employees] ([LastName], [FirstName], [Title], [Photo], [TagID]" + + ") VALUES (@LastName, @FirstName, @Title, @Photo, @TagID);\r\nSELECT EmployeeID, La" + + "stName, FirstName, Title, Photo, TagID FROM Employees WHERE (EmployeeID = SCOPE_" + + "IDENTITY())"; + this._adapter.InsertCommand.CommandType = System.Data.CommandType.Text; + this._adapter.InsertCommand.Parameters.Add(new System.Data.SqlClient.SqlParameter("@LastName", System.Data.SqlDbType.NVarChar, 0, System.Data.ParameterDirection.Input, 0, 0, "LastName", System.Data.DataRowVersion.Current, false, null, "", "", "")); + this._adapter.InsertCommand.Parameters.Add(new System.Data.SqlClient.SqlParameter("@FirstName", System.Data.SqlDbType.NVarChar, 0, System.Data.ParameterDirection.Input, 0, 0, "FirstName", System.Data.DataRowVersion.Current, false, null, "", "", "")); + this._adapter.InsertCommand.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Title", System.Data.SqlDbType.NVarChar, 0, System.Data.ParameterDirection.Input, 0, 0, "Title", System.Data.DataRowVersion.Current, false, null, "", "", "")); + this._adapter.InsertCommand.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Photo", System.Data.SqlDbType.Image, 0, System.Data.ParameterDirection.Input, 0, 0, "Photo", System.Data.DataRowVersion.Current, false, null, "", "", "")); + this._adapter.InsertCommand.Parameters.Add(new System.Data.SqlClient.SqlParameter("@TagID", System.Data.SqlDbType.NChar, 0, System.Data.ParameterDirection.Input, 0, 0, "TagID", System.Data.DataRowVersion.Current, false, null, "", "", "")); + this._adapter.UpdateCommand = new System.Data.SqlClient.SqlCommand(); + this._adapter.UpdateCommand.Connection = this.Connection; + this._adapter.UpdateCommand.CommandText = @"UPDATE [dbo].[Employees] SET [LastName] = @LastName, [FirstName] = @FirstName, [Title] = @Title, [Photo] = @Photo, [TagID] = @TagID WHERE (([EmployeeID] = @Original_EmployeeID) AND ([LastName] = @Original_LastName) AND ([FirstName] = @Original_FirstName) AND ((@IsNull_Title = 1 AND [Title] IS NULL) OR ([Title] = @Original_Title)) AND ((@IsNull_TagID = 1 AND [TagID] IS NULL) OR ([TagID] = @Original_TagID))); +SELECT EmployeeID, LastName, FirstName, Title, Photo, TagID FROM Employees WHERE (EmployeeID = @EmployeeID)"; + this._adapter.UpdateCommand.CommandType = System.Data.CommandType.Text; + this._adapter.UpdateCommand.Parameters.Add(new System.Data.SqlClient.SqlParameter("@LastName", System.Data.SqlDbType.NVarChar, 0, System.Data.ParameterDirection.Input, 0, 0, "LastName", System.Data.DataRowVersion.Current, false, null, "", "", "")); + this._adapter.UpdateCommand.Parameters.Add(new System.Data.SqlClient.SqlParameter("@FirstName", System.Data.SqlDbType.NVarChar, 0, System.Data.ParameterDirection.Input, 0, 0, "FirstName", System.Data.DataRowVersion.Current, false, null, "", "", "")); + this._adapter.UpdateCommand.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Title", System.Data.SqlDbType.NVarChar, 0, System.Data.ParameterDirection.Input, 0, 0, "Title", System.Data.DataRowVersion.Current, false, null, "", "", "")); + this._adapter.UpdateCommand.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Photo", System.Data.SqlDbType.Image, 0, System.Data.ParameterDirection.Input, 0, 0, "Photo", System.Data.DataRowVersion.Current, false, null, "", "", "")); + this._adapter.UpdateCommand.Parameters.Add(new System.Data.SqlClient.SqlParameter("@TagID", System.Data.SqlDbType.NChar, 0, System.Data.ParameterDirection.Input, 0, 0, "TagID", System.Data.DataRowVersion.Current, false, null, "", "", "")); + this._adapter.UpdateCommand.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_EmployeeID", System.Data.SqlDbType.Int, 0, System.Data.ParameterDirection.Input, 0, 0, "EmployeeID", System.Data.DataRowVersion.Original, false, null, "", "", "")); + this._adapter.UpdateCommand.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_LastName", System.Data.SqlDbType.NVarChar, 0, System.Data.ParameterDirection.Input, 0, 0, "LastName", System.Data.DataRowVersion.Original, false, null, "", "", "")); + this._adapter.UpdateCommand.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_FirstName", System.Data.SqlDbType.NVarChar, 0, System.Data.ParameterDirection.Input, 0, 0, "FirstName", System.Data.DataRowVersion.Original, false, null, "", "", "")); + this._adapter.UpdateCommand.Parameters.Add(new System.Data.SqlClient.SqlParameter("@IsNull_Title", System.Data.SqlDbType.Int, 0, System.Data.ParameterDirection.Input, 0, 0, "Title", System.Data.DataRowVersion.Original, true, null, "", "", "")); + this._adapter.UpdateCommand.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_Title", System.Data.SqlDbType.NVarChar, 0, System.Data.ParameterDirection.Input, 0, 0, "Title", System.Data.DataRowVersion.Original, false, null, "", "", "")); + this._adapter.UpdateCommand.Parameters.Add(new System.Data.SqlClient.SqlParameter("@IsNull_TagID", System.Data.SqlDbType.Int, 0, System.Data.ParameterDirection.Input, 0, 0, "TagID", System.Data.DataRowVersion.Original, true, null, "", "", "")); + this._adapter.UpdateCommand.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_TagID", System.Data.SqlDbType.NChar, 0, System.Data.ParameterDirection.Input, 0, 0, "TagID", System.Data.DataRowVersion.Original, false, null, "", "", "")); + this._adapter.UpdateCommand.Parameters.Add(new System.Data.SqlClient.SqlParameter("@EmployeeID", System.Data.SqlDbType.Int, 4, System.Data.ParameterDirection.Input, 0, 0, "EmployeeID", System.Data.DataRowVersion.Current, false, null, "", "", "")); + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + private void InitConnection() { + this._connection = new System.Data.SqlClient.SqlConnection(); + this._connection.ConnectionString = global::Attendance_CS.Properties.Settings.Default.NorthwindConnectionString; + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + private void InitCommandCollection() { + this._commandCollection = new System.Data.SqlClient.SqlCommand[1]; + this._commandCollection[0] = new System.Data.SqlClient.SqlCommand(); + this._commandCollection[0].Connection = this.Connection; + this._commandCollection[0].CommandText = "SELECT EmployeeID, LastName, FirstName, Title, Photo, TagID FROM dbo.Employees"; + this._commandCollection[0].CommandType = System.Data.CommandType.Text; + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + [System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")] + [System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Fill, true)] + public virtual int Fill(NorthwindDataSet.EmployeesDataTable dataTable) { + this.Adapter.SelectCommand = this.CommandCollection[0]; + if ((this.ClearBeforeFill == true)) { + dataTable.Clear(); + } + int returnValue = this.Adapter.Fill(dataTable); + return returnValue; + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + [System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")] + [System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Select, true)] + public virtual NorthwindDataSet.EmployeesDataTable GetData() { + this.Adapter.SelectCommand = this.CommandCollection[0]; + NorthwindDataSet.EmployeesDataTable dataTable = new NorthwindDataSet.EmployeesDataTable(); + this.Adapter.Fill(dataTable); + return dataTable; + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + [System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")] + public virtual int Update(NorthwindDataSet.EmployeesDataTable dataTable) { + return this.Adapter.Update(dataTable); + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + [System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")] + public virtual int Update(NorthwindDataSet dataSet) { + return this.Adapter.Update(dataSet, "Employees"); + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + [System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")] + public virtual int Update(System.Data.DataRow dataRow) { + return this.Adapter.Update(new System.Data.DataRow[] { + dataRow}); + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + [System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")] + public virtual int Update(System.Data.DataRow[] dataRows) { + return this.Adapter.Update(dataRows); + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + [System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")] + [System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Delete, true)] + public virtual int Delete(int Original_EmployeeID, string Original_LastName, string Original_FirstName, string Original_Title, string Original_TagID) { + this.Adapter.DeleteCommand.Parameters[0].Value = ((int)(Original_EmployeeID)); + if ((Original_LastName == null)) { + throw new System.ArgumentNullException("Original_LastName"); + } + else { + this.Adapter.DeleteCommand.Parameters[1].Value = ((string)(Original_LastName)); + } + if ((Original_FirstName == null)) { + throw new System.ArgumentNullException("Original_FirstName"); + } + else { + this.Adapter.DeleteCommand.Parameters[2].Value = ((string)(Original_FirstName)); + } + if ((Original_Title == null)) { + this.Adapter.DeleteCommand.Parameters[3].Value = ((object)(1)); + this.Adapter.DeleteCommand.Parameters[4].Value = System.DBNull.Value; + } + else { + this.Adapter.DeleteCommand.Parameters[3].Value = ((object)(0)); + this.Adapter.DeleteCommand.Parameters[4].Value = ((string)(Original_Title)); + } + if ((Original_TagID == null)) { + this.Adapter.DeleteCommand.Parameters[5].Value = ((object)(1)); + this.Adapter.DeleteCommand.Parameters[6].Value = System.DBNull.Value; + } + else { + this.Adapter.DeleteCommand.Parameters[5].Value = ((object)(0)); + this.Adapter.DeleteCommand.Parameters[6].Value = ((string)(Original_TagID)); + } + System.Data.ConnectionState previousConnectionState = this.Adapter.DeleteCommand.Connection.State; + if (((this.Adapter.DeleteCommand.Connection.State & System.Data.ConnectionState.Open) + != System.Data.ConnectionState.Open)) { + this.Adapter.DeleteCommand.Connection.Open(); + } + try { + int returnValue = this.Adapter.DeleteCommand.ExecuteNonQuery(); + return returnValue; + } + finally { + if ((previousConnectionState == System.Data.ConnectionState.Closed)) { + this.Adapter.DeleteCommand.Connection.Close(); + } + } + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + [System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")] + [System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Insert, true)] + public virtual int Insert(string LastName, string FirstName, string Title, byte[] Photo, string TagID) { + if ((LastName == null)) { + throw new System.ArgumentNullException("LastName"); + } + else { + this.Adapter.InsertCommand.Parameters[0].Value = ((string)(LastName)); + } + if ((FirstName == null)) { + throw new System.ArgumentNullException("FirstName"); + } + else { + this.Adapter.InsertCommand.Parameters[1].Value = ((string)(FirstName)); + } + if ((Title == null)) { + this.Adapter.InsertCommand.Parameters[2].Value = System.DBNull.Value; + } + else { + this.Adapter.InsertCommand.Parameters[2].Value = ((string)(Title)); + } + if ((Photo == null)) { + this.Adapter.InsertCommand.Parameters[3].Value = System.DBNull.Value; + } + else { + this.Adapter.InsertCommand.Parameters[3].Value = ((byte[])(Photo)); + } + if ((TagID == null)) { + this.Adapter.InsertCommand.Parameters[4].Value = System.DBNull.Value; + } + else { + this.Adapter.InsertCommand.Parameters[4].Value = ((string)(TagID)); + } + System.Data.ConnectionState previousConnectionState = this.Adapter.InsertCommand.Connection.State; + if (((this.Adapter.InsertCommand.Connection.State & System.Data.ConnectionState.Open) + != System.Data.ConnectionState.Open)) { + this.Adapter.InsertCommand.Connection.Open(); + } + try { + int returnValue = this.Adapter.InsertCommand.ExecuteNonQuery(); + return returnValue; + } + finally { + if ((previousConnectionState == System.Data.ConnectionState.Closed)) { + this.Adapter.InsertCommand.Connection.Close(); + } + } + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + [System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")] + [System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Update, true)] + public virtual int Update(string LastName, string FirstName, string Title, byte[] Photo, string TagID, int Original_EmployeeID, string Original_LastName, string Original_FirstName, string Original_Title, string Original_TagID, int EmployeeID) { + if ((LastName == null)) { + throw new System.ArgumentNullException("LastName"); + } + else { + this.Adapter.UpdateCommand.Parameters[0].Value = ((string)(LastName)); + } + if ((FirstName == null)) { + throw new System.ArgumentNullException("FirstName"); + } + else { + this.Adapter.UpdateCommand.Parameters[1].Value = ((string)(FirstName)); + } + if ((Title == null)) { + this.Adapter.UpdateCommand.Parameters[2].Value = System.DBNull.Value; + } + else { + this.Adapter.UpdateCommand.Parameters[2].Value = ((string)(Title)); + } + if ((Photo == null)) { + this.Adapter.UpdateCommand.Parameters[3].Value = System.DBNull.Value; + } + else { + this.Adapter.UpdateCommand.Parameters[3].Value = ((byte[])(Photo)); + } + if ((TagID == null)) { + this.Adapter.UpdateCommand.Parameters[4].Value = System.DBNull.Value; + } + else { + this.Adapter.UpdateCommand.Parameters[4].Value = ((string)(TagID)); + } + this.Adapter.UpdateCommand.Parameters[5].Value = ((int)(Original_EmployeeID)); + if ((Original_LastName == null)) { + throw new System.ArgumentNullException("Original_LastName"); + } + else { + this.Adapter.UpdateCommand.Parameters[6].Value = ((string)(Original_LastName)); + } + if ((Original_FirstName == null)) { + throw new System.ArgumentNullException("Original_FirstName"); + } + else { + this.Adapter.UpdateCommand.Parameters[7].Value = ((string)(Original_FirstName)); + } + if ((Original_Title == null)) { + this.Adapter.UpdateCommand.Parameters[8].Value = ((object)(1)); + this.Adapter.UpdateCommand.Parameters[9].Value = System.DBNull.Value; + } + else { + this.Adapter.UpdateCommand.Parameters[8].Value = ((object)(0)); + this.Adapter.UpdateCommand.Parameters[9].Value = ((string)(Original_Title)); + } + if ((Original_TagID == null)) { + this.Adapter.UpdateCommand.Parameters[10].Value = ((object)(1)); + this.Adapter.UpdateCommand.Parameters[11].Value = System.DBNull.Value; + } + else { + this.Adapter.UpdateCommand.Parameters[10].Value = ((object)(0)); + this.Adapter.UpdateCommand.Parameters[11].Value = ((string)(Original_TagID)); + } + this.Adapter.UpdateCommand.Parameters[12].Value = ((int)(EmployeeID)); + System.Data.ConnectionState previousConnectionState = this.Adapter.UpdateCommand.Connection.State; + if (((this.Adapter.UpdateCommand.Connection.State & System.Data.ConnectionState.Open) + != System.Data.ConnectionState.Open)) { + this.Adapter.UpdateCommand.Connection.Open(); + } + try { + int returnValue = this.Adapter.UpdateCommand.ExecuteNonQuery(); + return returnValue; + } + finally { + if ((previousConnectionState == System.Data.ConnectionState.Closed)) { + this.Adapter.UpdateCommand.Connection.Close(); + } + } + } + } +} + +#pragma warning restore 1591 \ No newline at end of file diff --git a/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/NorthwindDataSet.xsc b/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/NorthwindDataSet.xsc new file mode 100644 index 0000000..2dbd3f0 --- /dev/null +++ b/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/NorthwindDataSet.xsc @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/NorthwindDataSet.xsd b/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/NorthwindDataSet.xsd new file mode 100644 index 0000000..0874e01 --- /dev/null +++ b/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/NorthwindDataSet.xsd @@ -0,0 +1,159 @@ + + + + + + + + + + + + + + + + DELETE FROM [dbo].[Employees] WHERE (([EmployeeID] = @Original_EmployeeID) AND ([LastName] = @Original_LastName) AND ([FirstName] = @Original_FirstName) AND ((@IsNull_Title = 1 AND [Title] IS NULL) OR ([Title] = @Original_Title)) AND ((@IsNull_TagID = 1 AND [TagID] IS NULL) OR ([TagID] = @Original_TagID))) + + + + + + + + + + + + + + + + + + + + + INSERT INTO [dbo].[Employees] ([LastName], [FirstName], [Title], [Photo], [TagID]) VALUES (@LastName, @FirstName, @Title, @Photo, @TagID); +SELECT EmployeeID, LastName, FirstName, Title, Photo, TagID FROM Employees WHERE (EmployeeID = SCOPE_IDENTITY()) + + + + + + + + + + + + + + + + + SELECT EmployeeID, LastName, FirstName, Title, Photo, TagID FROM dbo.Employees + + + + + + + UPDATE [dbo].[Employees] SET [LastName] = @LastName, [FirstName] = @FirstName, [Title] = @Title, [Photo] = @Photo, [TagID] = @TagID WHERE (([EmployeeID] = @Original_EmployeeID) AND ([LastName] = @Original_LastName) AND ([FirstName] = @Original_FirstName) AND ((@IsNull_Title = 1 AND [Title] IS NULL) OR ([Title] = @Original_Title)) AND ((@IsNull_TagID = 1 AND [TagID] IS NULL) OR ([TagID] = @Original_TagID))); +SELECT EmployeeID, LastName, FirstName, Title, Photo, TagID FROM Employees WHERE (EmployeeID = @EmployeeID) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/NorthwindDataSet.xss b/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/NorthwindDataSet.xss new file mode 100644 index 0000000..5f28270 --- /dev/null +++ b/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/NorthwindDataSet.xss @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/Program.cs b/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/Program.cs new file mode 100644 index 0000000..17e1cd8 --- /dev/null +++ b/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/Program.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace Attendance_CS +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form1()); + } + } +} \ No newline at end of file diff --git a/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/Properties/AssemblyInfo.cs b/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..072f393 --- /dev/null +++ b/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Attendance_CS")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Attendance_CS")] +[assembly: AssemblyCopyright("Copyright © 2006")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("dd8cf082-2d9a-460a-b23d-d31c000121e5")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/Properties/Resources.Designer.cs b/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/Properties/Resources.Designer.cs new file mode 100644 index 0000000..518af26 --- /dev/null +++ b/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Attendance_CS.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Attendance_CS.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/Properties/Resources.resx b/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/Properties/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/Properties/Settings.Designer.cs b/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/Properties/Settings.Designer.cs new file mode 100644 index 0000000..6feca3c --- /dev/null +++ b/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/Properties/Settings.Designer.cs @@ -0,0 +1,36 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Attendance_CS.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + + [global::System.Configuration.ApplicationScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.SpecialSettingAttribute(global::System.Configuration.SpecialSetting.ConnectionString)] + [global::System.Configuration.DefaultSettingValueAttribute("Data Source=.\\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True")] + public string NorthwindConnectionString { + get { + return ((string)(this["NorthwindConnectionString"])); + } + } + } +} diff --git a/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/Properties/Settings.settings b/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/Properties/Settings.settings new file mode 100644 index 0000000..4520de8 --- /dev/null +++ b/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/Properties/Settings.settings @@ -0,0 +1,14 @@ + + + + + + <?xml version="1.0" encoding="utf-16"?> +<SerializableConnectionString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <ConnectionString>Data Source=.\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True</ConnectionString> + <ProviderName>System.Data.SqlClient</ProviderName> +</SerializableConnectionString> + Data Source=.\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True + + + \ No newline at end of file diff --git a/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/app.config b/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/app.config new file mode 100644 index 0000000..3be77bb --- /dev/null +++ b/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/app.config @@ -0,0 +1,10 @@ + + + + + + + + \ No newline at end of file diff --git a/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/bin/Debug/Attendance_CS.exe b/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/bin/Debug/Attendance_CS.exe new file mode 100644 index 0000000000000000000000000000000000000000..3c33d6c612a1bb19a2fe8006bcb2eb7315da4853 GIT binary patch literal 61440 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 LWr6=UE%3hpre%ye literal 0 HcmV?d00001 diff --git a/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/bin/Debug/Attendance_CS.exe.config b/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/bin/Debug/Attendance_CS.exe.config new file mode 100644 index 0000000..3be77bb --- /dev/null +++ b/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/bin/Debug/Attendance_CS.exe.config @@ -0,0 +1,10 @@ + + + + + + + + \ No newline at end of file diff --git a/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/bin/Debug/Attendance_CS.pdb b/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/bin/Debug/Attendance_CS.pdb new file mode 100644 index 0000000000000000000000000000000000000000..1743d47cb2af3938b8c856f26f83958cb923d8be GIT binary patch literal 75264 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 ZQ<9w;*r|b?8rZ3Uof_DwfiFM<{|6JLkYxY> literal 0 HcmV?d00001 diff --git a/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/bin/Debug/Attendance_CS.vshost.exe b/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/bin/Debug/Attendance_CS.vshost.exe new file mode 100644 index 0000000000000000000000000000000000000000..ce3f102c36be07551ba7c7fad64c8b24709bdb91 GIT binary patch literal 5632 zcmeHLX>3&26+Umg;MiccvX$*QEU{T$9osBr9ou8T!CO4GX{f1rGjlzDVoO|!Prgq~qltDz9r~?B;$Ix=|OT07mVmN>1Z}RE2drlP`Q)*5X zG<6uR8guNZqj#!d-Lh;?4GGnWTdHBHf%>4@X-9-MYENnj=gbf*dm1jLN#cftptQL=|aWNfvWlQP?*hWf2t+?Lo}%k$q{6hp9nL zgjRO$01v%$;r&I$YdXI8&)FG$2N&cn{PM~EIUlboSblZ6|HQ<{cD(w-H$Pi{GB!Q7 z|H6B@KUnhF)GHNJoBn(6mQTf)Ia@0-J4*9+&;GPbIdCa>RcoH#{Qln`m|0=hKQWNC z!#y@@!#j(1Un%|Q)aTD`kDfW+w4v>(rqa#M$bmyo{cgLmeRW{M$FpYm3da-W&f8x& z0nLKxvau(Eo?AGHIeD_NCo>0YuLwR+p^ze1#Ifrt(TcT2#Y;+-Fe_7rvIeo7wS(yA zX#bP}I_Nou6?Iv{Lq2$0&05=B9YEWMekRLTn0AN-P|#J@A{QJ}x~7y8++mAT5@Rw| z@Q22sG9U6Nxk<0GsfFs1h&|K+JVrkSo|br>`a#cB7|RvrMHFKBr(Uw zl5-@k@UiBtzD8d*9q>KoTQAp`O~3WAt@psmrLqha^n)4xjBMH^@f9F@n1~ujPf^Cu z1X8hoxc8RIqmNGBB-e08_V!a4+g72m#M~*saoB2`Xc84k`hJPumRK&aTH=EeACjm` zG$d}7*dy^#;3Rrn;NPL;}jK9&ZX=lbcdYSfRoToq2>!3ASPn#8u z^5_H5<0%vLR4N9}qQ$`Zh^$7XR0mux@nJd(I!OC~-=*IJ!;-UI&T=Kai#`PZNxBT& zOIH;?y#RZey+d~b$L>D*2U4BLHo7PZt&wf=(v$RGXdorBqSlVYO|go)+z#9IG|?@n z%JQ6^2HUVasx`un?b_|0)?&DE-3)s1h+%8%Ad2nU;Mif|y42~0ZO1f16zp+5(Mk28 zEh6lZ7WQn1YIVa(4rq;W%QHHKR%v&}3{yBk;dB{LLCFE;>z)xZOvCFb_i!dcaZe1+ z7VReV8n#8{t}8l2X3u)jvj&QWL{kF+Vd_0WBWeu|C7jb5g=@zhHd-g*o}-(Cj2hjF z#`S2LwxI3_6TXN_8!^$tUW;&C*dJ1wvR7@j+fFBZw=LZqR*HQcc5v8%N;}r$7|{;z zRXI0nx6BteC@kn? zx7}3wC`~t$^_JixeXZ}r;oYm_b%)++Tlw0>+HX%C`+@-Ake_bp%{*%iWKZ&%~jNE(TX9o*6g%-Rh7EHhP*OlHTd*KJ4?D*a4-;jvD#}$T zOIQn=@p>DHr7y*I8$Y743XSBB{D^C1B}AnPX@5AP4(=bd(sp9DBln=DmYb$353H*? z$g9&OB6vF%DKvX%LSbW(nz&Qd#HFe-r=+-e5z#jlnlL1prkZH9Lb+*IH9O7$Qj&K* zi1dqo@D0qF`iTGURq zl$y==AvIxC2iL{8P9EfJ^b+N0<`}+a;gbg`1N`W1H1*>kDp+;uS4JU@0csxjmC)CT zpTKMnR`9n2umfBdeGU9>R4z4m@TcTs(x)CoK$mlQycQmW;RnyOu?i1|k+nM%lbG(k zU)oNsIsglXDI;B4QqNAHkZxdK@%Jm&3M+mh+d;;>sRJgjdxC zjKDHcB4+hTNzOL=or(eXIE%yQ&!joDM74@5pgblnV%bN-JGR6=O_ohmcu4Tp%XjSM5Nh|8#A5K!MWx={dKuZ TBcLY!&!}P9UAq3eeA)j4ZC9R* literal 0 HcmV?d00001 diff --git a/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/bin/Debug/Attendance_CS.vshost.exe.config b/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/bin/Debug/Attendance_CS.vshost.exe.config new file mode 100644 index 0000000..3be77bb --- /dev/null +++ b/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/bin/Debug/Attendance_CS.vshost.exe.config @@ -0,0 +1,10 @@ + + + + + + + + \ No newline at end of file diff --git a/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/obj/Attendance_CS.csproj.FileList.txt b/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/obj/Attendance_CS.csproj.FileList.txt new file mode 100644 index 0000000..a5163d6 --- /dev/null +++ b/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/obj/Attendance_CS.csproj.FileList.txt @@ -0,0 +1,9 @@ +bin\Debug\Attendance_CS.exe.config +bin\Debug\Attendance_CS.exe +bin\Debug\Attendance_CS.pdb +obj\Debug\ResolveAssemblyReference.cache +obj\Debug\Attendance_CS.Form1.resources +obj\Debug\Attendance_CS.Properties.Resources.resources +obj\Debug\Attendance_CS.csproj.GenerateResource.Cache +obj\Debug\Attendance_CS.exe +obj\Debug\Attendance_CS.pdb diff --git a/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/obj/Debug/Attendance_CS.Form1.resources b/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/obj/Debug/Attendance_CS.Form1.resources new file mode 100644 index 0000000000000000000000000000000000000000..801df18ff7bf771bb222743d2ae75c449b7aade7 GIT binary patch literal 5130 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 literal 0 HcmV?d00001 diff --git a/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/obj/Debug/Attendance_CS.exe b/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/obj/Debug/Attendance_CS.exe new file mode 100644 index 0000000000000000000000000000000000000000..3c33d6c612a1bb19a2fe8006bcb2eb7315da4853 GIT binary patch literal 61440 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 LWr6=UE%3hpre%ye literal 0 HcmV?d00001 diff --git a/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/obj/Debug/Attendance_CS.pdb b/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/obj/Debug/Attendance_CS.pdb new file mode 100644 index 0000000000000000000000000000000000000000..1743d47cb2af3938b8c856f26f83958cb923d8be GIT binary patch literal 75264 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 ZQ<9w;*r|b?8rZ3Uof_DwfiFM<{|6JLkYxY> literal 0 HcmV?d00001 diff --git a/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/obj/Debug/TempPE/NorthwindDataSet.Designer.cs.dll b/Chapter05(RFID)/Attendance_Parallax_CS/Attendance_CS/obj/Debug/TempPE/NorthwindDataSet.Designer.cs.dll new file mode 100644 index 0000000000000000000000000000000000000000..70221fa085a28884a25c5a4b5fa4fbf9e20d96b4 GIT binary patch literal 40960 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 literal 0 HcmV?d00001 diff --git a/Chapter05(RFID)/Attendance_Phidget/Attendance.vbproj b/Chapter05(RFID)/Attendance_Phidget/Attendance.vbproj new file mode 100644 index 0000000..58887a7 --- /dev/null +++ b/Chapter05(RFID)/Attendance_Phidget/Attendance.vbproj @@ -0,0 +1,137 @@ + + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {D86B83B8-5886-4CB1-BCAA-6DD95D8337D7} + WinExe + Attendance.My.MyApplication + Attendance + Attendance + WindowsForms + + + true + full + true + true + bin\Debug\ + Attendance.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + Attendance.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + False + ..\..\..\..\..\..\Program Files\Phidgets\PhidgetsNET.dll + + + + + + + + + + + + + + + + + + + + + Form + + + Form1.vb + Form + + + Form2.vb + + + Form + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + True + True + NorthwindDataSet.xsd + + + + + Designer + Form1.vb + + + Designer + Form2.vb + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + NorthwindDataSet.xsd + + + MSDataSetGenerator + NorthwindDataSet.Designer.vb + Designer + + + NorthwindDataSet.xsd + + + + + \ No newline at end of file diff --git a/Chapter05(RFID)/Attendance_Phidget/Attendance.vbproj.user b/Chapter05(RFID)/Attendance_Phidget/Attendance.vbproj.user new file mode 100644 index 0000000..a1d742b --- /dev/null +++ b/Chapter05(RFID)/Attendance_Phidget/Attendance.vbproj.user @@ -0,0 +1,5 @@ + + + ProjectFiles + + \ No newline at end of file diff --git a/Chapter05(RFID)/Attendance_Phidget/Form1.Designer.vb b/Chapter05(RFID)/Attendance_Phidget/Form1.Designer.vb new file mode 100644 index 0000000..fbccbea --- /dev/null +++ b/Chapter05(RFID)/Attendance_Phidget/Form1.Designer.vb @@ -0,0 +1,481 @@ + _ +Partial Class Form1 + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.components = New System.ComponentModel.Container + Dim EmployeeIDLabel As System.Windows.Forms.Label + Dim LastNameLabel As System.Windows.Forms.Label + Dim FirstNameLabel As System.Windows.Forms.Label + Dim TitleLabel As System.Windows.Forms.Label + Dim PhotoLabel As System.Windows.Forms.Label + Dim TagIDLabel As System.Windows.Forms.Label + Dim Label2 As System.Windows.Forms.Label + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(Form1)) + Me.EmployeeIDLabel1 = New System.Windows.Forms.Label + Me.GroupBox1 = New System.Windows.Forms.GroupBox + Me.btnDeassign = New System.Windows.Forms.Button + Me.txtEmployeeID = New System.Windows.Forms.TextBox + Me.btnFind = New System.Windows.Forms.Button + Me.btnAssign = New System.Windows.Forms.Button + Me.txtTagID = New System.Windows.Forms.TextBox + Me.Label1 = New System.Windows.Forms.Label + Me.NorthwindDataSet = New Attendance.NorthwindDataSet + Me.EmployeesBindingSource = New System.Windows.Forms.BindingSource(Me.components) + Me.EmployeesTableAdapter = New Attendance.NorthwindDataSetTableAdapters.EmployeesTableAdapter + Me.EmployeesBindingNavigator = New System.Windows.Forms.BindingNavigator(Me.components) + Me.BindingNavigatorAddNewItem = New System.Windows.Forms.ToolStripButton + Me.BindingNavigatorCountItem = New System.Windows.Forms.ToolStripLabel + Me.BindingNavigatorDeleteItem = New System.Windows.Forms.ToolStripButton + Me.BindingNavigatorMoveFirstItem = New System.Windows.Forms.ToolStripButton + Me.BindingNavigatorMovePreviousItem = New System.Windows.Forms.ToolStripButton + Me.BindingNavigatorSeparator = New System.Windows.Forms.ToolStripSeparator + Me.BindingNavigatorPositionItem = New System.Windows.Forms.ToolStripTextBox + Me.BindingNavigatorSeparator1 = New System.Windows.Forms.ToolStripSeparator + Me.BindingNavigatorMoveNextItem = New System.Windows.Forms.ToolStripButton + Me.BindingNavigatorMoveLastItem = New System.Windows.Forms.ToolStripButton + Me.BindingNavigatorSeparator2 = New System.Windows.Forms.ToolStripSeparator + Me.EmployeesBindingNavigatorSaveItem = New System.Windows.Forms.ToolStripButton + Me.EmployeeIDLabel2 = New System.Windows.Forms.Label + Me.LastNameTextBox = New System.Windows.Forms.TextBox + Me.FirstNameTextBox = New System.Windows.Forms.TextBox + Me.TitleTextBox = New System.Windows.Forms.TextBox + Me.PhotoPictureBox = New System.Windows.Forms.PictureBox + Me.TagIDLabel1 = New System.Windows.Forms.Label + Me.StatusStrip1 = New System.Windows.Forms.StatusStrip + Me.ToolStripStatusLabel1 = New System.Windows.Forms.ToolStripStatusLabel + Me.Timer1 = New System.Windows.Forms.Timer(Me.components) + EmployeeIDLabel = New System.Windows.Forms.Label + LastNameLabel = New System.Windows.Forms.Label + FirstNameLabel = New System.Windows.Forms.Label + TitleLabel = New System.Windows.Forms.Label + PhotoLabel = New System.Windows.Forms.Label + TagIDLabel = New System.Windows.Forms.Label + Label2 = New System.Windows.Forms.Label + Me.GroupBox1.SuspendLayout() + CType(Me.NorthwindDataSet, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.EmployeesBindingSource, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.EmployeesBindingNavigator, System.ComponentModel.ISupportInitialize).BeginInit() + Me.EmployeesBindingNavigator.SuspendLayout() + CType(Me.PhotoPictureBox, System.ComponentModel.ISupportInitialize).BeginInit() + Me.StatusStrip1.SuspendLayout() + Me.SuspendLayout() + ' + 'EmployeeIDLabel + ' + EmployeeIDLabel.AutoSize = True + EmployeeIDLabel.Location = New System.Drawing.Point(10, 58) + EmployeeIDLabel.Name = "EmployeeIDLabel" + EmployeeIDLabel.Size = New System.Drawing.Size(70, 13) + EmployeeIDLabel.TabIndex = 12 + EmployeeIDLabel.Text = "Employee ID:" + ' + 'LastNameLabel + ' + LastNameLabel.AutoSize = True + LastNameLabel.Location = New System.Drawing.Point(10, 81) + LastNameLabel.Name = "LastNameLabel" + LastNameLabel.Size = New System.Drawing.Size(61, 13) + LastNameLabel.TabIndex = 14 + LastNameLabel.Text = "Last Name:" + ' + 'FirstNameLabel + ' + FirstNameLabel.AutoSize = True + FirstNameLabel.Location = New System.Drawing.Point(10, 107) + FirstNameLabel.Name = "FirstNameLabel" + FirstNameLabel.Size = New System.Drawing.Size(60, 13) + FirstNameLabel.TabIndex = 16 + FirstNameLabel.Text = "First Name:" + ' + 'TitleLabel + ' + TitleLabel.AutoSize = True + TitleLabel.Location = New System.Drawing.Point(10, 133) + TitleLabel.Name = "TitleLabel" + TitleLabel.Size = New System.Drawing.Size(30, 13) + TitleLabel.TabIndex = 18 + TitleLabel.Text = "Title:" + ' + 'PhotoLabel + ' + PhotoLabel.AutoSize = True + PhotoLabel.Location = New System.Drawing.Point(10, 156) + PhotoLabel.Name = "PhotoLabel" + PhotoLabel.Size = New System.Drawing.Size(38, 13) + PhotoLabel.TabIndex = 20 + PhotoLabel.Text = "Photo:" + ' + 'TagIDLabel + ' + TagIDLabel.AutoSize = True + TagIDLabel.Location = New System.Drawing.Point(10, 35) + TagIDLabel.Name = "TagIDLabel" + TagIDLabel.Size = New System.Drawing.Size(43, 13) + TagIDLabel.TabIndex = 22 + TagIDLabel.Text = "Tag ID:" + ' + 'Label2 + ' + Label2.AutoSize = True + Label2.Location = New System.Drawing.Point(5, 104) + Label2.Name = "Label2" + Label2.Size = New System.Drawing.Size(139, 13) + Label2.TabIndex = 13 + Label2.Text = "Search for Employee (by ID)" + ' + 'EmployeeIDLabel1 + ' + Me.EmployeeIDLabel1.Location = New System.Drawing.Point(82, 62) + Me.EmployeeIDLabel1.Name = "EmployeeIDLabel1" + Me.EmployeeIDLabel1.Size = New System.Drawing.Size(100, 23) + Me.EmployeeIDLabel1.TabIndex = 2 + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.btnDeassign) + Me.GroupBox1.Controls.Add(Me.txtEmployeeID) + Me.GroupBox1.Controls.Add(Me.btnFind) + Me.GroupBox1.Controls.Add(Label2) + Me.GroupBox1.Controls.Add(Me.btnAssign) + Me.GroupBox1.Controls.Add(Me.txtTagID) + Me.GroupBox1.Controls.Add(Me.Label1) + Me.GroupBox1.Location = New System.Drawing.Point(224, 34) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(176, 232) + Me.GroupBox1.TabIndex = 11 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Administrator" + ' + 'btnDeassign + ' + Me.btnDeassign.Location = New System.Drawing.Point(5, 189) + Me.btnDeassign.Name = "btnDeassign" + Me.btnDeassign.Size = New System.Drawing.Size(163, 37) + Me.btnDeassign.TabIndex = 19 + Me.btnDeassign.Text = "Deassign Tag from Employee" + Me.btnDeassign.UseVisualStyleBackColor = True + ' + 'txtEmployeeID + ' + Me.txtEmployeeID.Location = New System.Drawing.Point(5, 120) + Me.txtEmployeeID.Name = "txtEmployeeID" + Me.txtEmployeeID.Size = New System.Drawing.Size(103, 20) + Me.txtEmployeeID.TabIndex = 18 + ' + 'btnFind + ' + Me.btnFind.Location = New System.Drawing.Point(114, 118) + Me.btnFind.Name = "btnFind" + Me.btnFind.Size = New System.Drawing.Size(54, 23) + Me.btnFind.TabIndex = 17 + Me.btnFind.Text = "Find" + Me.btnFind.UseVisualStyleBackColor = True + ' + 'btnAssign + ' + Me.btnAssign.Location = New System.Drawing.Point(5, 146) + Me.btnAssign.Name = "btnAssign" + Me.btnAssign.Size = New System.Drawing.Size(163, 37) + Me.btnAssign.TabIndex = 3 + Me.btnAssign.Text = "Assign Tag to Employee" + Me.btnAssign.UseVisualStyleBackColor = True + ' + 'txtTagID + ' + Me.txtTagID.Location = New System.Drawing.Point(6, 32) + Me.txtTagID.Name = "txtTagID" + Me.txtTagID.ReadOnly = True + Me.txtTagID.Size = New System.Drawing.Size(162, 20) + Me.txtTagID.TabIndex = 2 + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.Location = New System.Drawing.Point(3, 16) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(40, 13) + Me.Label1.TabIndex = 1 + Me.Label1.Text = "Tag ID" + ' + 'NorthwindDataSet + ' + Me.NorthwindDataSet.DataSetName = "NorthwindDataSet" + Me.NorthwindDataSet.SchemaSerializationMode = System.Data.SchemaSerializationMode.IncludeSchema + ' + 'EmployeesBindingSource + ' + Me.EmployeesBindingSource.DataMember = "Employees" + Me.EmployeesBindingSource.DataSource = Me.NorthwindDataSet + ' + 'EmployeesTableAdapter + ' + Me.EmployeesTableAdapter.ClearBeforeFill = True + ' + 'EmployeesBindingNavigator + ' + Me.EmployeesBindingNavigator.AddNewItem = Me.BindingNavigatorAddNewItem + Me.EmployeesBindingNavigator.BindingSource = Me.EmployeesBindingSource + Me.EmployeesBindingNavigator.CountItem = Me.BindingNavigatorCountItem + Me.EmployeesBindingNavigator.DeleteItem = Me.BindingNavigatorDeleteItem + Me.EmployeesBindingNavigator.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.BindingNavigatorMoveFirstItem, Me.BindingNavigatorMovePreviousItem, Me.BindingNavigatorSeparator, Me.BindingNavigatorPositionItem, Me.BindingNavigatorCountItem, Me.BindingNavigatorSeparator1, Me.BindingNavigatorMoveNextItem, Me.BindingNavigatorMoveLastItem, Me.BindingNavigatorSeparator2, Me.BindingNavigatorAddNewItem, Me.BindingNavigatorDeleteItem, Me.EmployeesBindingNavigatorSaveItem}) + Me.EmployeesBindingNavigator.Location = New System.Drawing.Point(0, 0) + Me.EmployeesBindingNavigator.MoveFirstItem = Me.BindingNavigatorMoveFirstItem + Me.EmployeesBindingNavigator.MoveLastItem = Me.BindingNavigatorMoveLastItem + Me.EmployeesBindingNavigator.MoveNextItem = Me.BindingNavigatorMoveNextItem + Me.EmployeesBindingNavigator.MovePreviousItem = Me.BindingNavigatorMovePreviousItem + Me.EmployeesBindingNavigator.Name = "EmployeesBindingNavigator" + Me.EmployeesBindingNavigator.PositionItem = Me.BindingNavigatorPositionItem + Me.EmployeesBindingNavigator.Size = New System.Drawing.Size(412, 25) + Me.EmployeesBindingNavigator.TabIndex = 12 + Me.EmployeesBindingNavigator.Text = "BindingNavigator1" + ' + 'BindingNavigatorAddNewItem + ' + Me.BindingNavigatorAddNewItem.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image + Me.BindingNavigatorAddNewItem.Image = CType(resources.GetObject("BindingNavigatorAddNewItem.Image"), System.Drawing.Image) + Me.BindingNavigatorAddNewItem.Name = "BindingNavigatorAddNewItem" + Me.BindingNavigatorAddNewItem.RightToLeftAutoMirrorImage = True + Me.BindingNavigatorAddNewItem.Size = New System.Drawing.Size(23, 22) + Me.BindingNavigatorAddNewItem.Text = "Add new" + ' + 'BindingNavigatorCountItem + ' + Me.BindingNavigatorCountItem.Name = "BindingNavigatorCountItem" + Me.BindingNavigatorCountItem.Size = New System.Drawing.Size(36, 22) + Me.BindingNavigatorCountItem.Text = "of {0}" + Me.BindingNavigatorCountItem.ToolTipText = "Total number of items" + ' + 'BindingNavigatorDeleteItem + ' + Me.BindingNavigatorDeleteItem.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image + Me.BindingNavigatorDeleteItem.Image = CType(resources.GetObject("BindingNavigatorDeleteItem.Image"), System.Drawing.Image) + Me.BindingNavigatorDeleteItem.Name = "BindingNavigatorDeleteItem" + Me.BindingNavigatorDeleteItem.RightToLeftAutoMirrorImage = True + Me.BindingNavigatorDeleteItem.Size = New System.Drawing.Size(23, 22) + Me.BindingNavigatorDeleteItem.Text = "Delete" + ' + 'BindingNavigatorMoveFirstItem + ' + Me.BindingNavigatorMoveFirstItem.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image + Me.BindingNavigatorMoveFirstItem.Image = CType(resources.GetObject("BindingNavigatorMoveFirstItem.Image"), System.Drawing.Image) + Me.BindingNavigatorMoveFirstItem.Name = "BindingNavigatorMoveFirstItem" + Me.BindingNavigatorMoveFirstItem.RightToLeftAutoMirrorImage = True + Me.BindingNavigatorMoveFirstItem.Size = New System.Drawing.Size(23, 22) + Me.BindingNavigatorMoveFirstItem.Text = "Move first" + ' + 'BindingNavigatorMovePreviousItem + ' + Me.BindingNavigatorMovePreviousItem.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image + Me.BindingNavigatorMovePreviousItem.Image = CType(resources.GetObject("BindingNavigatorMovePreviousItem.Image"), System.Drawing.Image) + Me.BindingNavigatorMovePreviousItem.Name = "BindingNavigatorMovePreviousItem" + Me.BindingNavigatorMovePreviousItem.RightToLeftAutoMirrorImage = True + Me.BindingNavigatorMovePreviousItem.Size = New System.Drawing.Size(23, 22) + Me.BindingNavigatorMovePreviousItem.Text = "Move previous" + ' + 'BindingNavigatorSeparator + ' + Me.BindingNavigatorSeparator.Name = "BindingNavigatorSeparator" + Me.BindingNavigatorSeparator.Size = New System.Drawing.Size(6, 25) + ' + 'BindingNavigatorPositionItem + ' + Me.BindingNavigatorPositionItem.AccessibleName = "Position" + Me.BindingNavigatorPositionItem.AutoSize = False + Me.BindingNavigatorPositionItem.Name = "BindingNavigatorPositionItem" + Me.BindingNavigatorPositionItem.Size = New System.Drawing.Size(50, 21) + Me.BindingNavigatorPositionItem.Text = "0" + Me.BindingNavigatorPositionItem.ToolTipText = "Current position" + ' + 'BindingNavigatorSeparator1 + ' + Me.BindingNavigatorSeparator1.Name = "BindingNavigatorSeparator1" + Me.BindingNavigatorSeparator1.Size = New System.Drawing.Size(6, 25) + ' + 'BindingNavigatorMoveNextItem + ' + Me.BindingNavigatorMoveNextItem.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image + Me.BindingNavigatorMoveNextItem.Image = CType(resources.GetObject("BindingNavigatorMoveNextItem.Image"), System.Drawing.Image) + Me.BindingNavigatorMoveNextItem.Name = "BindingNavigatorMoveNextItem" + Me.BindingNavigatorMoveNextItem.RightToLeftAutoMirrorImage = True + Me.BindingNavigatorMoveNextItem.Size = New System.Drawing.Size(23, 22) + Me.BindingNavigatorMoveNextItem.Text = "Move next" + ' + 'BindingNavigatorMoveLastItem + ' + Me.BindingNavigatorMoveLastItem.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image + Me.BindingNavigatorMoveLastItem.Image = CType(resources.GetObject("BindingNavigatorMoveLastItem.Image"), System.Drawing.Image) + Me.BindingNavigatorMoveLastItem.Name = "BindingNavigatorMoveLastItem" + Me.BindingNavigatorMoveLastItem.RightToLeftAutoMirrorImage = True + Me.BindingNavigatorMoveLastItem.Size = New System.Drawing.Size(23, 22) + Me.BindingNavigatorMoveLastItem.Text = "Move last" + ' + 'BindingNavigatorSeparator2 + ' + Me.BindingNavigatorSeparator2.Name = "BindingNavigatorSeparator2" + Me.BindingNavigatorSeparator2.Size = New System.Drawing.Size(6, 25) + ' + 'EmployeesBindingNavigatorSaveItem + ' + Me.EmployeesBindingNavigatorSaveItem.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image + Me.EmployeesBindingNavigatorSaveItem.Image = CType(resources.GetObject("EmployeesBindingNavigatorSaveItem.Image"), System.Drawing.Image) + Me.EmployeesBindingNavigatorSaveItem.Name = "EmployeesBindingNavigatorSaveItem" + Me.EmployeesBindingNavigatorSaveItem.Size = New System.Drawing.Size(23, 22) + Me.EmployeesBindingNavigatorSaveItem.Text = "Save Data" + ' + 'EmployeeIDLabel2 + ' + Me.EmployeeIDLabel2.DataBindings.Add(New System.Windows.Forms.Binding("Text", Me.EmployeesBindingSource, "EmployeeID", True)) + Me.EmployeeIDLabel2.Location = New System.Drawing.Point(86, 58) + Me.EmployeeIDLabel2.Name = "EmployeeIDLabel2" + Me.EmployeeIDLabel2.Size = New System.Drawing.Size(124, 13) + Me.EmployeeIDLabel2.TabIndex = 13 + ' + 'LastNameTextBox + ' + Me.LastNameTextBox.DataBindings.Add(New System.Windows.Forms.Binding("Text", Me.EmployeesBindingSource, "LastName", True)) + Me.LastNameTextBox.Location = New System.Drawing.Point(86, 78) + Me.LastNameTextBox.Name = "LastNameTextBox" + Me.LastNameTextBox.Size = New System.Drawing.Size(124, 20) + Me.LastNameTextBox.TabIndex = 15 + ' + 'FirstNameTextBox + ' + Me.FirstNameTextBox.DataBindings.Add(New System.Windows.Forms.Binding("Text", Me.EmployeesBindingSource, "FirstName", True)) + Me.FirstNameTextBox.Location = New System.Drawing.Point(86, 104) + Me.FirstNameTextBox.Name = "FirstNameTextBox" + Me.FirstNameTextBox.Size = New System.Drawing.Size(124, 20) + Me.FirstNameTextBox.TabIndex = 17 + ' + 'TitleTextBox + ' + Me.TitleTextBox.DataBindings.Add(New System.Windows.Forms.Binding("Text", Me.EmployeesBindingSource, "Title", True)) + Me.TitleTextBox.Location = New System.Drawing.Point(86, 130) + Me.TitleTextBox.Name = "TitleTextBox" + Me.TitleTextBox.Size = New System.Drawing.Size(124, 20) + Me.TitleTextBox.TabIndex = 19 + ' + 'PhotoPictureBox + ' + Me.PhotoPictureBox.DataBindings.Add(New System.Windows.Forms.Binding("Image", Me.EmployeesBindingSource, "Photo", True)) + Me.PhotoPictureBox.Location = New System.Drawing.Point(86, 156) + Me.PhotoPictureBox.Name = "PhotoPictureBox" + Me.PhotoPictureBox.Size = New System.Drawing.Size(95, 110) + Me.PhotoPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage + Me.PhotoPictureBox.TabIndex = 21 + Me.PhotoPictureBox.TabStop = False + ' + 'TagIDLabel1 + ' + Me.TagIDLabel1.DataBindings.Add(New System.Windows.Forms.Binding("Text", Me.EmployeesBindingSource, "TagID", True)) + Me.TagIDLabel1.Location = New System.Drawing.Point(86, 35) + Me.TagIDLabel1.Name = "TagIDLabel1" + Me.TagIDLabel1.Size = New System.Drawing.Size(124, 13) + Me.TagIDLabel1.TabIndex = 23 + ' + 'StatusStrip1 + ' + Me.StatusStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.ToolStripStatusLabel1}) + Me.StatusStrip1.Location = New System.Drawing.Point(0, 277) + Me.StatusStrip1.Name = "StatusStrip1" + Me.StatusStrip1.Size = New System.Drawing.Size(412, 22) + Me.StatusStrip1.TabIndex = 24 + Me.StatusStrip1.Text = "StatusStrip1" + ' + 'ToolStripStatusLabel1 + ' + Me.ToolStripStatusLabel1.Name = "ToolStripStatusLabel1" + Me.ToolStripStatusLabel1.Size = New System.Drawing.Size(111, 17) + Me.ToolStripStatusLabel1.Text = "ToolStripStatusLabel1" + ' + 'Timer1 + ' + ' + 'Form1 + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(412, 299) + Me.Controls.Add(Me.StatusStrip1) + Me.Controls.Add(EmployeeIDLabel) + Me.Controls.Add(Me.EmployeeIDLabel2) + Me.Controls.Add(LastNameLabel) + Me.Controls.Add(Me.LastNameTextBox) + Me.Controls.Add(FirstNameLabel) + Me.Controls.Add(Me.FirstNameTextBox) + Me.Controls.Add(TitleLabel) + Me.Controls.Add(Me.TitleTextBox) + Me.Controls.Add(PhotoLabel) + Me.Controls.Add(Me.PhotoPictureBox) + Me.Controls.Add(TagIDLabel) + Me.Controls.Add(Me.TagIDLabel1) + Me.Controls.Add(Me.EmployeesBindingNavigator) + Me.Controls.Add(Me.GroupBox1) + Me.Controls.Add(Me.EmployeeIDLabel1) + Me.Name = "Form1" + Me.Text = "Attendance System" + Me.GroupBox1.ResumeLayout(False) + Me.GroupBox1.PerformLayout() + CType(Me.NorthwindDataSet, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.EmployeesBindingSource, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.EmployeesBindingNavigator, System.ComponentModel.ISupportInitialize).EndInit() + Me.EmployeesBindingNavigator.ResumeLayout(False) + Me.EmployeesBindingNavigator.PerformLayout() + CType(Me.PhotoPictureBox, System.ComponentModel.ISupportInitialize).EndInit() + Me.StatusStrip1.ResumeLayout(False) + Me.StatusStrip1.PerformLayout() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents EmployeeIDLabel1 As System.Windows.Forms.Label + Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox + Friend WithEvents btnAssign As System.Windows.Forms.Button + Friend WithEvents txtTagID As System.Windows.Forms.TextBox + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents NorthwindDataSet As Attendance.NorthwindDataSet + Friend WithEvents EmployeesBindingSource As System.Windows.Forms.BindingSource + Friend WithEvents EmployeesTableAdapter As Attendance.NorthwindDataSetTableAdapters.EmployeesTableAdapter + Friend WithEvents EmployeesBindingNavigator As System.Windows.Forms.BindingNavigator + Friend WithEvents BindingNavigatorAddNewItem As System.Windows.Forms.ToolStripButton + Friend WithEvents BindingNavigatorCountItem As System.Windows.Forms.ToolStripLabel + Friend WithEvents BindingNavigatorDeleteItem As System.Windows.Forms.ToolStripButton + Friend WithEvents BindingNavigatorMoveFirstItem As System.Windows.Forms.ToolStripButton + Friend WithEvents BindingNavigatorMovePreviousItem As System.Windows.Forms.ToolStripButton + Friend WithEvents BindingNavigatorSeparator As System.Windows.Forms.ToolStripSeparator + Friend WithEvents BindingNavigatorPositionItem As System.Windows.Forms.ToolStripTextBox + Friend WithEvents BindingNavigatorSeparator1 As System.Windows.Forms.ToolStripSeparator + Friend WithEvents BindingNavigatorMoveNextItem As System.Windows.Forms.ToolStripButton + Friend WithEvents BindingNavigatorMoveLastItem As System.Windows.Forms.ToolStripButton + Friend WithEvents BindingNavigatorSeparator2 As System.Windows.Forms.ToolStripSeparator + Friend WithEvents EmployeesBindingNavigatorSaveItem As System.Windows.Forms.ToolStripButton + Friend WithEvents EmployeeIDLabel2 As System.Windows.Forms.Label + Friend WithEvents LastNameTextBox As System.Windows.Forms.TextBox + Friend WithEvents FirstNameTextBox As System.Windows.Forms.TextBox + Friend WithEvents TitleTextBox As System.Windows.Forms.TextBox + Friend WithEvents PhotoPictureBox As System.Windows.Forms.PictureBox + Friend WithEvents TagIDLabel1 As System.Windows.Forms.Label + Friend WithEvents btnFind As System.Windows.Forms.Button + Friend WithEvents txtEmployeeID As System.Windows.Forms.TextBox + Friend WithEvents btnDeassign As System.Windows.Forms.Button + Friend WithEvents StatusStrip1 As System.Windows.Forms.StatusStrip + Friend WithEvents ToolStripStatusLabel1 As System.Windows.Forms.ToolStripStatusLabel + Friend WithEvents Timer1 As System.Windows.Forms.Timer + +End Class diff --git a/Chapter05(RFID)/Attendance_Phidget/Form1.resx b/Chapter05(RFID)/Attendance_Phidget/Form1.resx new file mode 100644 index 0000000..93a07fa --- /dev/null +++ b/Chapter05(RFID)/Attendance_Phidget/Form1.resx @@ -0,0 +1,245 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + 17, 17 + + + 159, 17 + + + 335, 17 + + + 506, 17 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAU1JREFUOE9jYBi0 + 4O4C9v+35nH+vzqH6//FGbz/SXbodaDGP48a//952PD/5GQB0g04P50XbsDBHhHSDTg+SRBoe93/Pw+q + /u9oFydswKWZPP/PTuX7fxKo8Ui/0P993SJAzeX//94r+r++Qeb/qhq5/0srFf/PL1X+P6tIFdPAU0B/ + /nlYD9RUC8SV///cKwHivP9/72b+/3sn+f/f23H//92MAOKQ/5NyNDENONQrDHbu3/ulQI0FQI3ZQI2p + QI0J///digZqDPv/70bQ/3/X/f53peliGrCzXeL/lmap/+vAzpX/v6RC8f/fWzFAjeH/p+Zp/J+QpfW/ + O0P3f3uq/v/mREPCYTIb6E+Qc//dCPjfk6FDWAN6QgH5898NfyD2+9+arE+6Ad3pumD/gnB9nBHpBrQk + GfxviDf8XxNr/L8y2oR0A0hO++RqAAAkI9ieo+gjUwAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAW9JREFUOE+tkk0o + w3EYx3dV3kq5uKBWDiPT8hISMiQsMiEyQ9qBg0hoFwcHUi7kgIvkQFJSTrQ4zdvmrTW1/kuT0i74x+X3 + MRal/fEnv8tz+H2fz/N8vz0azX88PG6wmcDp4E881hYR3VUIixF2Nr+FcO2DlbnPGjaWoM+M6DAiOitg + YUoR8rqhsJTBWG/kP6fOMKTegGjKh/7mTyIx0oUw58C0/XubLM8iKtPeQIx2gfcMJgbD0FBVlRE+D7QU + hS2ZshANuTDQqq75fQIHe6GVcxHV6VCr/2VzQIKmAshOQNbHc6+PhTqDOggBP5jzoDCJoLUaLo7fwr3V + hSCr8z8EeHcLbSU8FCfjLU0nuL/70cB4Py5tDLL7UBnC8xMMW6EkhRNdIsGt9QjhTXkGUnsN8rVf4Q72 + tpFzEnGlRiH1NIL8qDjJoY1DdjkVADNjSGnReI2ZIF196VW22+D8SAFw6YLJITjaV5e2qotSIXoBiiMD + HEVvQ/IAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAStJREFUOE9jYBg0 + oHDW8/9NC57/z5z4+D8uR4W3P8Apx5A789n/VUfe/8elKL77wf/ghmu4DciY8vT/wn0fsCqK73n4f+n+ + ///9qy/gNiCh58n/aVveYyiKaL8P1pw56/9/r9ITuA2I7Hr0v3f1BxRFoa33wJpb1wFt7/z73yX/AG4D + Apsf/q+b/w6uKLjl7v9Fe///7wBqzpjz879d3c//9hnbcRvgUXX/f/60NyiK7Ipv/0+f8/u/f9e3/zqF + 7/5bJKzHbYB96d3/2ZNfYyjSTzn/36ToxX+VrE//jSOX4TbAIu/O/9T+11gVGSSd+C+b9vW/bvA83AYY + Zt3+H9byEqci/dTL/zV8p+E2QCftxn+/6od4Fal4TMBtgFPulf8gBXgVDZqMh+wQAPB2wKsSwCgmAAAA + AElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAL1JREFUOE9jYBgy + ILz9wX+yHRvf/eB/cMM18gyI73n4f+n+///9qy+QbkBE+32w5sxZ//97lZ4gzYDQ1ntgza3rgLZ3/v3v + kn+AeAOCW+7+X7T3//8OoOaMOT//29X9/G+fsZ14A0ChbVd8+3/6nN///bu+/dcpfPffImE9aQaADNFP + Of/fpOjFf5WsT/+NI5eRbgDIEIOkE/9l077+1w2eR54BYJekXv6v4TuNfANAhqh4TKDMALKTMc01AgDQ + FGCYkuTLEQAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAKtJREFUOE9jYBh0 + oHDW8/8UOSp35rP/Cd33yDckY8rT//P2//6f0HWHPEMSep78n73v1//OrX//u5VeJt2QyK5H/6ds+/W/ + ZOnf/wnT//63yT1LmiGBzQ//t659D9ZsXPLlv3T0tf/GkcuIN8Sj6v7/krnv4JoVXXqI1wyKPvvSu/8D + W56BbSZZM8gAi7w7/20KrpCnGWSAYdZt8jWDDNBJu0GanylKtoNCMwCgfl+gC2KedgAAAABJRU5ErkJg + gg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAATBJREFUOE9jYBhU + oHDW8/+4HASSa1rw/H/mxMc41TDkznz2P6H7HlYFILlVR97/D29/gNuAjClP/8/b//t/QtcdDEUguYX7 + PvwPbriG24CEnif/Z+/79b9z69//bqWXURSC5KZtef/fv/oCbgMiux79n7Lt1/+SpX//J0z/+98m9yxc + MUiud/WH/16lJ3AbENj88H/r2vdgzcYlX/5LR1/7bxy5DKwBJFc3/91/l/wDuA3wqLr/v2TuO7hmRZce + uGKQXP60N//tM7bjNsC+9O7/wJZnYJuRNYNcAJLLnvz6v0XCetwGWOTd+W9TcAVDM8gAkFxq/2u4l7Cm + F8Os21g1gxSD5MJaXv7XDZ6H2wU6aTdwSoLk/Kof/tfwnYbbAHz5yin3yn8VjwlgPKjyHwMAvtG/s0Vm + x8MAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAilJREFUOE+tk91L + k3EUx/cvdN9N0EW3NTWGa7EaPOUcyqphWBG9PZEv5dJlmqhYmUYtXyBb4dJJy+kknFT4BqZIjaFMJUsz + V7TEoabYRDD49ju/6Pm1Mm/qB+fy8znPOef7qFT/4z17GgWVr30Zbd4lPHYvoLEhgvuOGdTWfIL9dgg3 + yqdQWjKBwoLXyMsdxYXzQSi9CeztAWqqV7HRW1ldgzGtF4fTnvBSBN7WRS6orPjyV57gyMIKdpufQ62W + YTnkEQL3o3kuKC35vK7gJ/w+vIg4kw8Fl6dxwNwkBM76WS64ZHv3h+BXeGQygm2SF9accaSmOIWg7m6Y + C7KzRmMEv8ODwTA2692Q5QBMJocQVFd95AL5TEARrAf3+D9gU2IDjhx9gaSkWiG4WTmN7i6wUwLHT76C + 5dgA3zYtjGamz6bOP+A+HLR0QpLsQnC1bBIdPrAMAE2ub+zuX1F+fY4vlRZGM2dmBBU4ObUdBkOFEFwp + HIenGXjoXGPBicKYnhNT5hM2pJ8r4p2TUxi83wO9vkwIbHljDAaq7kR5ZxJQSOK0EobezmJsag5y7jXs + NbZxWLvHBZ2uSAgolo57UD6bBASfzb+FN6F5hGaWcLHYjni9i8GNiN/1ANrEfCHIzBhmcy/zmbcaPNiy + Q0JLRz98XYPo7vNj4OUQ9pksUOvqkcDg7Zo6aDTWWMHpU/08npQwCgndmU5F26aF0czUlYrgnQnZQvAv + f/R3bGg6a0rM640AAAAASUVORK5CYII= + + + + 696, 17 + + + 808, 17 + + \ No newline at end of file diff --git a/Chapter05(RFID)/Attendance_Phidget/Form1.vb b/Chapter05(RFID)/Attendance_Phidget/Form1.vb new file mode 100644 index 0000000..71358fa --- /dev/null +++ b/Chapter05(RFID)/Attendance_Phidget/Form1.vb @@ -0,0 +1,208 @@ +Imports System.Data +Imports System.Data.SqlClient +Imports System.IO + +Public Class Form1 + + '---tag ID read from the reader--- + Private tagID As String = String.Empty + '---the time that the tag ID was recorded--- + Private timeRecorded As DateTime = Now + + '---COM port to listen to--- + Const COM As String = "COM3" + '---file name of the log file--- + Const FILE_NAME As String = "C:\Attendance.csv" + '---the interval before the employee record is cleared + ' from the screen (in seconds)--- + Const INTERVAL As Integer = 3 + + '*************************************************** + Dim WithEvents RFIDReader As PhidgetsNET.PhidgetRFID + '*************************************************** + + Private Sub Form1_Load( _ + ByVal sender As System.Object, _ + ByVal e As System.EventArgs) Handles MyBase.Load + + 'TODO: This line of code loads data into the + ' 'NorthwindDataSet.Employees' table. You can move, + ' or remove it, as needed. + Me.EmployeesTableAdapter.Fill(Me.NorthwindDataSet.Employees) + + '---Clear the employee when the app is loaded--- + EmployeesBindingSource.Filter = "TAGID='xxxxxxxxxx'" + '---set the timer interval to clear the employee record--- + Timer1.Interval = INTERVAL * 1000 'convert to milliseconds + + + '************************************************ + RFIDReader = New PhidgetsNET.PhidgetRFID + RFIDReader.OpenRemoteIP("localhost", 5001, -1, "pass") + ToolStripStatusLabel1.Text = "Not Connected" + '************************************************ + + End Sub + + '************************************************ + Private Sub RFIDReader_Attach(ByVal sender As Object, ByVal e As PhidgetsNET.AttachEventArgs) Handles RFIDReader.Attach + '---display the status--- + ToolStripStatusLabel1.Text = "Phidget RFID Reader Connected" + '---Enable onboard LED--- + RFIDReader.SetOutputState(2, True) + '---Enable RFID Reader--- + RFIDReader.SetOutputState(3, False) + End Sub + + Private Sub RFIDReader_Detach(ByVal sender As Object, ByVal e As PhidgetsNET.DetachEventArgs) Handles RFIDReader.Detach + '---display the status--- + ToolStripStatusLabel1.Text = "Phidget RFID Reader Not Connected" + End Sub + + Private Sub RFIDReader_Error(ByVal sender As Object, ByVal e As PhidgetsNET.ErrorEventArgs) Handles RFIDReader.Error + '---display the error--- + ToolStripStatusLabel1.Text = e.getError + End Sub + Private Sub RFIDReader_Tag(ByVal sender As Object, ByVal e As PhidgetsNET.TagEventArgs) Handles RFIDReader.Tag + '---save the tag ID--- + Console.WriteLine("tag detected - " & e.getTag) + '---when incoming data is received, update the TagID textbox--- + txtTagID.BeginInvoke(New _ + myDelegate(AddressOf updateTextBox), _ + New Object() {e.getTag}) + End Sub + + '---update the Tag ID textbox--- + Public Delegate Sub myDelegate(ByVal str As String) + Public Sub updateTextBox(ByVal str As String) + '---for receiving plain ASCII text--- + With txtTagID + .Text = "" ' ensure that the TextChanged event is fired + .Text = str + End With + End Sub + + Private Sub txtTagID_TextChanged( _ + ByVal sender As System.Object, _ + ByVal e As System.EventArgs) _ + Handles txtTagID.TextChanged + + '---get the tag ID that is read--- + Dim temptagID As String = txtTagID.Text + '---if no tag ID, exit--- + If temptagID = String.Empty Then + Exit Sub + End If + + '---get the time interval between the last read time + ' and the current time--- + Dim tp As TimeSpan = Now.Subtract(timeRecorded) + Dim timeInterval As Double = tp.Ticks / TimeSpan.TicksPerSecond + + If (temptagID = tagID) And timeInterval < INTERVAL Then + '---if it is the same tag and the time interval + ' is less than 3 seconds, the tag won't be registered--- + Exit Sub + End If + + '---the tag is saved--- + tagID = temptagID + EmployeesBindingSource.RemoveFilter() + + '---find the employee associated with the tag--- + EmployeesBindingSource.Filter = "TAGID='" & tagID & "'" + If EmployeesBindingSource.Count < 1 Then + ToolStripStatusLabel1.Text = "Employee not found." + Else + ToolStripStatusLabel1.Text = "Employee found." + '---write the employee information to log file--- + WriteToLog(EmployeeIDLabel2.Text, _ + LastNameTextBox.Text & ", " & FirstNameTextBox.Text) + '---reset the timer--- + Timer1.Enabled = False + Timer1.Enabled = True + End If + '---save the time this tag was recorded--- + timeRecorded = Now + End Sub + + Private Sub btnAssign_Click( _ + ByVal sender As System.Object, _ + ByVal e As System.EventArgs) _ + Handles btnAssign.Click + '---obtain the tag ID that was read--- + If txtTagID.Text <> String.Empty Then + '---assign the Tag ID to the current employee--- + TagIDLabel1.Text = txtTagID.Text + ToolStripStatusLabel1.Text = "Tag associated with employee." + '---save the record--- + Me.Validate() + Me.EmployeesBindingSource.EndEdit() + Me.EmployeesTableAdapter.Update(Me.NorthwindDataSet.Employees) + Else + ToolStripStatusLabel1.Text = "No tag id scanned." + Exit Sub + End If + End Sub + + + '************************************************ + + Private Sub EmployeesBindingNavigatorSaveItem_Click( _ + ByVal sender As System.Object, ByVal e As System.EventArgs) _ + Handles EmployeesBindingNavigatorSaveItem.Click + Me.Validate() + Me.EmployeesBindingSource.EndEdit() + Me.EmployeesTableAdapter.Update(Me.NorthwindDataSet.Employees) + '------------------------------------------------------------- + End Sub + + Private Sub btnFind_Click( _ + ByVal sender As System.Object, _ + ByVal e As System.EventArgs) _ + Handles btnFind.Click + '---search for employee--- + If txtEmployeeID.Text = String.Empty Then + EmployeesBindingSource.RemoveFilter() + Else + EmployeesBindingSource.Filter = _ + "EmployeeID='" & txtEmployeeID.Text & "'" + End If + End Sub + + Private Sub btnDeassign_Click( _ + ByVal sender As System.Object, _ + ByVal e As System.EventArgs) _ + Handles btnDeassign.Click + + If Trim(TagIDLabel1.Text) = String.Empty Then + ToolStripStatusLabel1.Text = "Current employee has no tag ID." + Exit Sub + End If + '---deassociate tag ID from employee--- + TagIDLabel1.Text = String.Empty + '---save the record--- + Me.Validate() + Me.EmployeesBindingSource.EndEdit() + Me.EmployeesTableAdapter.Update(Me.NorthwindDataSet.Employees) + ToolStripStatusLabel1.Text = "Tag deassociated from employee." + End Sub + + Private Sub WriteToLog( _ + ByVal employeeID As String, _ + ByVal employeeName As String) + '---write to log file--- + Dim str As String = employeeID & "," & _ + employeeName & "," & Now & Chr(13) + My.Computer.FileSystem.WriteAllText(FILE_NAME, str, True) + End Sub + + Private Sub Timer1_Tick( _ + ByVal sender As System.Object, _ + ByVal e As System.EventArgs) _ + Handles Timer1.Tick + '---clear the employee--- + EmployeesBindingSource.Filter = "TAGID='xxxxxxxxxx'" + Timer1.Enabled = False + End Sub +End Class diff --git a/Chapter05(RFID)/Attendance_Phidget/Form2.Designer.vb b/Chapter05(RFID)/Attendance_Phidget/Form2.Designer.vb new file mode 100644 index 0000000..65b30c1 --- /dev/null +++ b/Chapter05(RFID)/Attendance_Phidget/Form2.Designer.vb @@ -0,0 +1,106 @@ + _ +Partial Class Form2 + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.StatusStrip1 = New System.Windows.Forms.StatusStrip + Me.ToolStripStatusLabel1 = New System.Windows.Forms.ToolStripStatusLabel + Me.Label1 = New System.Windows.Forms.Label + Me.txtTagID = New System.Windows.Forms.TextBox + Me.chkTurnOnLED = New System.Windows.Forms.CheckBox + Me.chkEnableReader = New System.Windows.Forms.CheckBox + Me.StatusStrip1.SuspendLayout() + Me.SuspendLayout() + ' + 'StatusStrip1 + ' + Me.StatusStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.ToolStripStatusLabel1}) + Me.StatusStrip1.Location = New System.Drawing.Point(0, 72) + Me.StatusStrip1.Name = "StatusStrip1" + Me.StatusStrip1.Size = New System.Drawing.Size(219, 22) + Me.StatusStrip1.TabIndex = 0 + Me.StatusStrip1.Text = "StatusStrip1" + ' + 'ToolStripStatusLabel1 + ' + Me.ToolStripStatusLabel1.Name = "ToolStripStatusLabel1" + Me.ToolStripStatusLabel1.Size = New System.Drawing.Size(111, 17) + Me.ToolStripStatusLabel1.Text = "ToolStripStatusLabel1" + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.Location = New System.Drawing.Point(12, 15) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(40, 13) + Me.Label1.TabIndex = 1 + Me.Label1.Text = "Tag ID" + ' + 'txtTagID + ' + Me.txtTagID.Location = New System.Drawing.Point(57, 12) + Me.txtTagID.Name = "txtTagID" + Me.txtTagID.Size = New System.Drawing.Size(146, 20) + Me.txtTagID.TabIndex = 2 + ' + 'chkTurnOnLED + ' + Me.chkTurnOnLED.AutoSize = True + Me.chkTurnOnLED.Location = New System.Drawing.Point(15, 38) + Me.chkTurnOnLED.Name = "chkTurnOnLED" + Me.chkTurnOnLED.Size = New System.Drawing.Size(87, 17) + Me.chkTurnOnLED.TabIndex = 3 + Me.chkTurnOnLED.Text = "Turn on LED" + Me.chkTurnOnLED.UseVisualStyleBackColor = True + ' + 'chkEnableReader + ' + Me.chkEnableReader.AutoSize = True + Me.chkEnableReader.Location = New System.Drawing.Point(106, 38) + Me.chkEnableReader.Name = "chkEnableReader" + Me.chkEnableReader.Size = New System.Drawing.Size(97, 17) + Me.chkEnableReader.TabIndex = 4 + Me.chkEnableReader.Text = "Enable Reader" + Me.chkEnableReader.UseVisualStyleBackColor = True + ' + 'Form2 + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(219, 94) + Me.Controls.Add(Me.chkEnableReader) + Me.Controls.Add(Me.chkTurnOnLED) + Me.Controls.Add(Me.txtTagID) + Me.Controls.Add(Me.Label1) + Me.Controls.Add(Me.StatusStrip1) + Me.Name = "Form2" + Me.Text = "Form1" + Me.StatusStrip1.ResumeLayout(False) + Me.StatusStrip1.PerformLayout() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents StatusStrip1 As System.Windows.Forms.StatusStrip + Friend WithEvents ToolStripStatusLabel1 As System.Windows.Forms.ToolStripStatusLabel + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents txtTagID As System.Windows.Forms.TextBox + Friend WithEvents chkTurnOnLED As System.Windows.Forms.CheckBox + Friend WithEvents chkEnableReader As System.Windows.Forms.CheckBox +End Class diff --git a/Chapter05(RFID)/Attendance_Phidget/Form2.resx b/Chapter05(RFID)/Attendance_Phidget/Form2.resx new file mode 100644 index 0000000..faac01d --- /dev/null +++ b/Chapter05(RFID)/Attendance_Phidget/Form2.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/Chapter05(RFID)/Attendance_Phidget/Form2.vb b/Chapter05(RFID)/Attendance_Phidget/Form2.vb new file mode 100644 index 0000000..a1bb312 --- /dev/null +++ b/Chapter05(RFID)/Attendance_Phidget/Form2.vb @@ -0,0 +1,73 @@ +Public Class Form2 + '*************************************************** + Dim WithEvents RFIDReader As PhidgetsNET.PhidgetRFID + '*************************************************** + Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load + '************************************************ + RFIDReader = New PhidgetsNET.PhidgetRFID + RFIDReader.OpenRemoteIP("localhost", 5001, -1, "pass") + ToolStripStatusLabel1.Text = "Not Connected" + '************************************************ + End Sub + + Private Sub RFIDReader_Attach( _ + ByVal sender As Object, _ + ByVal e As PhidgetsNET.AttachEventArgs) _ + Handles RFIDReader.Attach + '---display the status--- + ToolStripStatusLabel1.Text = "Phidget RFID Reader Connected" + '---Enable onboard LED--- + chkTurnOnLED.Checked = True + RFIDReader.SetOutputState(2, True) + '---Enable RFID Reader--- + chkEnableReader.Checked = True + RFIDReader.SetOutputState(3, True) + End Sub + + Private Sub RFIDReader_Detach( _ + ByVal sender As Object, _ + ByVal e As PhidgetsNET.DetachEventArgs) _ + Handles RFIDReader.Detach + '---display the status--- + ToolStripStatusLabel1.Text = "Phidget RFID Reader Not Connected" + End Sub + + Private Sub RFIDReader_Error( _ + ByVal sender As Object, _ + ByVal e As PhidgetsNET.ErrorEventArgs) _ + Handles RFIDReader.Error + '---display the error--- + ToolStripStatusLabel1.Text = e.getError + End Sub + + Private Sub RFIDReader_Tag( _ + ByVal sender As Object, _ + ByVal e As PhidgetsNET.TagEventArgs) _ + Handles RFIDReader.Tag + '---save the tag ID--- + Console.WriteLine("tag detected - " & e.getTag) + '---when incoming data is received, update the TagID textbox--- + txtTagID.BeginInvoke(New _ + myDelegate(AddressOf updateTextBox), _ + New Object() {e.getTag}) + End Sub + + '---update the Tag ID textbox--- + Public Delegate Sub myDelegate(ByVal str As String) + Public Sub updateTextBox(ByVal str As String) + '---for receiving plain ASCII text--- + With txtTagID + .Text = str + End With + End Sub + + Private Sub chkTurnOnLED_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTurnOnLED.CheckedChanged + '---Enable/Disable onboard LED--- + RFIDReader.SetOutputState(2, chkTurnOnLED.Checked) + End Sub + + Private Sub chkEnableReader_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkEnableReader.CheckedChanged + '---Enable RFID Reader--- + RFIDReader.SetOutputState(3, chkEnableReader.Checked) + End Sub +End Class \ No newline at end of file diff --git a/Chapter05(RFID)/Attendance_Phidget/My Project/Application.Designer.vb b/Chapter05(RFID)/Attendance_Phidget/My Project/Application.Designer.vb new file mode 100644 index 0000000..b25ddc4 --- /dev/null +++ b/Chapter05(RFID)/Attendance_Phidget/My Project/Application.Designer.vb @@ -0,0 +1,38 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.42 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + 'NOTE: This file is auto-generated; do not modify it directly. To make changes, + ' or if you encounter build errors in this file, go to the Project Designer + ' (go to Project Properties or double-click the My Project node in + ' Solution Explorer), and make changes on the Application tab. + ' + Partial Friend Class MyApplication + + _ + Public Sub New() + MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) + Me.IsSingleInstance = false + Me.EnableVisualStyles = true + Me.SaveMySettingsOnExit = true + Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses + End Sub + + _ + Protected Overrides Sub OnCreateMainForm() + Me.MainForm = Global.Attendance.Form2 + End Sub + End Class +End Namespace diff --git a/Chapter05(RFID)/Attendance_Phidget/My Project/Application.myapp b/Chapter05(RFID)/Attendance_Phidget/My Project/Application.myapp new file mode 100644 index 0000000..3d66661 --- /dev/null +++ b/Chapter05(RFID)/Attendance_Phidget/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + true + Form2 + false + 0 + true + 0 + true + \ No newline at end of file diff --git a/Chapter05(RFID)/Attendance_Phidget/My Project/AssemblyInfo.vb b/Chapter05(RFID)/Attendance_Phidget/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..6f0671c --- /dev/null +++ b/Chapter05(RFID)/Attendance_Phidget/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Chapter05(RFID)/Attendance_Phidget/My Project/Resources.Designer.vb b/Chapter05(RFID)/Attendance_Phidget/My Project/Resources.Designer.vb new file mode 100644 index 0000000..8aa363f --- /dev/null +++ b/Chapter05(RFID)/Attendance_Phidget/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.42 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Attendance.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Chapter05(RFID)/Attendance_Phidget/My Project/Resources.resx b/Chapter05(RFID)/Attendance_Phidget/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Chapter05(RFID)/Attendance_Phidget/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter05(RFID)/Attendance_Phidget/My Project/Settings.Designer.vb b/Chapter05(RFID)/Attendance_Phidget/My Project/Settings.Designer.vb new file mode 100644 index 0000000..c3ec89f --- /dev/null +++ b/Chapter05(RFID)/Attendance_Phidget/My Project/Settings.Designer.vb @@ -0,0 +1,83 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.42 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + + _ + Public ReadOnly Property NorthwindConnectionString() As String + Get + Return CType(Me("NorthwindConnectionString"),String) + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.Attendance.My.MySettings + Get + Return Global.Attendance.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Chapter05(RFID)/Attendance_Phidget/My Project/Settings.settings b/Chapter05(RFID)/Attendance_Phidget/My Project/Settings.settings new file mode 100644 index 0000000..52b713c --- /dev/null +++ b/Chapter05(RFID)/Attendance_Phidget/My Project/Settings.settings @@ -0,0 +1,14 @@ + + + + + + <?xml version="1.0" encoding="utf-16"?> +<SerializableConnectionString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <ConnectionString>Data Source=.\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True</ConnectionString> + <ProviderName>System.Data.SqlClient</ProviderName> +</SerializableConnectionString> + Data Source=.\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True + + + \ No newline at end of file diff --git a/Chapter05(RFID)/Attendance_Phidget/NorthwindDataSet.Designer.vb b/Chapter05(RFID)/Attendance_Phidget/NorthwindDataSet.Designer.vb new file mode 100644 index 0000000..ada1df6 --- /dev/null +++ b/Chapter05(RFID)/Attendance_Phidget/NorthwindDataSet.Designer.vb @@ -0,0 +1,1006 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.42 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict Off +Option Explicit On + +Imports System + + + _ +Partial Public Class NorthwindDataSet + Inherits System.Data.DataSet + + Private tableEmployees As EmployeesDataTable + + Private _schemaSerializationMode As System.Data.SchemaSerializationMode = System.Data.SchemaSerializationMode.IncludeSchema + + _ + Public Sub New() + MyBase.New + Me.BeginInit + Me.InitClass + Dim schemaChangedHandler As System.ComponentModel.CollectionChangeEventHandler = AddressOf Me.SchemaChanged + AddHandler MyBase.Tables.CollectionChanged, schemaChangedHandler + AddHandler MyBase.Relations.CollectionChanged, schemaChangedHandler + Me.EndInit + End Sub + + _ + Protected Sub New(ByVal info As System.Runtime.Serialization.SerializationInfo, ByVal context As System.Runtime.Serialization.StreamingContext) + MyBase.New(info, context, false) + If (Me.IsBinarySerialized(info, context) = true) Then + Me.InitVars(false) + Dim schemaChangedHandler1 As System.ComponentModel.CollectionChangeEventHandler = AddressOf Me.SchemaChanged + AddHandler Me.Tables.CollectionChanged, schemaChangedHandler1 + AddHandler Me.Relations.CollectionChanged, schemaChangedHandler1 + Return + End If + Dim strSchema As String = CType(info.GetValue("XmlSchema", GetType(String)),String) + If (Me.DetermineSchemaSerializationMode(info, context) = System.Data.SchemaSerializationMode.IncludeSchema) Then + Dim ds As System.Data.DataSet = New System.Data.DataSet + ds.ReadXmlSchema(New System.Xml.XmlTextReader(New System.IO.StringReader(strSchema))) + If (Not (ds.Tables("Employees")) Is Nothing) Then + MyBase.Tables.Add(New EmployeesDataTable(ds.Tables("Employees"))) + End If + Me.DataSetName = ds.DataSetName + Me.Prefix = ds.Prefix + Me.Namespace = ds.Namespace + Me.Locale = ds.Locale + Me.CaseSensitive = ds.CaseSensitive + Me.EnforceConstraints = ds.EnforceConstraints + Me.Merge(ds, false, System.Data.MissingSchemaAction.Add) + Me.InitVars + Else + Me.ReadXmlSchema(New System.Xml.XmlTextReader(New System.IO.StringReader(strSchema))) + End If + Me.GetSerializationData(info, context) + Dim schemaChangedHandler As System.ComponentModel.CollectionChangeEventHandler = AddressOf Me.SchemaChanged + AddHandler MyBase.Tables.CollectionChanged, schemaChangedHandler + AddHandler Me.Relations.CollectionChanged, schemaChangedHandler + End Sub + + _ + Public ReadOnly Property Employees() As EmployeesDataTable + Get + Return Me.tableEmployees + End Get + End Property + + _ + Public Overrides Property SchemaSerializationMode() As System.Data.SchemaSerializationMode + Get + Return Me._schemaSerializationMode + End Get + Set + Me._schemaSerializationMode = value + End Set + End Property + + _ + Public Shadows ReadOnly Property Tables() As System.Data.DataTableCollection + Get + Return MyBase.Tables + End Get + End Property + + _ + Public Shadows ReadOnly Property Relations() As System.Data.DataRelationCollection + Get + Return MyBase.Relations + End Get + End Property + + _ + Protected Overrides Sub InitializeDerivedDataSet() + Me.BeginInit + Me.InitClass + Me.EndInit + End Sub + + _ + Public Overrides Function Clone() As System.Data.DataSet + Dim cln As NorthwindDataSet = CType(MyBase.Clone,NorthwindDataSet) + cln.InitVars + cln.SchemaSerializationMode = Me.SchemaSerializationMode + Return cln + End Function + + _ + Protected Overrides Function ShouldSerializeTables() As Boolean + Return false + End Function + + _ + Protected Overrides Function ShouldSerializeRelations() As Boolean + Return false + End Function + + _ + Protected Overrides Sub ReadXmlSerializable(ByVal reader As System.Xml.XmlReader) + If (Me.DetermineSchemaSerializationMode(reader) = System.Data.SchemaSerializationMode.IncludeSchema) Then + Me.Reset + Dim ds As System.Data.DataSet = New System.Data.DataSet + ds.ReadXml(reader) + If (Not (ds.Tables("Employees")) Is Nothing) Then + MyBase.Tables.Add(New EmployeesDataTable(ds.Tables("Employees"))) + End If + Me.DataSetName = ds.DataSetName + Me.Prefix = ds.Prefix + Me.Namespace = ds.Namespace + Me.Locale = ds.Locale + Me.CaseSensitive = ds.CaseSensitive + Me.EnforceConstraints = ds.EnforceConstraints + Me.Merge(ds, false, System.Data.MissingSchemaAction.Add) + Me.InitVars + Else + Me.ReadXml(reader) + Me.InitVars + End If + End Sub + + _ + Protected Overrides Function GetSchemaSerializable() As System.Xml.Schema.XmlSchema + Dim stream As System.IO.MemoryStream = New System.IO.MemoryStream + Me.WriteXmlSchema(New System.Xml.XmlTextWriter(stream, Nothing)) + stream.Position = 0 + Return System.Xml.Schema.XmlSchema.Read(New System.Xml.XmlTextReader(stream), Nothing) + End Function + + _ + Friend Overloads Sub InitVars() + Me.InitVars(true) + End Sub + + _ + Friend Overloads Sub InitVars(ByVal initTable As Boolean) + Me.tableEmployees = CType(MyBase.Tables("Employees"),EmployeesDataTable) + If (initTable = true) Then + If (Not (Me.tableEmployees) Is Nothing) Then + Me.tableEmployees.InitVars + End If + End If + End Sub + + _ + Private Sub InitClass() + Me.DataSetName = "NorthwindDataSet" + Me.Prefix = "" + Me.Namespace = "http://tempuri.org/NorthwindDataSet.xsd" + Me.EnforceConstraints = true + Me.SchemaSerializationMode = System.Data.SchemaSerializationMode.IncludeSchema + Me.tableEmployees = New EmployeesDataTable + MyBase.Tables.Add(Me.tableEmployees) + End Sub + + _ + Private Function ShouldSerializeEmployees() As Boolean + Return false + End Function + + _ + Private Sub SchemaChanged(ByVal sender As Object, ByVal e As System.ComponentModel.CollectionChangeEventArgs) + If (e.Action = System.ComponentModel.CollectionChangeAction.Remove) Then + Me.InitVars + End If + End Sub + + _ + Public Shared Function GetTypedDataSetSchema(ByVal xs As System.Xml.Schema.XmlSchemaSet) As System.Xml.Schema.XmlSchemaComplexType + Dim ds As NorthwindDataSet = New NorthwindDataSet + Dim type As System.Xml.Schema.XmlSchemaComplexType = New System.Xml.Schema.XmlSchemaComplexType + Dim sequence As System.Xml.Schema.XmlSchemaSequence = New System.Xml.Schema.XmlSchemaSequence + xs.Add(ds.GetSchemaSerializable) + Dim any As System.Xml.Schema.XmlSchemaAny = New System.Xml.Schema.XmlSchemaAny + any.Namespace = ds.Namespace + sequence.Items.Add(any) + type.Particle = sequence + Return type + End Function + + Public Delegate Sub EmployeesRowChangeEventHandler(ByVal sender As Object, ByVal e As EmployeesRowChangeEvent) + + _ + Partial Public Class EmployeesDataTable + Inherits System.Data.DataTable + Implements System.Collections.IEnumerable + + Private columnEmployeeID As System.Data.DataColumn + + Private columnLastName As System.Data.DataColumn + + Private columnFirstName As System.Data.DataColumn + + Private columnTitle As System.Data.DataColumn + + Private columnPhoto As System.Data.DataColumn + + Private columnTagID As System.Data.DataColumn + + _ + Public Sub New() + MyBase.New + Me.TableName = "Employees" + Me.BeginInit + Me.InitClass + Me.EndInit + End Sub + + _ + Friend Sub New(ByVal table As System.Data.DataTable) + MyBase.New + Me.TableName = table.TableName + If (table.CaseSensitive <> table.DataSet.CaseSensitive) Then + Me.CaseSensitive = table.CaseSensitive + End If + If (table.Locale.ToString <> table.DataSet.Locale.ToString) Then + Me.Locale = table.Locale + End If + If (table.Namespace <> table.DataSet.Namespace) Then + Me.Namespace = table.Namespace + End If + Me.Prefix = table.Prefix + Me.MinimumCapacity = table.MinimumCapacity + End Sub + + _ + Protected Sub New(ByVal info As System.Runtime.Serialization.SerializationInfo, ByVal context As System.Runtime.Serialization.StreamingContext) + MyBase.New(info, context) + Me.InitVars + End Sub + + _ + Public ReadOnly Property EmployeeIDColumn() As System.Data.DataColumn + Get + Return Me.columnEmployeeID + End Get + End Property + + _ + Public ReadOnly Property LastNameColumn() As System.Data.DataColumn + Get + Return Me.columnLastName + End Get + End Property + + _ + Public ReadOnly Property FirstNameColumn() As System.Data.DataColumn + Get + Return Me.columnFirstName + End Get + End Property + + _ + Public ReadOnly Property TitleColumn() As System.Data.DataColumn + Get + Return Me.columnTitle + End Get + End Property + + _ + Public ReadOnly Property PhotoColumn() As System.Data.DataColumn + Get + Return Me.columnPhoto + End Get + End Property + + _ + Public ReadOnly Property TagIDColumn() As System.Data.DataColumn + Get + Return Me.columnTagID + End Get + End Property + + _ + Public ReadOnly Property Count() As Integer + Get + Return Me.Rows.Count + End Get + End Property + + _ + Public Default ReadOnly Property Item(ByVal index As Integer) As EmployeesRow + Get + Return CType(Me.Rows(index),EmployeesRow) + End Get + End Property + + Public Event EmployeesRowChanging As EmployeesRowChangeEventHandler + + Public Event EmployeesRowChanged As EmployeesRowChangeEventHandler + + Public Event EmployeesRowDeleting As EmployeesRowChangeEventHandler + + Public Event EmployeesRowDeleted As EmployeesRowChangeEventHandler + + _ + Public Overloads Sub AddEmployeesRow(ByVal row As EmployeesRow) + Me.Rows.Add(row) + End Sub + + _ + Public Overloads Function AddEmployeesRow(ByVal LastName As String, ByVal FirstName As String, ByVal Title As String, ByVal Photo() As Byte, ByVal TagID As String) As EmployeesRow + Dim rowEmployeesRow As EmployeesRow = CType(Me.NewRow,EmployeesRow) + rowEmployeesRow.ItemArray = New Object() {Nothing, LastName, FirstName, Title, Photo, TagID} + Me.Rows.Add(rowEmployeesRow) + Return rowEmployeesRow + End Function + + _ + Public Function FindByEmployeeID(ByVal EmployeeID As Integer) As EmployeesRow + Return CType(Me.Rows.Find(New Object() {EmployeeID}),EmployeesRow) + End Function + + _ + Public Overridable Function GetEnumerator() As System.Collections.IEnumerator Implements System.Collections.IEnumerable.GetEnumerator + Return Me.Rows.GetEnumerator + End Function + + _ + Public Overrides Function Clone() As System.Data.DataTable + Dim cln As EmployeesDataTable = CType(MyBase.Clone,EmployeesDataTable) + cln.InitVars + Return cln + End Function + + _ + Protected Overrides Function CreateInstance() As System.Data.DataTable + Return New EmployeesDataTable + End Function + + _ + Friend Sub InitVars() + Me.columnEmployeeID = MyBase.Columns("EmployeeID") + Me.columnLastName = MyBase.Columns("LastName") + Me.columnFirstName = MyBase.Columns("FirstName") + Me.columnTitle = MyBase.Columns("Title") + Me.columnPhoto = MyBase.Columns("Photo") + Me.columnTagID = MyBase.Columns("TagID") + End Sub + + _ + Private Sub InitClass() + Me.columnEmployeeID = New System.Data.DataColumn("EmployeeID", GetType(Integer), Nothing, System.Data.MappingType.Element) + MyBase.Columns.Add(Me.columnEmployeeID) + Me.columnLastName = New System.Data.DataColumn("LastName", GetType(String), Nothing, System.Data.MappingType.Element) + MyBase.Columns.Add(Me.columnLastName) + Me.columnFirstName = New System.Data.DataColumn("FirstName", GetType(String), Nothing, System.Data.MappingType.Element) + MyBase.Columns.Add(Me.columnFirstName) + Me.columnTitle = New System.Data.DataColumn("Title", GetType(String), Nothing, System.Data.MappingType.Element) + MyBase.Columns.Add(Me.columnTitle) + Me.columnPhoto = New System.Data.DataColumn("Photo", GetType(Byte()), Nothing, System.Data.MappingType.Element) + MyBase.Columns.Add(Me.columnPhoto) + Me.columnTagID = New System.Data.DataColumn("TagID", GetType(String), Nothing, System.Data.MappingType.Element) + MyBase.Columns.Add(Me.columnTagID) + Me.Constraints.Add(New System.Data.UniqueConstraint("Constraint1", New System.Data.DataColumn() {Me.columnEmployeeID}, true)) + Me.columnEmployeeID.AutoIncrement = true + Me.columnEmployeeID.AllowDBNull = false + Me.columnEmployeeID.ReadOnly = true + Me.columnEmployeeID.Unique = true + Me.columnLastName.AllowDBNull = false + Me.columnLastName.MaxLength = 20 + Me.columnFirstName.AllowDBNull = false + Me.columnFirstName.MaxLength = 10 + Me.columnTitle.MaxLength = 30 + Me.columnTagID.MaxLength = 10 + End Sub + + _ + Public Function NewEmployeesRow() As EmployeesRow + Return CType(Me.NewRow,EmployeesRow) + End Function + + _ + Protected Overrides Function NewRowFromBuilder(ByVal builder As System.Data.DataRowBuilder) As System.Data.DataRow + Return New EmployeesRow(builder) + End Function + + _ + Protected Overrides Function GetRowType() As System.Type + Return GetType(EmployeesRow) + End Function + + _ + Protected Overrides Sub OnRowChanged(ByVal e As System.Data.DataRowChangeEventArgs) + MyBase.OnRowChanged(e) + If (Not (Me.EmployeesRowChangedEvent) Is Nothing) Then + RaiseEvent EmployeesRowChanged(Me, New EmployeesRowChangeEvent(CType(e.Row,EmployeesRow), e.Action)) + End If + End Sub + + _ + Protected Overrides Sub OnRowChanging(ByVal e As System.Data.DataRowChangeEventArgs) + MyBase.OnRowChanging(e) + If (Not (Me.EmployeesRowChangingEvent) Is Nothing) Then + RaiseEvent EmployeesRowChanging(Me, New EmployeesRowChangeEvent(CType(e.Row,EmployeesRow), e.Action)) + End If + End Sub + + _ + Protected Overrides Sub OnRowDeleted(ByVal e As System.Data.DataRowChangeEventArgs) + MyBase.OnRowDeleted(e) + If (Not (Me.EmployeesRowDeletedEvent) Is Nothing) Then + RaiseEvent EmployeesRowDeleted(Me, New EmployeesRowChangeEvent(CType(e.Row,EmployeesRow), e.Action)) + End If + End Sub + + _ + Protected Overrides Sub OnRowDeleting(ByVal e As System.Data.DataRowChangeEventArgs) + MyBase.OnRowDeleting(e) + If (Not (Me.EmployeesRowDeletingEvent) Is Nothing) Then + RaiseEvent EmployeesRowDeleting(Me, New EmployeesRowChangeEvent(CType(e.Row,EmployeesRow), e.Action)) + End If + End Sub + + _ + Public Sub RemoveEmployeesRow(ByVal row As EmployeesRow) + Me.Rows.Remove(row) + End Sub + + _ + Public Shared Function GetTypedTableSchema(ByVal xs As System.Xml.Schema.XmlSchemaSet) As System.Xml.Schema.XmlSchemaComplexType + Dim type As System.Xml.Schema.XmlSchemaComplexType = New System.Xml.Schema.XmlSchemaComplexType + Dim sequence As System.Xml.Schema.XmlSchemaSequence = New System.Xml.Schema.XmlSchemaSequence + Dim ds As NorthwindDataSet = New NorthwindDataSet + xs.Add(ds.GetSchemaSerializable) + Dim any1 As System.Xml.Schema.XmlSchemaAny = New System.Xml.Schema.XmlSchemaAny + any1.Namespace = "http://www.w3.org/2001/XMLSchema" + any1.MinOccurs = New Decimal(0) + any1.MaxOccurs = Decimal.MaxValue + any1.ProcessContents = System.Xml.Schema.XmlSchemaContentProcessing.Lax + sequence.Items.Add(any1) + Dim any2 As System.Xml.Schema.XmlSchemaAny = New System.Xml.Schema.XmlSchemaAny + any2.Namespace = "urn:schemas-microsoft-com:xml-diffgram-v1" + any2.MinOccurs = New Decimal(1) + any2.ProcessContents = System.Xml.Schema.XmlSchemaContentProcessing.Lax + sequence.Items.Add(any2) + Dim attribute1 As System.Xml.Schema.XmlSchemaAttribute = New System.Xml.Schema.XmlSchemaAttribute + attribute1.Name = "namespace" + attribute1.FixedValue = ds.Namespace + type.Attributes.Add(attribute1) + Dim attribute2 As System.Xml.Schema.XmlSchemaAttribute = New System.Xml.Schema.XmlSchemaAttribute + attribute2.Name = "tableTypeName" + attribute2.FixedValue = "EmployeesDataTable" + type.Attributes.Add(attribute2) + type.Particle = sequence + Return type + End Function + End Class + + _ + Partial Public Class EmployeesRow + Inherits System.Data.DataRow + + Private tableEmployees As EmployeesDataTable + + _ + Friend Sub New(ByVal rb As System.Data.DataRowBuilder) + MyBase.New(rb) + Me.tableEmployees = CType(Me.Table,EmployeesDataTable) + End Sub + + _ + Public Property EmployeeID() As Integer + Get + Return CType(Me(Me.tableEmployees.EmployeeIDColumn),Integer) + End Get + Set + Me(Me.tableEmployees.EmployeeIDColumn) = value + End Set + End Property + + _ + Public Property LastName() As String + Get + Return CType(Me(Me.tableEmployees.LastNameColumn),String) + End Get + Set + Me(Me.tableEmployees.LastNameColumn) = value + End Set + End Property + + _ + Public Property FirstName() As String + Get + Return CType(Me(Me.tableEmployees.FirstNameColumn),String) + End Get + Set + Me(Me.tableEmployees.FirstNameColumn) = value + End Set + End Property + + _ + Public Property Title() As String + Get + Try + Return CType(Me(Me.tableEmployees.TitleColumn),String) + Catch e As System.InvalidCastException + Throw New System.Data.StrongTypingException("The value for column 'Title' in table 'Employees' is DBNull.", e) + End Try + End Get + Set + Me(Me.tableEmployees.TitleColumn) = value + End Set + End Property + + _ + Public Property Photo() As Byte() + Get + Try + Return CType(Me(Me.tableEmployees.PhotoColumn),Byte()) + Catch e As System.InvalidCastException + Throw New System.Data.StrongTypingException("The value for column 'Photo' in table 'Employees' is DBNull.", e) + End Try + End Get + Set + Me(Me.tableEmployees.PhotoColumn) = value + End Set + End Property + + _ + Public Property TagID() As String + Get + Try + Return CType(Me(Me.tableEmployees.TagIDColumn),String) + Catch e As System.InvalidCastException + Throw New System.Data.StrongTypingException("The value for column 'TagID' in table 'Employees' is DBNull.", e) + End Try + End Get + Set + Me(Me.tableEmployees.TagIDColumn) = value + End Set + End Property + + _ + Public Function IsTitleNull() As Boolean + Return Me.IsNull(Me.tableEmployees.TitleColumn) + End Function + + _ + Public Sub SetTitleNull() + Me(Me.tableEmployees.TitleColumn) = System.Convert.DBNull + End Sub + + _ + Public Function IsPhotoNull() As Boolean + Return Me.IsNull(Me.tableEmployees.PhotoColumn) + End Function + + _ + Public Sub SetPhotoNull() + Me(Me.tableEmployees.PhotoColumn) = System.Convert.DBNull + End Sub + + _ + Public Function IsTagIDNull() As Boolean + Return Me.IsNull(Me.tableEmployees.TagIDColumn) + End Function + + _ + Public Sub SetTagIDNull() + Me(Me.tableEmployees.TagIDColumn) = System.Convert.DBNull + End Sub + End Class + + _ + Public Class EmployeesRowChangeEvent + Inherits System.EventArgs + + Private eventRow As EmployeesRow + + Private eventAction As System.Data.DataRowAction + + _ + Public Sub New(ByVal row As EmployeesRow, ByVal action As System.Data.DataRowAction) + MyBase.New + Me.eventRow = row + Me.eventAction = action + End Sub + + _ + Public ReadOnly Property Row() As EmployeesRow + Get + Return Me.eventRow + End Get + End Property + + _ + Public ReadOnly Property Action() As System.Data.DataRowAction + Get + Return Me.eventAction + End Get + End Property + End Class +End Class + +Namespace NorthwindDataSetTableAdapters + + _ + Partial Public Class EmployeesTableAdapter + Inherits System.ComponentModel.Component + + Private WithEvents _adapter As System.Data.SqlClient.SqlDataAdapter + + Private _connection As System.Data.SqlClient.SqlConnection + + Private _commandCollection() As System.Data.SqlClient.SqlCommand + + Private _clearBeforeFill As Boolean + + _ + Public Sub New() + MyBase.New + Me.ClearBeforeFill = true + End Sub + + _ + Private ReadOnly Property Adapter() As System.Data.SqlClient.SqlDataAdapter + Get + If (Me._adapter Is Nothing) Then + Me.InitAdapter + End If + Return Me._adapter + End Get + End Property + + _ + Friend Property Connection() As System.Data.SqlClient.SqlConnection + Get + If (Me._connection Is Nothing) Then + Me.InitConnection + End If + Return Me._connection + End Get + Set + Me._connection = value + If (Not (Me.Adapter.InsertCommand) Is Nothing) Then + Me.Adapter.InsertCommand.Connection = value + End If + If (Not (Me.Adapter.DeleteCommand) Is Nothing) Then + Me.Adapter.DeleteCommand.Connection = value + End If + If (Not (Me.Adapter.UpdateCommand) Is Nothing) Then + Me.Adapter.UpdateCommand.Connection = value + End If + Dim i As Integer = 0 + Do While (i < Me.CommandCollection.Length) + If (Not (Me.CommandCollection(i)) Is Nothing) Then + CType(Me.CommandCollection(i),System.Data.SqlClient.SqlCommand).Connection = value + End If + i = (i + 1) + Loop + End Set + End Property + + _ + Protected ReadOnly Property CommandCollection() As System.Data.SqlClient.SqlCommand() + Get + If (Me._commandCollection Is Nothing) Then + Me.InitCommandCollection + End If + Return Me._commandCollection + End Get + End Property + + _ + Public Property ClearBeforeFill() As Boolean + Get + Return Me._clearBeforeFill + End Get + Set + Me._clearBeforeFill = value + End Set + End Property + + _ + Private Sub InitAdapter() + Me._adapter = New System.Data.SqlClient.SqlDataAdapter + Dim tableMapping As System.Data.Common.DataTableMapping = New System.Data.Common.DataTableMapping + tableMapping.SourceTable = "Table" + tableMapping.DataSetTable = "Employees" + tableMapping.ColumnMappings.Add("EmployeeID", "EmployeeID") + tableMapping.ColumnMappings.Add("LastName", "LastName") + tableMapping.ColumnMappings.Add("FirstName", "FirstName") + tableMapping.ColumnMappings.Add("Title", "Title") + tableMapping.ColumnMappings.Add("Photo", "Photo") + tableMapping.ColumnMappings.Add("TagID", "TagID") + Me._adapter.TableMappings.Add(tableMapping) + Me._adapter.DeleteCommand = New System.Data.SqlClient.SqlCommand + Me._adapter.DeleteCommand.Connection = Me.Connection + Me._adapter.DeleteCommand.CommandText = "DELETE FROM [dbo].[Employees] WHERE (([EmployeeID] = @Original_EmployeeID) AND (["& _ + "LastName] = @Original_LastName) AND ([FirstName] = @Original_FirstName) AND ((@I"& _ + "sNull_Title = 1 AND [Title] IS NULL) OR ([Title] = @Original_Title)) AND ((@IsNu"& _ + "ll_TagID = 1 AND [TagID] IS NULL) OR ([TagID] = @Original_TagID)))" + Me._adapter.DeleteCommand.CommandType = System.Data.CommandType.Text + Me._adapter.DeleteCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Original_EmployeeID", System.Data.SqlDbType.Int, 0, System.Data.ParameterDirection.Input, 0, 0, "EmployeeID", System.Data.DataRowVersion.Original, false, Nothing, "", "", "")) + Me._adapter.DeleteCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Original_LastName", System.Data.SqlDbType.NVarChar, 0, System.Data.ParameterDirection.Input, 0, 0, "LastName", System.Data.DataRowVersion.Original, false, Nothing, "", "", "")) + Me._adapter.DeleteCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Original_FirstName", System.Data.SqlDbType.NVarChar, 0, System.Data.ParameterDirection.Input, 0, 0, "FirstName", System.Data.DataRowVersion.Original, false, Nothing, "", "", "")) + Me._adapter.DeleteCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@IsNull_Title", System.Data.SqlDbType.Int, 0, System.Data.ParameterDirection.Input, 0, 0, "Title", System.Data.DataRowVersion.Original, true, Nothing, "", "", "")) + Me._adapter.DeleteCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Original_Title", System.Data.SqlDbType.NVarChar, 0, System.Data.ParameterDirection.Input, 0, 0, "Title", System.Data.DataRowVersion.Original, false, Nothing, "", "", "")) + Me._adapter.DeleteCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@IsNull_TagID", System.Data.SqlDbType.Int, 0, System.Data.ParameterDirection.Input, 0, 0, "TagID", System.Data.DataRowVersion.Original, true, Nothing, "", "", "")) + Me._adapter.DeleteCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Original_TagID", System.Data.SqlDbType.NChar, 0, System.Data.ParameterDirection.Input, 0, 0, "TagID", System.Data.DataRowVersion.Original, false, Nothing, "", "", "")) + Me._adapter.InsertCommand = New System.Data.SqlClient.SqlCommand + Me._adapter.InsertCommand.Connection = Me.Connection + Me._adapter.InsertCommand.CommandText = "INSERT INTO [dbo].[Employees] ([LastName], [FirstName], [Title], [Photo], [TagID]"& _ + ") VALUES (@LastName, @FirstName, @Title, @Photo, @TagID);"&Global.Microsoft.VisualBasic.ChrW(13)&Global.Microsoft.VisualBasic.ChrW(10)&"SELECT EmployeeID, La"& _ + "stName, FirstName, Title, Photo, TagID FROM Employees WHERE (EmployeeID = SCOPE_"& _ + "IDENTITY())" + Me._adapter.InsertCommand.CommandType = System.Data.CommandType.Text + Me._adapter.InsertCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@LastName", System.Data.SqlDbType.NVarChar, 0, System.Data.ParameterDirection.Input, 0, 0, "LastName", System.Data.DataRowVersion.Current, false, Nothing, "", "", "")) + Me._adapter.InsertCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@FirstName", System.Data.SqlDbType.NVarChar, 0, System.Data.ParameterDirection.Input, 0, 0, "FirstName", System.Data.DataRowVersion.Current, false, Nothing, "", "", "")) + Me._adapter.InsertCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Title", System.Data.SqlDbType.NVarChar, 0, System.Data.ParameterDirection.Input, 0, 0, "Title", System.Data.DataRowVersion.Current, false, Nothing, "", "", "")) + Me._adapter.InsertCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Photo", System.Data.SqlDbType.Image, 0, System.Data.ParameterDirection.Input, 0, 0, "Photo", System.Data.DataRowVersion.Current, false, Nothing, "", "", "")) + Me._adapter.InsertCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@TagID", System.Data.SqlDbType.NChar, 0, System.Data.ParameterDirection.Input, 0, 0, "TagID", System.Data.DataRowVersion.Current, false, Nothing, "", "", "")) + Me._adapter.UpdateCommand = New System.Data.SqlClient.SqlCommand + Me._adapter.UpdateCommand.Connection = Me.Connection + Me._adapter.UpdateCommand.CommandText = "UPDATE [dbo].[Employees] SET [LastName] = @LastName, [FirstName] = @FirstName, [T"& _ + "itle] = @Title, [Photo] = @Photo, [TagID] = @TagID WHERE (([EmployeeID] = @Origi"& _ + "nal_EmployeeID) AND ([LastName] = @Original_LastName) AND ([FirstName] = @Origin"& _ + "al_FirstName) AND ((@IsNull_Title = 1 AND [Title] IS NULL) OR ([Title] = @Origin"& _ + "al_Title)) AND ((@IsNull_TagID = 1 AND [TagID] IS NULL) OR ([TagID] = @Original_"& _ + "TagID)));"&Global.Microsoft.VisualBasic.ChrW(13)&Global.Microsoft.VisualBasic.ChrW(10)&"SELECT EmployeeID, LastName, FirstName, Title, Photo, TagID FROM Empl"& _ + "oyees WHERE (EmployeeID = @EmployeeID)" + Me._adapter.UpdateCommand.CommandType = System.Data.CommandType.Text + Me._adapter.UpdateCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@LastName", System.Data.SqlDbType.NVarChar, 0, System.Data.ParameterDirection.Input, 0, 0, "LastName", System.Data.DataRowVersion.Current, false, Nothing, "", "", "")) + Me._adapter.UpdateCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@FirstName", System.Data.SqlDbType.NVarChar, 0, System.Data.ParameterDirection.Input, 0, 0, "FirstName", System.Data.DataRowVersion.Current, false, Nothing, "", "", "")) + Me._adapter.UpdateCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Title", System.Data.SqlDbType.NVarChar, 0, System.Data.ParameterDirection.Input, 0, 0, "Title", System.Data.DataRowVersion.Current, false, Nothing, "", "", "")) + Me._adapter.UpdateCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Photo", System.Data.SqlDbType.Image, 0, System.Data.ParameterDirection.Input, 0, 0, "Photo", System.Data.DataRowVersion.Current, false, Nothing, "", "", "")) + Me._adapter.UpdateCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@TagID", System.Data.SqlDbType.NChar, 0, System.Data.ParameterDirection.Input, 0, 0, "TagID", System.Data.DataRowVersion.Current, false, Nothing, "", "", "")) + Me._adapter.UpdateCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Original_EmployeeID", System.Data.SqlDbType.Int, 0, System.Data.ParameterDirection.Input, 0, 0, "EmployeeID", System.Data.DataRowVersion.Original, false, Nothing, "", "", "")) + Me._adapter.UpdateCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Original_LastName", System.Data.SqlDbType.NVarChar, 0, System.Data.ParameterDirection.Input, 0, 0, "LastName", System.Data.DataRowVersion.Original, false, Nothing, "", "", "")) + Me._adapter.UpdateCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Original_FirstName", System.Data.SqlDbType.NVarChar, 0, System.Data.ParameterDirection.Input, 0, 0, "FirstName", System.Data.DataRowVersion.Original, false, Nothing, "", "", "")) + Me._adapter.UpdateCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@IsNull_Title", System.Data.SqlDbType.Int, 0, System.Data.ParameterDirection.Input, 0, 0, "Title", System.Data.DataRowVersion.Original, true, Nothing, "", "", "")) + Me._adapter.UpdateCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Original_Title", System.Data.SqlDbType.NVarChar, 0, System.Data.ParameterDirection.Input, 0, 0, "Title", System.Data.DataRowVersion.Original, false, Nothing, "", "", "")) + Me._adapter.UpdateCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@IsNull_TagID", System.Data.SqlDbType.Int, 0, System.Data.ParameterDirection.Input, 0, 0, "TagID", System.Data.DataRowVersion.Original, true, Nothing, "", "", "")) + Me._adapter.UpdateCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Original_TagID", System.Data.SqlDbType.NChar, 0, System.Data.ParameterDirection.Input, 0, 0, "TagID", System.Data.DataRowVersion.Original, false, Nothing, "", "", "")) + Me._adapter.UpdateCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@EmployeeID", System.Data.SqlDbType.Int, 4, System.Data.ParameterDirection.Input, 0, 0, "EmployeeID", System.Data.DataRowVersion.Current, false, Nothing, "", "", "")) + End Sub + + _ + Private Sub InitConnection() + Me._connection = New System.Data.SqlClient.SqlConnection + Me._connection.ConnectionString = Global.Attendance.My.MySettings.Default.NorthwindConnectionString + End Sub + + _ + Private Sub InitCommandCollection() + Me._commandCollection = New System.Data.SqlClient.SqlCommand(0) {} + Me._commandCollection(0) = New System.Data.SqlClient.SqlCommand + Me._commandCollection(0).Connection = Me.Connection + Me._commandCollection(0).CommandText = "SELECT EmployeeID, LastName, FirstName, Title, Photo, TagID FROM dbo.Employees" + Me._commandCollection(0).CommandType = System.Data.CommandType.Text + End Sub + + _ + Public Overloads Overridable Function Fill(ByVal dataTable As NorthwindDataSet.EmployeesDataTable) As Integer + Me.Adapter.SelectCommand = Me.CommandCollection(0) + If (Me.ClearBeforeFill = true) Then + dataTable.Clear + End If + Dim returnValue As Integer = Me.Adapter.Fill(dataTable) + Return returnValue + End Function + + _ + Public Overloads Overridable Function GetData() As NorthwindDataSet.EmployeesDataTable + Me.Adapter.SelectCommand = Me.CommandCollection(0) + Dim dataTable As NorthwindDataSet.EmployeesDataTable = New NorthwindDataSet.EmployeesDataTable + Me.Adapter.Fill(dataTable) + Return dataTable + End Function + + _ + Public Overloads Overridable Function Update(ByVal dataTable As NorthwindDataSet.EmployeesDataTable) As Integer + Return Me.Adapter.Update(dataTable) + End Function + + _ + Public Overloads Overridable Function Update(ByVal dataSet As NorthwindDataSet) As Integer + Return Me.Adapter.Update(dataSet, "Employees") + End Function + + _ + Public Overloads Overridable Function Update(ByVal dataRow As System.Data.DataRow) As Integer + Return Me.Adapter.Update(New System.Data.DataRow() {dataRow}) + End Function + + _ + Public Overloads Overridable Function Update(ByVal dataRows() As System.Data.DataRow) As Integer + Return Me.Adapter.Update(dataRows) + End Function + + _ + Public Overloads Overridable Function Delete(ByVal Original_EmployeeID As Integer, ByVal Original_LastName As String, ByVal Original_FirstName As String, ByVal Original_Title As String, ByVal Original_TagID As String) As Integer + Me.Adapter.DeleteCommand.Parameters(0).Value = CType(Original_EmployeeID,Integer) + If (Original_LastName Is Nothing) Then + Throw New System.ArgumentNullException("Original_LastName") + Else + Me.Adapter.DeleteCommand.Parameters(1).Value = CType(Original_LastName,String) + End If + If (Original_FirstName Is Nothing) Then + Throw New System.ArgumentNullException("Original_FirstName") + Else + Me.Adapter.DeleteCommand.Parameters(2).Value = CType(Original_FirstName,String) + End If + If (Original_Title Is Nothing) Then + Me.Adapter.DeleteCommand.Parameters(3).Value = CType(1,Object) + Me.Adapter.DeleteCommand.Parameters(4).Value = System.DBNull.Value + Else + Me.Adapter.DeleteCommand.Parameters(3).Value = CType(0,Object) + Me.Adapter.DeleteCommand.Parameters(4).Value = CType(Original_Title,String) + End If + If (Original_TagID Is Nothing) Then + Me.Adapter.DeleteCommand.Parameters(5).Value = CType(1,Object) + Me.Adapter.DeleteCommand.Parameters(6).Value = System.DBNull.Value + Else + Me.Adapter.DeleteCommand.Parameters(5).Value = CType(0,Object) + Me.Adapter.DeleteCommand.Parameters(6).Value = CType(Original_TagID,String) + End If + Dim previousConnectionState As System.Data.ConnectionState = Me.Adapter.DeleteCommand.Connection.State + If ((Me.Adapter.DeleteCommand.Connection.State And System.Data.ConnectionState.Open) _ + <> System.Data.ConnectionState.Open) Then + Me.Adapter.DeleteCommand.Connection.Open + End If + Try + Dim returnValue As Integer = Me.Adapter.DeleteCommand.ExecuteNonQuery + Return returnValue + Finally + If (previousConnectionState = System.Data.ConnectionState.Closed) Then + Me.Adapter.DeleteCommand.Connection.Close + End If + End Try + End Function + + _ + Public Overloads Overridable Function Insert(ByVal LastName As String, ByVal FirstName As String, ByVal Title As String, ByVal Photo() As Byte, ByVal TagID As String) As Integer + If (LastName Is Nothing) Then + Throw New System.ArgumentNullException("LastName") + Else + Me.Adapter.InsertCommand.Parameters(0).Value = CType(LastName,String) + End If + If (FirstName Is Nothing) Then + Throw New System.ArgumentNullException("FirstName") + Else + Me.Adapter.InsertCommand.Parameters(1).Value = CType(FirstName,String) + End If + If (Title Is Nothing) Then + Me.Adapter.InsertCommand.Parameters(2).Value = System.DBNull.Value + Else + Me.Adapter.InsertCommand.Parameters(2).Value = CType(Title,String) + End If + If (Photo Is Nothing) Then + Me.Adapter.InsertCommand.Parameters(3).Value = System.DBNull.Value + Else + Me.Adapter.InsertCommand.Parameters(3).Value = CType(Photo,Byte()) + End If + If (TagID Is Nothing) Then + Me.Adapter.InsertCommand.Parameters(4).Value = System.DBNull.Value + Else + Me.Adapter.InsertCommand.Parameters(4).Value = CType(TagID,String) + End If + Dim previousConnectionState As System.Data.ConnectionState = Me.Adapter.InsertCommand.Connection.State + If ((Me.Adapter.InsertCommand.Connection.State And System.Data.ConnectionState.Open) _ + <> System.Data.ConnectionState.Open) Then + Me.Adapter.InsertCommand.Connection.Open + End If + Try + Dim returnValue As Integer = Me.Adapter.InsertCommand.ExecuteNonQuery + Return returnValue + Finally + If (previousConnectionState = System.Data.ConnectionState.Closed) Then + Me.Adapter.InsertCommand.Connection.Close + End If + End Try + End Function + + _ + Public Overloads Overridable Function Update(ByVal LastName As String, ByVal FirstName As String, ByVal Title As String, ByVal Photo() As Byte, ByVal TagID As String, ByVal Original_EmployeeID As Integer, ByVal Original_LastName As String, ByVal Original_FirstName As String, ByVal Original_Title As String, ByVal Original_TagID As String, ByVal EmployeeID As Integer) As Integer + If (LastName Is Nothing) Then + Throw New System.ArgumentNullException("LastName") + Else + Me.Adapter.UpdateCommand.Parameters(0).Value = CType(LastName,String) + End If + If (FirstName Is Nothing) Then + Throw New System.ArgumentNullException("FirstName") + Else + Me.Adapter.UpdateCommand.Parameters(1).Value = CType(FirstName,String) + End If + If (Title Is Nothing) Then + Me.Adapter.UpdateCommand.Parameters(2).Value = System.DBNull.Value + Else + Me.Adapter.UpdateCommand.Parameters(2).Value = CType(Title,String) + End If + If (Photo Is Nothing) Then + Me.Adapter.UpdateCommand.Parameters(3).Value = System.DBNull.Value + Else + Me.Adapter.UpdateCommand.Parameters(3).Value = CType(Photo,Byte()) + End If + If (TagID Is Nothing) Then + Me.Adapter.UpdateCommand.Parameters(4).Value = System.DBNull.Value + Else + Me.Adapter.UpdateCommand.Parameters(4).Value = CType(TagID,String) + End If + Me.Adapter.UpdateCommand.Parameters(5).Value = CType(Original_EmployeeID,Integer) + If (Original_LastName Is Nothing) Then + Throw New System.ArgumentNullException("Original_LastName") + Else + Me.Adapter.UpdateCommand.Parameters(6).Value = CType(Original_LastName,String) + End If + If (Original_FirstName Is Nothing) Then + Throw New System.ArgumentNullException("Original_FirstName") + Else + Me.Adapter.UpdateCommand.Parameters(7).Value = CType(Original_FirstName,String) + End If + If (Original_Title Is Nothing) Then + Me.Adapter.UpdateCommand.Parameters(8).Value = CType(1,Object) + Me.Adapter.UpdateCommand.Parameters(9).Value = System.DBNull.Value + Else + Me.Adapter.UpdateCommand.Parameters(8).Value = CType(0,Object) + Me.Adapter.UpdateCommand.Parameters(9).Value = CType(Original_Title,String) + End If + If (Original_TagID Is Nothing) Then + Me.Adapter.UpdateCommand.Parameters(10).Value = CType(1,Object) + Me.Adapter.UpdateCommand.Parameters(11).Value = System.DBNull.Value + Else + Me.Adapter.UpdateCommand.Parameters(10).Value = CType(0,Object) + Me.Adapter.UpdateCommand.Parameters(11).Value = CType(Original_TagID,String) + End If + Me.Adapter.UpdateCommand.Parameters(12).Value = CType(EmployeeID,Integer) + Dim previousConnectionState As System.Data.ConnectionState = Me.Adapter.UpdateCommand.Connection.State + If ((Me.Adapter.UpdateCommand.Connection.State And System.Data.ConnectionState.Open) _ + <> System.Data.ConnectionState.Open) Then + Me.Adapter.UpdateCommand.Connection.Open + End If + Try + Dim returnValue As Integer = Me.Adapter.UpdateCommand.ExecuteNonQuery + Return returnValue + Finally + If (previousConnectionState = System.Data.ConnectionState.Closed) Then + Me.Adapter.UpdateCommand.Connection.Close + End If + End Try + End Function + End Class +End Namespace diff --git a/Chapter05(RFID)/Attendance_Phidget/NorthwindDataSet.xsc b/Chapter05(RFID)/Attendance_Phidget/NorthwindDataSet.xsc new file mode 100644 index 0000000..2dbd3f0 --- /dev/null +++ b/Chapter05(RFID)/Attendance_Phidget/NorthwindDataSet.xsc @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Chapter05(RFID)/Attendance_Phidget/NorthwindDataSet.xsd b/Chapter05(RFID)/Attendance_Phidget/NorthwindDataSet.xsd new file mode 100644 index 0000000..2ad06dc --- /dev/null +++ b/Chapter05(RFID)/Attendance_Phidget/NorthwindDataSet.xsd @@ -0,0 +1,159 @@ + + + + + + + + + + + + + + + + DELETE FROM [dbo].[Employees] WHERE (([EmployeeID] = @Original_EmployeeID) AND ([LastName] = @Original_LastName) AND ([FirstName] = @Original_FirstName) AND ((@IsNull_Title = 1 AND [Title] IS NULL) OR ([Title] = @Original_Title)) AND ((@IsNull_TagID = 1 AND [TagID] IS NULL) OR ([TagID] = @Original_TagID))) + + + + + + + + + + + + + + + + + + + + + INSERT INTO [dbo].[Employees] ([LastName], [FirstName], [Title], [Photo], [TagID]) VALUES (@LastName, @FirstName, @Title, @Photo, @TagID); +SELECT EmployeeID, LastName, FirstName, Title, Photo, TagID FROM Employees WHERE (EmployeeID = SCOPE_IDENTITY()) + + + + + + + + + + + + + + + + + SELECT EmployeeID, LastName, FirstName, Title, Photo, TagID FROM dbo.Employees + + + + + + + UPDATE [dbo].[Employees] SET [LastName] = @LastName, [FirstName] = @FirstName, [Title] = @Title, [Photo] = @Photo, [TagID] = @TagID WHERE (([EmployeeID] = @Original_EmployeeID) AND ([LastName] = @Original_LastName) AND ([FirstName] = @Original_FirstName) AND ((@IsNull_Title = 1 AND [Title] IS NULL) OR ([Title] = @Original_Title)) AND ((@IsNull_TagID = 1 AND [TagID] IS NULL) OR ([TagID] = @Original_TagID))); +SELECT EmployeeID, LastName, FirstName, Title, Photo, TagID FROM Employees WHERE (EmployeeID = @EmployeeID) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Chapter05(RFID)/Attendance_Phidget/NorthwindDataSet.xss b/Chapter05(RFID)/Attendance_Phidget/NorthwindDataSet.xss new file mode 100644 index 0000000..5f28270 --- /dev/null +++ b/Chapter05(RFID)/Attendance_Phidget/NorthwindDataSet.xss @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Chapter05(RFID)/Attendance_Phidget/app.config b/Chapter05(RFID)/Attendance_Phidget/app.config new file mode 100644 index 0000000..f541ced --- /dev/null +++ b/Chapter05(RFID)/Attendance_Phidget/app.config @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter05(RFID)/Attendance_Phidget/bin/Debug/Attendance.exe b/Chapter05(RFID)/Attendance_Phidget/bin/Debug/Attendance.exe new file mode 100644 index 0000000000000000000000000000000000000000..8483fc22a00678a47c42d9e5b2b7c7a3a03ad718 GIT binary patch literal 86016 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter05(RFID)/Attendance_Phidget/bin/Debug/Attendance.pdb b/Chapter05(RFID)/Attendance_Phidget/bin/Debug/Attendance.pdb new file mode 100644 index 0000000000000000000000000000000000000000..5e72a7907cdfa20cd00f2fd0f10f6b6ddadf76b2 GIT binary patch literal 189952 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 HAP4>nN_zws literal 0 HcmV?d00001 diff --git a/Chapter05(RFID)/Attendance_Phidget/bin/Debug/Attendance.vshost.exe b/Chapter05(RFID)/Attendance_Phidget/bin/Debug/Attendance.vshost.exe new file mode 100644 index 0000000000000000000000000000000000000000..ce3f102c36be07551ba7c7fad64c8b24709bdb91 GIT binary patch literal 5632 zcmeHLX>3&26+Umg;MiccvX$*QEU{T$9osBr9ou8T!CO4GX{f1rGjlzDVoO|!Prgq~qltDz9r~?B;$Ix=|OT07mVmN>1Z}RE2drlP`Q)*5X zG<6uR8guNZqj#!d-Lh;?4GGnWTdHBHf%>4@X-9-MYENnj=gbf*dm1jLN#cftptQL=|aWNfvWlQP?*hWf2t+?Lo}%k$q{6hp9nL zgjRO$01v%$;r&I$YdXI8&)FG$2N&cn{PM~EIUlboSblZ6|HQ<{cD(w-H$Pi{GB!Q7 z|H6B@KUnhF)GHNJoBn(6mQTf)Ia@0-J4*9+&;GPbIdCa>RcoH#{Qln`m|0=hKQWNC z!#y@@!#j(1Un%|Q)aTD`kDfW+w4v>(rqa#M$bmyo{cgLmeRW{M$FpYm3da-W&f8x& z0nLKxvau(Eo?AGHIeD_NCo>0YuLwR+p^ze1#Ifrt(TcT2#Y;+-Fe_7rvIeo7wS(yA zX#bP}I_Nou6?Iv{Lq2$0&05=B9YEWMekRLTn0AN-P|#J@A{QJ}x~7y8++mAT5@Rw| z@Q22sG9U6Nxk<0GsfFs1h&|K+JVrkSo|br>`a#cB7|RvrMHFKBr(Uw zl5-@k@UiBtzD8d*9q>KoTQAp`O~3WAt@psmrLqha^n)4xjBMH^@f9F@n1~ujPf^Cu z1X8hoxc8RIqmNGBB-e08_V!a4+g72m#M~*saoB2`Xc84k`hJPumRK&aTH=EeACjm` zG$d}7*dy^#;3Rrn;NPL;}jK9&ZX=lbcdYSfRoToq2>!3ASPn#8u z^5_H5<0%vLR4N9}qQ$`Zh^$7XR0mux@nJd(I!OC~-=*IJ!;-UI&T=Kai#`PZNxBT& zOIH;?y#RZey+d~b$L>D*2U4BLHo7PZt&wf=(v$RGXdorBqSlVYO|go)+z#9IG|?@n z%JQ6^2HUVasx`un?b_|0)?&DE-3)s1h+%8%Ad2nU;Mif|y42~0ZO1f16zp+5(Mk28 zEh6lZ7WQn1YIVa(4rq;W%QHHKR%v&}3{yBk;dB{LLCFE;>z)xZOvCFb_i!dcaZe1+ z7VReV8n#8{t}8l2X3u)jvj&QWL{kF+Vd_0WBWeu|C7jb5g=@zhHd-g*o}-(Cj2hjF z#`S2LwxI3_6TXN_8!^$tUW;&C*dJ1wvR7@j+fFBZw=LZqR*HQcc5v8%N;}r$7|{;z zRXI0nx6BteC@kn? zx7}3wC`~t$^_JixeXZ}r;oYm_b%)++Tlw0>+HX%C`+@-Ake_bp%{*%iWKZ&%~jNE(TX9o*6g%-Rh7EHhP*OlHTd*KJ4?D*a4-;jvD#}$T zOIQn=@p>DHr7y*I8$Y743XSBB{D^C1B}AnPX@5AP4(=bd(sp9DBln=DmYb$353H*? z$g9&OB6vF%DKvX%LSbW(nz&Qd#HFe-r=+-e5z#jlnlL1prkZH9Lb+*IH9O7$Qj&K* zi1dqo@D0qF`iTGURq zl$y==AvIxC2iL{8P9EfJ^b+N0<`}+a;gbg`1N`W1H1*>kDp+;uS4JU@0csxjmC)CT zpTKMnR`9n2umfBdeGU9>R4z4m@TcTs(x)CoK$mlQycQmW;RnyOu?i1|k+nM%lbG(k zU)oNsIsglXDI;B4QqNAHkZxdK@%Jm&3M+mh+d;;>sRJgjdxC zjKDHcB4+hTNzOL=or(eXIE%yQ&!joDM74@5pgblnV%bN-JGR6=O_ohmcu4Tp%XjSM5Nh|8#A5K!MWx={dKuZ TBcLY!&!}P9UAq3eeA)j4ZC9R* literal 0 HcmV?d00001 diff --git a/Chapter05(RFID)/Attendance_Phidget/bin/Debug/Attendance.vshost.exe.config b/Chapter05(RFID)/Attendance_Phidget/bin/Debug/Attendance.vshost.exe.config new file mode 100644 index 0000000..f541ced --- /dev/null +++ b/Chapter05(RFID)/Attendance_Phidget/bin/Debug/Attendance.vshost.exe.config @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Chapter05(RFID)/Attendance_Phidget/bin/Debug/Attendance.xml b/Chapter05(RFID)/Attendance_Phidget/bin/Debug/Attendance.xml new file mode 100644 index 0000000..afe0f32 --- /dev/null +++ b/Chapter05(RFID)/Attendance_Phidget/bin/Debug/Attendance.xml @@ -0,0 +1,11 @@ + + + + +Attendance + + + + + + \ No newline at end of file diff --git a/Chapter05(RFID)/Attendance_Phidget/bin/Debug/PhidgetsNET.dll b/Chapter05(RFID)/Attendance_Phidget/bin/Debug/PhidgetsNET.dll new file mode 100644 index 0000000000000000000000000000000000000000..c6f8b490ed6b3ec5988610314922975645d4d406 GIT binary patch literal 49152 zcmeHw3w%`7wf8z_X3k6|4>L)aJRyT3LU20+ zyTuk;>`%F95oxPdtM*}i7p=9`YOnUHKW){k_Ig`e?^RoEwb$0~zt-Mo9sv}gU;F*; zmkDQ`{a<_Swbx$zz0aAU`Sk7NAR;HOk3S~52Y3D~6#B_z7}0r^_vO*|vYr}$kJ0qh z_>Og!s!PS4HtPSC1b8;F_=2QB_> zYrUP@tCTlB+wc%=2PdGok#FnpKE?|bKVR9+9JXJ53?lIPgK~ilAlSYqqeZ3&dRK91 zA5jTAV&vylq8#w9y`89HWZWm=01--%{CI$uCK1u}L~wHgIPpag#7SAT-9YjQ5S=qU z7LWA;iEaB3V42;x(mo5}km<2tI0`|wm0rcga(CiN`z$0{lmikj?SuPHFLE?G$BRD_RKN zAQT(f?x_>q(IUX9EBtHl@&b}A=8)ToP?tr%U|eyWm;@9n>dk^0gj7ZnhuYe82gcpU!meEpSP+u z?O@6euke*i+^Wf_G96lT6=hdD={)fH19tp4{*=Y>) z81E1ab(&k57DuOmp~B+)=v2mzp`%#DIh2RnE4dS6|C6#f+2@GDValzBjoH->YEfp9 z=^sKfgnG_DiV|q;(diOoTcXEHP%K7ruW81A4%bC7%vhY+v4-~ED^#WXx0_C=Re4!e zRuzvo3(;B8TF~A_*?V(ovl~b?xd8GDoJpP?h+u82I zEMHcocXb20Jng{sAS%GVkO{2?J_Fahdq6zJJ15m3yIj*#q7)3FvYc7lz%*i4B7bu$ z5;-T$gixVVIEAkGEJl{klIDkzjhl6JHZ#!xCyj@dg)T0@7m@||HgZ-~GfsMlbQqsY z^hW0(<-Cvo_VLGTjL{cEKJH+jjq?xzMz8 z2>sP*dP;SH;548zjZkQyC>n!>x_T0~DC*cUi>0dPZGjc$B>2Fpf)rYgHE#{Gbog`? zmee}M60l--*ae+8FHL$X!pS0G#6Xc?45l`83tUsG%nNqIoZ_9u@u%4kv?63Hyh`uR zN^crB_F^)J=l_Zf-%rAy0BVa3-S_hHD4*Lh(am(+zpC)j=m_kWDh{wqB*5N~0QV6I zplB+_&HP`}@8x>ZYbOH*C4&ieopoB+l42G7{Jo6YC z(12JxIuG?XHQ(X}1r}#H(=4v?S3Ts29c9vhiZ}gLj#yy|76TTipda#td>!-w@kUIoU*W~xACR&1^gd1EK)P$Gh}j;{%iit%7?o6 ziO4X15(ujKWZYC;95{cBcK?9<(MDmJv{|e+bpV!_sdT=#%YF^G_@MgLZ?tis#(1 zS7CTCyp~_fUO8m-jODnd@^vcL8S8d3uaPF~E%}3hkbm&H#@HzBcasAOjprL-(_5(amRHy9i)=P>3F z4rBRf@!rC6=-D&dU8*J;)D0mELI>yEt>{7+GSMpL6{Tfbso5_nPzwReZ^!?fHS`Is173|ti_|NhgYo}Dv7nLA+FRT zgS=`bK4+O;E<2@3c(bDQ&^GPXSBkO*Q40yFTh%nZ% zH`B&E2d_B^(~|E3c*;2~5IX}|KaIi9oU{~bqKzQ&Q$f7eFiVJ7RoMlYop^K@mirNp zodqL%@IQF$Jfi&3h%pt*SXrv?Xm0jcxeWgGa$l3NK-Kwy#sWP^?mrf!`ac#WN-_KU zpE$;FX*0(dU2fI7ct<`FBKkxDEzTTbEIV2if!^v(q$2F|1T zgjpH53Zs=Vgn`AG1lR;S&2d-37-J}q76v29ho_U_W75JCI4srd_f9#*+{)Oh^xj}@ zWhpE0TL%#UC%60vuzoAR@2LQA1{zq!onC8P%|lf(-*14uhr90DZ*u-@L&rh$A2E^1 z9Dbm6-x1|M&fJP=MurZ|Tyn>(<*b@$Zsl5XZ08VHo(i!y9XpuE4pt%dy9#k#AOv6X z_|Sp7TBA7+WsRm+9_~+C<0wme(uHDeFSy!|i?Knn;oF{ixm08=T=b2ePXZ(3+i7p1we4ld{ zpKr3NEORTHT63?z&^7PJD3iYs=Syxjp;SyrJFv1|@lKT9R%pFKJ}Bb~@ws-a7Ut=y zR)A9xXYjd$|9A&9`rINlL){pw&MER-hpcEu@qyT#HD#vH<#WgXjmv@60kYWo~8fE|~uD#~<70JD;bLJ>;#%5X7?u)*$wHi(;5VjAgu45vkci zB2we6nlG5i<1ODa$6Ho*_~Y%N&lgye+xDYTnnR4meib41ry^4JV=asMf`!oiN$3^64wJe9-t=$~h9Wz3_$jOHaZ|84jC81x

j4kXv%e_llnDS}O!~UEp)s7NRr`i$bV%TJVdUhbO zCoBFc4@|w1SlC%Nc#1o7JgQ=9ej@#HCgk<<6vLf4#5gTNI&3N;`Me8zIrLW+=Kjj} z%>K$r4!^&;4!OUc3tyr=`_M-h@hT4EDEC(h&qxc`aMsHSw+K<;c*KfM5_{-ed zG2Yto7HX9(bXzy7Q%Cahuc)Yb<9&w^5>%kr|Uss;X-W7c=8hO@l%jw zfRot%{FL@Ri$!@|5kbDC$TvCUc=`CvZsSs6lGExL`Dni>+&OoqmHmlUW}EK#@3`q- zz)jy8lC+jI2^h(FqZ6nxa-13$PlQp)v2cvJm9ah2O;~uNjCA8_ek1eTf$Gb9i1k%= zWW(GMx0fTzf1>gW1~swcv#(9Cc~WZ=o{Q4YuC-!}k!W2f9C}+4QQjjgL>fJ1<6y`f zVk~2qijc7@6_FadaAJmb&q6$Q@jY|w;xvapcI6(%*hRDU4V?@-^w`Dllr;G2f}sU~ zc3;ETe%NDIW#N%E#)HlIhdOp0S^j7!>?Uq7;t(E=lxNtkPZ@(w;*>lNEQkMi>^txn zB#syLY79!@&bfs+{r@$OF;}ZGM&c}~I#iAmdLOayoE>)#+aH@h9}M({>>oqeUcfM@?X`1iC-JQm7*L*tAU^9)=X2g%E*@{wKe+(RKNa_dX%PjQ--tW=hwbDK+LXw5;?DYQpK_U5&w%FR zCLcVr5dIR4S)SA7Y5p?YS-)Ke?6+gHfIp{n+y3En!oMgb3zp>1d?)y}EzIY1Y!CO# z^bgkq^W*7EgbOu4F@n$jX8A$fZ5vqxdko=Y;7j_3`L>^DAe?TG?a!r}Z~N13CmX?M z{p=h5*!)chr}J&UZ3dt9+j;mAW;?fNdEDe<%MSyk+i%y)dEnbRIDyUIIzryI=X~(l zMq8KN4u>?~ZlAV1^X)q1JNI>dZ3jn9zRFyAc>#}EVz0(jRhU>#?DooY@3s#1H-#f;L2jj83)Dk{BIB5 z58xMs_P9&*y)^b!PVX*@JtX(?*b8#6(DBIG;`ni~3b`X^rJ&Lqt5=-tSdR**Hz4-7 zD|2I?SDd`qZWTBx_K*tX$6itaUo6kfiYp6Z^HiWPwo(O(VjERpOzc_}@W&pJ!0?S+ zrim4CjH2FSpMC;pQVW8^dl16FtX`eq>G@_b^z=Ll6*oWTKF3rPTNznoL)y_ zQ-a+W3uiDmg}u@&O0G2jE_>?yfAai(MEPT0zX`6X;=XGV_Kl<&vuoIA&jM+C}n_kp%oIi}@_|Ato;H}I-L>2#ynNIP0}5@jbI|ahk*LTfRf?TQlKJ>0A1I`BqqB%D6W4 zEe_h7hfVAl93zW89q=cXCTOpJ zzh`@*AJ6uXCD)1UgFmJJh-rm*|NB&3zc|~i&{a6{h}S;B!P<3u8QI)~Ca_v+mzj@py9Jcj>%PeMs-}tNxtABcspkxz(oV!09>>1N=BRP(XdcHH z%Q&VYWE@LHq{cDq0kB43As)y0o;i+jn!_K*{)$>TwD&^3pRylwggL}m>{k(De<~tn zf2G*ZLTo?ZGwtUzhi|`e$m1~Y>Cgs!_H(|wUWxz8O@{^)ae!X-R<-obY~6JTFCcAU%Iko||Tn};2az_wV}H(+8Kwh|wsuYewD>6)XXD{VXm|?tJb2NEKr}mR zmwpPys%jqd7dodz9m?nupY!z268$vIo6cnA=v&@wXyM}coI9phn*2%w*FR8_9e!^f>ToWDXIH)EJKzOoRWG#Nx`2I%aEl6$C5e1g`DF)zPW~esD+rz!ZzmUs+4N@ zffGHVr5Lib;FQ#ll+>d-mLW?CPI=kWC*FR@!2N1m;r1=@M6iE)TQD9SjP(ZN$xvIcyDu1<8t9MrMq}Yn&(y%m zU@RVrMozAoUd?|~19gMp#9%CVawIsIh;@gj23iMu!lB+}!7Uxp^})!=J#*)F&+eT) zXU6=Qvx3$0<{z_vW`mJLs6S}u-X7$4W|N=R+Is%SHZN*Fb&;V@4RU}tvJtbZ=hooK z1%ERp40;b1y2o5VGy$8*r^h1Po`{7aYvU~OUIWn!ZtzyL)055WjO~~uD;nz&_Y&}J z7UC9#qdhE)56m!DU4QrFEC;|}jG6oZkA1cn*A!e&;3@}W02kW0d@rW}ca{m@%EFb0 zi!m1obAyB#+dMmrE+Ra1D{6Kuc39LQ^lVTs)i^7iUaAAN=xk>PXhi6CYsj+baqAw? zzgTa8{>0B|pB3sY{=je1aYDO_7ZzL8FZ3ee>=gQap-&5aQ>aPAZ*P3VTX9-?-4tLN5?{ZRxgBFMY3+?Z02><3gVm`c~;{ zi2X=tc^QYNlyMn*%2;zk!dI7ZdA}j_LGV#V3BMs>PxV`3cabE z{qu`*PW7MVD`2^!g6$ty!JK1+E~)sy@1?UUCL;HZpcZ{W_+JtFw$LeKIn@bcIn_c? zRG_XcZjS~|Ys>Ivxl6)~rUQ9!KSttC7BoiAP4lUVRzlKGb0w}{;!5a5LFWr9r+Pu# z1x=!}1??4dJWfYBhkFIhqVokkCFlgYLeMV-okU-PmHG5LAQ#^I*(q`FN!(4eOHi)C zcHV+N)>$g(cKW`c34-pR2L#Oo%A&jJNkMgjen3AL)Gp{AdRkDAp!?|G1Z@`d06j10 zDnSp?i-Nu`=wW(U(8Gd$M6U{ZUeJ%}*Mfd4=rMXj(EEaZLcbA|Z?a{NqnubB(L|tJ z^vt&e&DZE1K}{OHC+KXAJ`l7?qmKlANh1L0yj3HopvN`x2zpJU96^85C|{7}P_`5a znxIh$cX_%M3uzbZtS}0JKLpA(eg=dyNwjlCuHyG-o5|dS^4}R_AG;7of*E>2jgloSgO%7mqPd2z}0#i}0_7z9)32^&Rrj zi`L_ymiws@@~65v?FOOe3%yL})$ZSee}m9l-ESj&x6sFgJ}dNfp?`97j;802pbI=M zIQH5s)~U294STX!!*_%#$w#xMLGn~DOSX9zAiPRwNaz-C9XQ3=9D8i`IS5Y`I#=kj zY|e3Yb}#rUuh+6!gOc~DP}dtB8R=AR%`^^|2}zJ*kek9j0XUmC;OUX!$c7W&t;@OVG>4#l5| z8PK35LKSDdpL>T2Um^S}gtN=fI&D77Fu%|!9{ZH5H9!=g%RF~DiXjuy=sqBmE&(EX z)cC1mES^i{k5`f}IF7>@HCdxy1G%Ukh$Y{3Ov8HPX&pz-d3Y}Nrbb>M4>^xklEuyi zm;ts6x`e*sT!FRJtH*HMC3J)H41E9XEkPI2x18NrkzF!@<1VA`I@e;>dq>ct#=Xw< zK!4EaAs`>UrzIbQWC5LtwI!!}!npw`sL>0~jd=1G(dbQ}BHE0Iv=Autc$6JPU0;+T_!oyP`#jwHEI&{6_4Nj3?whrsLK63 z&^C?cxPJw-L(pa7&zV$oyy!%0-HUbMmo;L4o=7`2Vt<}Udo)_%W^|iIz3z=b&T6HF z{c;kWBS@9#6xylc#Lfk@2PlA^n&M2koxl0ZW^t3`!z6NTYsVw92HPTZW4STlYo#^K@`l6thHToAp zZ)kLjr`Twww>A0!&~o}vqsKfIMhiJ+sT`gIYNcF_-Ud32iZ#m0sxaDUf<}R?@kTpc zqS5hL#~CZ=OByu-t)iV8^#ZM?n>9Kw>vB4S+_P1FS7u#EXHvc(~u1l69XO0>i^*rcpF*XqzEbElkvzaz4 zBqiERA85p_=X~0DvPjY|P@-YFK%+eG3S*eA(CB5Li|ET5{l$AaUIp1LNZEM_{Zu2i z^HQ33in4P}_B!J-I!&WZK$lY(i0%ABcGS3nJ`kkryppOHC|h_`yprzJi0!zxbdEyerEBO_ zjX3w~=&VH|NpEMbFs`R{8d1*a#trnaM%*TL)02W!e!J;CAZ~-RaxOM*q})1%YJv99 zBp~+0X*r)aZldoAQnu`+w-gdv_ENZB<<7R;Ouy6U%$z~vHu{4`J%awC(O}LN#9=GL zImlRkJ5AMy%l>Wp!l|NDTF4z#(#YuQlA9_Xcill>K^$A{DB5P;LAPmC3Unv^RMI_a z)D(Tiyo)-PrL=s9o>WMz{th)YNt}$rcheIZEiT$h_tCQ&on5rTxR0`MT7-I_exUoQ zP@^l0PB$K)aT;-LK1BQqtX-lXQmaN>qJ8uZ5Lfg{;HR4h6_jH3sJH{~jhDJAydC>el z-K7zam~YYj8r_W&{TJ;Mq)PNQeWVe4@E!W`O52vl%y;Qoh3J_vPnv(Am(t??K)+9m z`y>4^8P`pJq^woS>i-;bF}+VdjoyZx?^CHlDD82^`*ggH%kpofKhs=|3Ir`kN{%=F zOe@kPKcurXs`6h*A5t(W`HcA?eJ)M%Bl^5XP0;xfeOaSkK|7P_PB%WHJJZtrjqcHC zvwzU|8|_O<9tZS%nj{&oX!IrMB;!Aml3Q@#_P&n$Dzq5JUz2eg$S`s`m6vw=FDBC{ zQV4!I-7t+R9rsP7a~d@ov6r022}#K?M&dfgv#EKMR#*OZa2IT^RlpK#ze#k2=s_iuHamPDLxMMk=n$+&&~%N(6a^t%5l z$LUGL>CVnb*OiRh=fBp`okXwuzvk#oB2LHeG^XldT{3Q;|5nGjN%Xq^E=M?tI2}KK zFzC&a6m^%T!is+|P7fqa3W@wBWd{!b0(^rMtt;p7vQMPV5__7^l|s)D+6Aie!W)?m zJeZ=e@KgC_@~`l7Ug`8-M1$fed(w68uT62%?N{DNPj%>)?4SFg`24fx_2)5M>QASp z_6$pYS~%Tf${YVU%MWDR{xy=`N{`fIc8-7FT+-WNy5_^T)});{_qTi2{x$MhH6KbX ze^#9%+oA2-|GRnFx%|ESoNn#@e%_z+_wrJ@{k>zkt`%L6ut}SQqx$b(lfB-g@iOiy z{t|>8G&7B}J}sQyCU+f#KO}iwB6)p5!fGx^g&p)|@bSz^Wd23yXsS_fa69??w2crw z;MzbNgl-Xf5$NSOGhzPKLa!5gqtIJ~-X-*2p$`jv9P|Oli=Z3nHPE&6CVf!yh~rIs z`IKo^>CZsROP_JPOD&}r(z~?J|D3~TTw3aKmKryfW`lmK)aM*;Jm4yJ)*62*o#1Rl zcnUb~vdd|_F`;ZG!gI?`f@EFUGN;dIE^7x}Rdz9DLB7+OCFj6C4WpN}=QBDa4h=OVEEc^k0p;`7tbEnY$qQf_X3KbIyB>Ys%LmuXD>b zQmw?+($~sAbk@Q@e*?XvJj?a4@nHEgj)#rM%P*wIjaMN5jO6vA(ASLF72{m58Lbt^ zxf-Ein(IUGPjImx*0_A;pGtSSa=<^%7;mCT4LM+T48(}G+=xebb@gY=p^Go(5c2Fpw*&bmS~tK8cs5P0{%kLQ!jd!ik>FX z&?*`_ByFehBqYx?o&i0_cpkLR_!a0n<5keG@doIC@jK9j@iypY<2}&xjSoSGjlY3j zVmM3>T_HAX6C1XR4LcM+f*_ds3Hp<(+$F0{u7rFlvPb*FQdBElSJdD+72l&f}q!XO^ zlHvqV5A3zTXN&Xky;QUmyko>~C@qEE9$F&wY}lTUrxH2f@N?39>H$T~A(W5No710< zC!hH=1nR;2MMVg22le26B0s{{gYx@CB?#XNiavnniurhxwG81O;>lq?&OIw=uk#9= z?LI-yVO|rZe~tz)(-;Pwj5-_1Q*U4~pHuI_ie(C(@5$$+=4jtwICu)Rt_$_84JP8t z8#<=<;pfaXw(rch!yWkl{+jCQZP?r$>0TR*k^M$u+>Q`kt+D7pFqQ}flWa-ekWAhf zNd#kSx_g7mLJ2!%b2Jf+)kPzTSTt!#ZEtTd9E?T#gOIlcR|P|B*CpD6kvM+pLz~Dw0L6-TYBDP?Cvq!<6;V~lDOiSFKY4I6`z zL~RUjO4bK6aYHN?jisWM?z(l|k+s1Tw=ps>m>9`yjmAR>ye&GCuS?#2pg85J5!zdq zj#Sany*8D3M=)9Pk#fqPBe`isUfLb$LoKA2+GeE+Zgci4yB#sI_%{Cl9~@CMf0TX1weh>g|pv>d|u7b|-=q z55_{>;pKz)aAT-9s9zDLZfRG+KF#jfG7zMJ?s$AtG}fmZ9d-Bhb*ajrSg=33 zF=(Tfh-RzSD1thu1vP4k=z!Fg$f=MPQ=lcH?)v59<-x@C_Gs^V3=h=NJ5U!6q486% zx*-xKuE&eR!R~&F#I-l3H@1-Cskfpj9@BVLEW|xHzKOV}24mdYqOk-uw$}Fb#i(T< z7->V{;H^}!v6VuRPy%^TT{s#K3Zk{qM16OnoA95q!n5!)`%@g3M7DRqKyE4DD~#MZ z&tN>x>6JNROA^7jB_omotDJ1zjdA6C)SZ%rTG5h3NiAs^wg(gG$y; zVo@|24t7VVXGV zF|j3*juwSOk@bqPsJnN4n8!{w8SPPYsGzL|C_^f#5fLh^^r0XrIe?^GGMtpF55)(< z-CJ}4bn8NXVe}ged~uROHihB|8qo6*yFm}eXnfJkq^T*#4%w3t>Qr9N2eupJ61=M3 z9S)r*<0$DD@f#y+qUcLXSo1i`u8|6vXUE6W!Zxob#@>u@Q-XgMr4YL(g-}guRFoQ% zaZo}ng9*$Caf-^lJ%Pa@jz$ii4##DVTiG2R3DfG*54fBp1`q!x;Ja2 zM)VHY!80{xy%5i%u~09i4aG7Vq+>lMq_bKg=|~ktDVNk444piK*AmHqa1|P#U3i5g z1MwoFl(Zn>i#OQADoqk9Ipq$-D#$+I8V|xPq5i>s)je(RsF?1}nK7B3Lgl4r1b7h5 z2Z+&{lQH{gZcD2M*qjd0Ok_qwXXd3)>#An-su+*Dg3~8M62Y`ONXNPg(pfE$bfjD^ z9C31nW<*L%`#=z58w!#U3!D}Ui)%NB;)GHwl3844bAz>;V7jI>+Yi9jML0kVCOx$# zOj{Z0;Y>_{`TGml28<|8rnM*xFOqaiR0{wK!~9LM-lX&;fvqskeYTNTR+wcnB&27g zC$T5*3|>nl1HyQPxkTwPc77*ci2!Rjf*?EXlCzFv)0LD&@q@UOCzM z*;q=G1iE&TxFwPdA~UEFn(19+Y75!Q8(Nn()-P%3=xSL;$?)=)j>Ro2me;3qnj4y1 z+E%AHE0#BOwl>stV4a>!*SLITZBt`?ZQGI*54vhQI%?~dW(syRw6(2hJy2>yw6vwA zZ|GRn(za{_cg6B$%Uf1)b}7k4{0*%3c1UAgv$(dY9q;pXw53W zYRjTitZHanvb1A_L`OqshwRz3P;*O1OIuyb@{YEarlcC#?P!69<#jFf4XG^JI~rPB z({M*aGhl7UinfLkS=H9np=50>%?&6{QnwhuyD6<78?($ZELq*w(q7ln3P)*?+WM8X z%j+8IGhMKxwOu5*wJ2A1)uELrkF}#MbcuY|EGeRhrg3MC;HLY$YaailQe?zccU5=I zI%wRCIbAd695i-z*W81~W#qWO>%??jd0jPKHPtCa>D;cm7401@%?FEYX>Og7ic7W@ zQEpdyDkoh_!q~5!Xt4uTzC@+B6Jew`Bw=K@bylX!)2ptlrAajxrI-6bm#V(ZnEl$j z$RD7m2tT9U2`97R2`i)JrL_q5+@h2tb(^k9ahe*JH`KOub+oLgQ~g@hwPEmSTRoDi z9h2Uw?6xhb?D(asy$f%}^2XMdCgiZ6n-?7{;?$Pa?H!GE%Th+#4QEp*v94?0ytMKG zbO|@yi}@ZN$3WH9+R}#3h4Y^-bk60iwROw*C@2$m)wb6)Hl}gW6q6Fo>9J}AmB{57 zU^oXQTDziS>EhZ(X^xzfaa+S_D;nB$Zi>;`v^pi<)&Q86wbIv)p5{#7eK6h|3k|4k5pRIH)DCfZcYjb$r!>ZG4W*sv$nciTP$VG$^l%lZ;QtlrRy z;snyw8r_5qk1|l02x1r78^b9gH#Ov&4v|!!^Tn|P-4e&?O<3(Qg6jA$xlq!$17F34 zK>q;FFw#%&)G8^HWv`VoxmYn}GL*4NGXQnimSdwwvUtwKjF`4t#yL{Fm-x(*nd&?T zfjVY1M*4!Ap@z3YYR`li#Y7;T9|>+!MNul<4%O zILl^WWCJ_I`c=(xTS^I3B`4Om)EOOf_1d^GvJqdKr^ed&mPjwQ>^N{E3D2j7G9pHl`oJ3(mH5lqk3D-sYSBB!Do^UY5vo-5ug#9BrV)#vg{_fcN{iEul16$-| zVgD$cy7vwC@&VI`62OLm?#Pw{MMTzw)(*RA+vcK7j-HB8Wv7!LY6qB@7g;ch(hXbbiRLmPvO@ic}# zXCKN9_QcU{V0A|<)KBdLr~=~WE;z&_IrVK~pDX(tHunZ)cB9aM*1_k;P{lVksCF-tfcew@e!naMVDGEzmJK_NC8 z<1MBFwgHECGr00`;tQS91aO#dThXx&#q1MTNeDwL+K1x82Mll`%XLhR4VaYpK@|>r zk!KoO3t!mBLd|H#%emz=^57edb6t`O;x4@}h%>F}1k7BC1>XDQh`a&=oEozgPlj^D?BGkNMpLN$q@rx)};^;{c z$J}zxeNt;Iv=Qdvge5GKj`UQ1m=OxcPuW^KXa1b|H8bW-tDZ5de%h>>d9$a@n_W9^ z+M?NW=G4~Bn6r4^yv0K#bDfl`tBZ3D^-5D|#G?h~wxcJXJby+FO_+ew(RIdkYi ztE*?s=$STyv>%oR!#Lv6C)GA{aVQw>)4pJ3sBWlI%}^g?%XF+4bkrcTa8x}nQdyy` zU{a0|7948g!l5+JX7<@P)~(Z1&r*{=ITN35A701hd9GtBUPAKX$5U!(HvXpLyORgH z(-})Bif^0+@Z>r`EAVu?754$4URsagkYhHXNhfF>LQI3gi6K>l)*>7SCkBabd^0Wp z-XQhk`8V_EP;!1F{x|OcG^I2vTl$jnYa~y$ zGs7B#ju}~wKICKP(vR}bCYo&5LJ!Kve(FPB8zI$;J8Mixxr6xOoRN|#o2YbTT%V-s zMoYj~>>T*osiPWK4X&BE@Wo6A@^;L@H5b=BT=Q|Ud=IW(Tz$BZt78p*UO9ko{|3mY zZAB~KdRq(IFlFHP!yE8_sZB@AVXw2lV^T+WJ^?Pb0rtosxLg`EPxn-OI~eT~_iDb^ zE=Ftwv0Ssqe_N0T4PRLcfq@Le0#Lw>rB}GB z`t1gsKr%K|HAq&jn#;i(voeXZWa$XxxodDk55N>IUIZ~P<-}(2`bFOs#Bo6moQj)2 zH@RM2wQ%+N70?o-&0-t7Llr#Lpr=D)05AHmlekH+OaPA0tdIb{EX?j?X||0!0y}R2 ze~c1rCwA$Xoe+;tQKj5{xx=tt9tQA0R9lfiTGp3YRnXL&nZNQ*K+48m=jNd5W(#z2 zlU5~X?{NL7a`3<+{%hn0!=2!GT7{H6^stZZhNZf{Y9yP)J~f=M6n9Q8rScn{+yTFE z+LZs4@3?busyL`!lgwKK9{XSHIF9RLy~J+i#$8qc6fd-39TuDz%&P-8@yx7}ZFKi{Z zcvTN0b5506tgg(|(~8%?GV&Rp8NUQI!usPNlE=OBY>w^Y_=>=KtVJN3|3`5hUz~>8A zw8?1|3=dl@Fgz^$R!I18jlorlYpg3^dORMcc}$Hwj|1aA%Z|-+f(l_CUnVYLn20hf znB?J&yS%Y3cfbiXo;<$i;m)c&Y~FY);NS?p<#~{p3dVzdEUw8;{NIwtGMNk|2C#=Q z$Yh5#*2Lvu`>#;;Um^B)GUpP-xkNY}Y=s9zN`aS3C2L8!L&@zBxjyL2<<#31ce`-U zLBd=qxCj5&n#Au_@p~mcffDCJ#*nCMRn)Z-wGNi!D**-*lL^0s=VT^+Eg!^U;%0&u zPzi4$gJ6+{UwmYe%_Nse9+RV(lD9K&P+lVh1&iJb60HVBpo{3|jbGeJzt zVWQH<<5x?@=6S3l55Gf+f)xz!R*u*$ju>FhF2&g;oG^2?Db6~Q0u8KS_$nwJ>&nZ47k$Im_=d0Z z4PS2&y84aih9=)V9`x(6NPbIRz=eRv;~Ty`AJ83epwoJ|+vItigszIp8k;xPfv}NR z?#_i?PIonw6byfz6`=Qyt$+Y3Zj7qgdm-%2!|w&=RaBr-U<<|p-AD@EIgrou=H(R( zKZgh&1DtMDyo=1dyu2*83-;vYjpck{>5Fc+Sup%E3g(8v6_6ZT;cy!s7m^IW3@bf6 z*ccpLzzqhae=W~#d(SD4#vCLEEQ=X9I7ioe(9qX@ao&K2=% zlWe?`>$H5sw`CEk>7p^di%KoG3HRrT+-_UW<#u><+FdqJB(~Ye?M5ZSo*cYwJwyH6 zDCQl5CajrT(^oxf)|_d*J#%ZO&6+iL-n5<>z17oZ_SVdv*#Zomd9AV>r_=Zm#lwGVRA_xuv)|_Yv(=g9Eb= z#*Ud*Vj0#2+JK#HI~LR}*#CCnz8uSI`PmS9(E0Y?(3>I47k|`Ue&zVB z%UPYgI6wY9ywnCLg7Spn!){rOA1t5gSR(VLnd_$j>6?%b9tDEKTjBv(ZrfWKj2-*& z0{D(a0Dm=7eqPut6+2p_q-(`%tj#V5Tg97$Pq$~D_)ndH^kECa8}n3Y4wjy1miR3* z-AM0^^d0|(pMmeGsjWGmw(%(leot(0GLzuaIX{l*C{>%FJLq!yS=GDRCq!k9)ihk))!B z8R|q2k5p6|Gj$LtWb$gp?E6jU+}1t!cGfxTuDe>dJ@eoDzaQU!|Mvd<_P5v9b#Jmo z003|ju`rK#N)&;p<4&NEqayPju&C%rf;ov09TkZW(?+>P`-g=FI1=KwllK!y=Ke-TcuWAsP|w6*69H{(vi3hG zizY>d5()pD-GdM%h=3A9j1Ms6xA8WS_}EZVu#Qz|6cHb;jrx7_e*+9{5QGUb3ewXH z#Gvs8csENMTWGKnL-N$cSL1 z#!r75#0D7{h8X|xF9nH2c5lm{A#q0V#2^8-AowBy1qt@0P@*CL*!vM2MEZ}Kbyki z6SrR`z(*Qk@soBTlK2|tCn>(DxBbsmE5eVj`1`QGoe_SIunj&6FDA&JTLMuikl|Xy0nA6jXP4x@=aV6$=9$U9w`JU?sit7u1jSMsR##KI$Hv8@q{E7 zkLUuR0_@$L0XVQ8faF5}d_ZJQYq$JxQga=Wo>fZvKn z)`Z|JygCxWqnW0U!=IIIK!=#o=#o3w6Uq?AKb?X@fdakK#@KVqN%Yp$a)@i;ARCgv zfLNJo-ekyfjWBw7ff?*}8Rk&stKQqwdSDVm4c9pg;oydkv=++|SgqU)9XBY#ZrvR` zY>mC*Bf1BU%8U1sdAwcnb{>Q;HVC}B0jZNgJeZ)d0GR_35HgN|SJ^N(a+994@#76r zF%wKqIW9{Cm-P&n^%E{j0vVAhx=)G&C%5!KYX2fHwtUQAx&D&RD|jmCCpb>;%7e5r ztM`!Ut%u8c2`fiJxy9M#GqlatbJT=t9vrc;Zo})Z9Cgj6K!*4{Gq=>*OXz@=zyg~o zO-0Ren1$zEuL&^5uKB@~@T9YHW1@}fN?dY=5!ZLwelAV_`JpHwdl$~oJ^<9$J}vrj zbgc)n-$cQu|xc*T#O+tE&N?-UURpy;i;1DW20y_(+z(3t#Z@X zO6z}U^&$^pE4$ETgUKQH(s?7UYI?nC=-2ed#e_53-D=-I8pIuoIXEY^Ui4Ov+m1Xr z3zX5c%J^<+mUWDYA}|QB4}BPyRezit7`n*Gyh8UQFqk?0-0-tRBXxC)8CFJYrncCH++5zZYl}yV?$@j zBG`R)ejcl1mv$9P*J{t+%zg%U*bTz=a?KV_D`Xws-z42}din!wOIlO^edc8RJavo* z;bM(0%Mexi`YsIh9t_aT457*Noi!PU)C;}Knxr${9{50uoe@*8Ev=oS7kc*#5GT1D z<~j&SLV{=3@GhKzOY1b7h9{tH0)&%bU)O0io94slhOHj@lp zi`g6+wf`zKO`GI-tDkQtCMS(C;Imxc0L@-k6UZzZ{h69~-W6u8&3|b~SDWmDk9qxG zic0F|=5^1^&d^9xW-mln1TlDP`ljV8)fOM$hnU35mxefvcXz0?H|cSTKgBuGiOC)l zc@QNMrzl-`Ed8x4n2Mp-$kR2E%jH{n$2EL)J)uAAY5ONVHK_>a?B6}brHPno&mU33_6hSrfMI}R~CJ!VZ({hE~1CT?t>R%;gi)v2eSa4-XO@{}P4;5*^;7QI5 zjWW)Jr1Jc23MoSs#CXW0eH0`Ksa;>aSlsZgALf)(p@tLWFxSs%@6ofbi=9b_d&@P# zSIR!+PEp67&-r!US?9}hwDaYVRhp&F3#fY%1=;4WZt~CG zgXj#tGr01LA-(0p1f-t|_B(SDle!1w+%MvOq}jF|cp>UF#8@DEgo{`kbb#zV`{4ej z{Q8RJx6TiEVNw-RhuU`U<@HM!r4NXhh8l%$O&Q`=ui^DiojW`L5*O}i&E2Cao{;b} ztD0UT1X>=_F4+dP-}-h$wef3<3eXj zJ=4Rqs1KLnos;)7jBfwSq&wT2mZY;J^8&<7k zF0!cMw=mOE8UJ#jWRq|El%c8ljDR^yeD|R zjdKt#Eg3mxf`tQ57P;i&i|68maHT}gL=N@iSteY(-m=)Ql{m*#!<&bSCQCj1w_D;Q z33SM&mMw#XM=ku5YgZ)TmtVG*cj4vctVAK);i@>Nk_Vt6SFaNz2znI!PUj5Wm-}`Y zu0g)FzUs%7pw_Pp*XA-Db0ZYm=X9f(&ONqQF_^>qFDjc2tK6%`d&%82KdC$1ODL@J zD%i5o7v=r3*Wvz{`q}OCq80X8rB3S{4LlofmsUKrLC?=_rj0IK)+fIadp*rI={9-I zsoD;IF;7qy$-9uGL>yda7Nc8oQ8k5gT&+fw>F?yveejcuuU zQ{wGAfqm7U7aw}>@=4XJU7r4^Xv$r9u+LVf>iqn)XA!HTZAr|TV(Z#dc#|PH!MPvf zbu>3F+^Az|a4l|R80X4}KUX_raX zgigJOV7qHe%J5UbG~9SBsG_@~3(K-lX^gVUd21DZIZS?)MZFYot|Pyl@ZI*eq~p4I z-)%7n4iZ*0Ho3e?)H+RekCsY$rBdAJo`BXPZKsQtd5kPGEGypd>RhhJiW^L!n=MY_ zVetV{qSX^N@xk(L_OBY{4-agWVJfHf>T zTcGVW{^lf|^{&t~WK*A4>zK!)Sis@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYis@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HY=FEWJ>i_@T&+q;|p?v4r-sgGV<-F%T z?>TcAcKL0>AcQdD*W(dlD?aHbm+`_-19e35ixFZ=$U7-prJ?VnjG0>DcFb@oQ(Ps} z9i=5zRZ6vEQn|x5tIAPPA%xzY75reGc~*7#+-mS;R^$sE*Hz2gYX)&~mbwHa!&@gL9hpTghn6VdEp0YC)BIR{}`=0=t zrG_k3`_N2b?jT}t?P`Oc3GAmYw5mK^$Th@?4no}JMxtit8}Lva4zD%+pm67ab#?*N zGa?Dd%2*TEy2*S8{#sLpW8@#f=^et-*CXHx=w; zQ3PLCu`lOG6nqhBWw#l$VgaPf@e8pDW0aMDky=)shC3m*Yqb1>s<98kP}#X3A7MI}!eBj%6^$IS-NMyx|N+{2oJHi8}R8q z3Q#@+h!BOU=bB?cQ-2OBwoyW#b7m=O)q^eEFCrJ^3o0z+5amk{w7-Jp3sJrz=4*{P zM$B=I`G%NpHRd~FzSo!&#QdN#aq-HJOes%NlVrvSxk<)?s`nFHU7(}5#mtJ@Vja)` zbR1x~(U`#4nxF3-gkE{EDyQMV1F8e!@ZjM7Rm+yBV~JXfZMdQATCr)bUQSNmd>p zGYTXpCbMsYauUul2yB*K7|+P*7x3yx2sIm&U%{oDo9%y_rK8sS!TNySH|u-ftnYoZ zqU(LLqU(LLqU(LLqU(KgaPLQ<3)C!SwQba6%^*6XHdCmM?%z-cn{0`7p8}!$PW7|I zU89_4!u@Z2#5&Ia)i%o#a=d!5i4HNC>+;}dDz}w7)cuD+bu`**Aq^4(X3Ey;cu|iH zv`v`GD<4oF;YS@`vKT`Q{m8DdbU>+xg)1Wr^w*SO7+&}-2rGSZik;S zsKdx)5s3mOTeW$^NhvE4>c@xFgt8JzoYsy8fp!&@+%M;IWl*9}LSbJ9B^tCrv6F-b z7f)emg>VcXQYkS2%$Q0nF)aX^@i#DLKF;|#NKAbAuN7q5IIUp3zYLA*X3WV#Y02h@ znm}A4abS{&X~ilu*lL=;oUMs%+Ctihf|+l=n$GPof1r0>^3FL`s(eteTv6qNgXJ?+ z`H*1wOjUkqu-v7}FVo9$PzX26l{QqVWPo~Psqgh6R-)-dj%9`OE2b!-L8Z?=7e5{N?nz5kcjM_m)$2{&HSj ze~e^m7=w}u^p0nvfL_c}+a--EM=fHrv|4Gz$vey%7yE#)#v1@FjerCbATff-qzIyw zcH~U;Y*9U1yypO;aKiU&f1Ag%Q=28uumYzM=>cI;(!C+M5RD(|$2tBo3YNsWew0Ka z^mAG7%%H-sr}GmIOW!Gp$EOW;^T>{;E^kf-u?%wlk!5EGIB=~B!K{}FY9WnduXK-3 zN~72-J>!$o81_nYLcJbn1bd~WJ}He~uk==*ltwQ)EhgI}-jIa2mg~gX?4{P>g;Q+2 z8w)BeGfr3LqfO}qDQ0ZS(!b2|T64ylHPK#c%D$;J*F>`>+G|a^psDt+nG?C{`62Z$pa1nz#MS8~~^rIN>` z%=#q`FM(_p*JVEc7P~b*(7z?Hq(xmEx%6SuYm5SpV^Id+)2g!$ z4{<%~vkq~+N3`BHL|b-QqRra6%MxSC6w#&*!i9B&a}fEJWo0lv)g@~o`b2A2neX2( zlR|l!M&%F~J1+(Bn6E;4zfwJGD3_668n>#C>-9cf@%h+`s(4px17s^1c|`108(Y=F_BhP7I|`n{fS#7PPpBBK>QfSrB~+ z+YUI%Qs2uWskKOY60@5>U-H#7-m-vr_1<{ZaFY}o5KoEvbMeSm(|9)p#M|MGr*3-$ z#5?{c0aJn9cxqt)vBgPU`hcQ|0~^Nt5nEE*04Z!UQ|)$3!q-Ul~Pb3RCMejhjM zeQ>p#^FfNHK5&ig96`erm+2!hwq@hOQU0;7UazlU|MN+$&F`vwr79&pYNytgVj_h$ri&boISV%fqIR#5)BvSLu)pniG zpp2rdv7ThR(aqVBFvxC9b9N;3+F@Iwy{zDh+ibqa7dX-@@miVV_hEWgrMJA$h%LoV zZ~EJ5wOa3S`g(h`dXvy!Z?zw9SMA4pRUK$B5Qh$m$&L^Ps}Ogvje9IorM(2RaE}8S zYIc=IW3n9&TA0-f(+Nx~6Y;@IM0M4AIautHu#}d9ydG5aQd;u4c-5+x($dbwt5&^~ zmT)d!wd$p`RCDpFm8I&SP_95^vvMWHS0(PNKr2@R(0eqP6zV9Mwmr;huj<4uh3Z!n zWE`&)2T7C?2wWe>h#76-;^X4D(heaB5f{rF7k+S0f~8Ul(DLE%YI!+U%t#Jn2h>P^ z-htEafSU5pJ1B$$wFcDaTt5EK)S%LzfX~67YJwHM1gIzfd;*V90-@Z5J_r9f0d-82 z={l8;{AR`kiCw!9BVbIBG;mCiMD5ep;)42A{zHSp?_j^*f!e2k*1`9F2Wp@ESqEp} zpfxus9diyW0shFa_SYaJKB!OrkOQ?(%F&SC< z!C&kXzk|QnCw>Qitxx>r|5~3Yeg}VTuJf1wi*udd!C#!~{0{!wT<0(U7w0;^gTFS{ z`OE*cxlY%I&LqtCiT?A|e>g6&9>BhvWPW_SN zSN0Y{T1blzc|KtrAKVXMBZRqo0*-1;=E_BO+99opwBwoAB?fUZyx+;|5?+L<%b~b? zl&O@3tl)-)8FyVR2Bm`2QkQB5V#+S6zQo3(zM_?6w!ShV*@+m6$HroMRh_-ze( zJzeK@M;G4f*ZbENaY_|DX&0snNM00&hja{g9YH(0XFzmqW*hy2mgmZNE@xD@h%jMI z%4H0#E>NZ=moaH&B53uELIZSbWpBkv^WhO zF}~BiHqx}-*E&C(m-go^)9ffq)vDt2td1-FaPW=SARBMnddFT9SL&$IyGr)9oX?eN z(`4K<@zr#cHua_21ot_IYSQO{(q{VHZxGn$EWbdX`^z=c=l4kQ&q%&Lf6^cX=Jo&3 z=e|?XpXhU6nG5#0&*}nw9%OUAKKGejpwEMB&fDicy9@MrkWFx(`_$@05neMVr6f zhWO?LqH8y?Q?iiQ)M{Dy}5JfLCJP zdsUD^M-G+5U>&5;Q3xd|SO+O|6jW&ytb-IfN<(Sw*QxvUkVaz{*a9UzEt$EHD3#ap zQtconJ2aq?IwW%;Q7Z4V>w)%zING3==jSU7BC{Qzlhwy9Y#2m1EvF!jYq9&hfTAg= zS0=SS?QxP1^bYx;2!F%}+0k%dA4yoN#vlf|4bNPy0F~6y9w{2*h*H`@(a8{(DaG^C za$h0XB1F?}b;X#XO&zd#+1R&hcl1dYke&`%eB>Y6na<=b^KrpIN*wF~3B8CC_kYkRnHjfTePbk|aZ zisw+_A#ti+=?J3-LN@t3FNMxGmu?>k6=hjVuc8OQS`v| z1P+=NqWmYm1mI^flOe;=fOBeN9Qrv)$tD*DyJ&1dta%9``ihQ+98zihM%NfPTF~YO zzK7uK3MG#W+PhZwaB)b{b8y|f8t<5oAo*T2P{93JwM?X123H&2<3tt|E9yVQiat*) zltnCz`etI`_@?{~xr4AUe`{@BwGReLkj>Tg&YyObB^1GF7A7e*wSix5rJ zq`fe7==oP1mpxIn6{x(=Hwob(q z=Eg;BsIw2r7EytK32{+h$QR<$63+?rBNF2UcNJ1m&fBjTm^3(0r;b*6K6==w9zS?= z3XjGSujG<*>i0Y*)MqdjpwTeY&~EPj@BJr=EYS!z(yX4iv$$JA+=O&pt(<21+UV4q{Fmb2Av zO-h~`=+)}l<8x}Yhd6FVg@WB$lfzZ7R@Z)?Q&~yFh(jZcO70uzQq{O3Wp4{>rXk5? z$?<`sOx3hhy=%w9l^AKVay1QS%wBX@@FAj#fz650m`%mjX3Aq#(bP~@aHeTa+%ZUO zw>lcAecA?Bm@;(b=qgMCwC2;Wb{qo)SDW<7HhsP0sLI~jx(1LhOyne>ra;d*ULijL zN3p7NmFNPqafstVO0!*XR8l6#c%u^Mnnz`e{ej|XileC1(llP?28Set>nUAGwhT$0 zk{lZxk2K!HNT#qfUR=qugI$uw^_I>hn}#G`)O5U%COO($1ul3{R|OLIsz9Ah4Y#_P zh9jNpOI=7dK3~I;GQk^^i=Ng6C4ny}4JEs^Rk9Q{xyfR5`ZY~z$ zc!2t?Njs9#caYGa)DCEw*0zY2kQ@~pjTEk4x@c?}lI#pVxK$tV-pX;gK~#=seD$29 ze^#GQQr-vhX_>1%8&Ia!g9O@%3}-_cNL?V&p7)RyI+MxDML=b;s#Ya@wwt1tU?pc( zrs^dZlcd5gQLX`<9JUgpSBeRZ4#l=vPh(A*x2xOG>q0>1t<$YL;IRugvx{I9J6d$N3VN34(v@WL=T8D({=_t&KbIRx z<+S{%PkkYYLC7M~Hwj5f*Ct&^68J(A(|kxS_qi@44G3RIVi59lvmr_88f5m@k_5hx z#55n0%hggjt(J5&xgOFvB7r@mm2QM-9ZW;f^$A&CtM&;A;*|M*#`Uev4{4D@m*f_{ zk+MK%+Rg$;3w44F5@@|mN3iQM5@=(P1kENz2bHhIh(U`jp@L01iIlEgI-ex)wHPtY zw-}ehyQ+LGMiYrIBryotg7i&7lG1erskCa4z!#F3=0kG1J9Qyx!g6iaIU+%`?LpI) zFF9h6+>vIJBc-b|ZV!2rBSG`|u&J9&wLyc6DzmZ(o#$ExsjQwi=sOSb?!}NQHEO?- z8I}m+f-hHOg*2{B2f~My)(s);_vQpSwWV*=}7@5pC^6=pKnl!G1y2xxw zk(->SNs}DuJ(c1rtZAL;F`vN5WX6$$R^~EY&6!=1cr3?TXEtp%GHLwFqA|@yrssnK zBa<0Lc3dZ#t}IFE>Z1$J*3AYdjel8*>r1WL<561cYI?XRFgTfU@O8}uC#6f#1!wD! zE2MGV ztILT^n;n6qN%k$NiYYQqn4$42L3)=elOUy~gLk<=R#+}LTHs_IJOoMSdR7;jjkOcI z|GcWT2q}|&%SC@#?Zi%jUGI=HZH^%U4r3)b+Sj()1nxJT%Z+HawH2a17f_hzyq-kS zHU*d0XzY09M%6^k%7JZD|3%L-R?#H|)=ZR;_sWbU0gQT}>(wE8MmwCf>q07R2~^W@ zpqE4k>1n72=#6?#9Wr_ezEz+LrVfHYNw*-6+U06MsWiWh>$JZcT_ziP;U=|l(qR*) z)cP4^xk_hIVO*Beh|bp099WYR?JLX*tuP$|-on)IJ|pf0)yOAfmYy|M-?NZ_eMotJ zICdb_%~X1}n>gB+_1Yw|O+vJGG%Av}a!!6z%ST&#U!Ub+^nnN1}X`qHSXXY>3m_q_Rzm02|`;HW<0^6Bl4Z zoZhA#+r$Uh5U01n=!Tz`0XD?xZQ8R9MxAcF5vR9tvJFO^&W1R>O$OUw)ah)9)7xNd zARmlCoegn%n@qOB$kEvlr?=_IHW)=Z8{+gfo!ADwud^XeZaEgQG)dL!92GFWcbg2&zjzpIo0B*->4peRWyw9nY+qPk7-1 zw>KTnxf~0lQJ2F>Aw-@}?sHit&nG*|p^|dA1KyN7$)#U0jTCp0;_g7jHKbTWinW1? z3R2udihD^xr#X(ou`V2YU7#m_?E3;0{@C{iD*Un6b8K`DeGhyV>d!yw-kr9a_aG8g za1Y#!ueM;uF}pHo@lwYgl`;q%TWvxp8(83e03XT}NU>;{Ox7b{?Wm2xonBWd6@)wb zlFTI1O((%zDoDda>_i!s*ZSnDla}%H;ul&6k;{ZQmE$sa{zNVFPhT09kJIEvdV@%) zKM2*c0I~X`pM@&~uOBhe>x4p`n+P6JqaYbGb@z09y3s0T_0<9R=C^8$Z+B__ZdFk~4h8kUwKX$<`$BwOWerwN)O2QK*@3Ec;%a!LJxHi=KFK z2G-IzDni5Uc)kOt0i*K?aA9`Y`6NCoF}VtSQM)wn3Y%G;k5dU=uk<(+SW{V8hv!Rj z8;wO?hi{O*Y*z1Jt82=qV2-@GV>8hjsvFlOAe~P`r_}iklxIN4HyYVpjMnb`=nXF1 zhnZJ<`(lbuhA-d_NBb%NKuK*4Pc?QeqfmUE%PpXWa>EiXXiUW^&#G~WiB}oi3#Yc= zo9^7lG*_=gjRpj@XJBip3(PU<5?;IGLpgZ&xp~B`^k=MWfl?dm%5!QKIJ05*8Vziw z@ylO|Hm7H{@YZ*auQY#O8^cFD58WSiM3tdu#>b)DK(#JcQWVNEur7FtAVRws;Eu~| zk1*VKKX8NkiUoHdA7Ip8HzLL$HO2&rK^^0KzPUiLS_g-OdplTU4nsI9##wnA@Q+qg z^EbrrPpkJ8$Z0U;)QTVA(Vmizch$lYkIU1mKP(AeE|CX;^97^~aguALYUJDsL8#M0 zb=n5fwF+{KoEJe;@&IG;ELRkzmn%Jg6jK-o;b}24-u(~H< zp-mO9JYY+L4Q0ncRM@*+Z&e>9P@QNurd38QiRBZyqKE+-5+tz8{tXGMGAG!QXBwHd zebBjMR4p-fDLE`TGALJ41l$W_OWA)f%$KO@?{dFCm;P4RQZ+!YxtKn0Vz?H6SslKxA@ykbhFRo}&Y1yv|Zi9`D_<@i`|;-;GKx_8t{0 z_80Trs9dHGO$=Ft+I#U_+eV24_{o z!j*$A7IAtTOdznqm4j}Li&_gzCYs#0&cyx;+0mkB6`G4DI%PXmm=>n2VuK48sOJKd zg0H?KITo%`f^rz;lj~iQ9p$jPX%4KKPk7-1&EzneWAzTm;Usdz^nrFDxz8om`ovQX zw^9ywphn)czE^PzDefZ0-Be$H39Ll|*ZSTPD@btzCeXP zwzk%98hbs*M(^O6Z*`r%9C_j3s>R3o*6BP)2d&d-9dRkzkAJjjT)$+egEC&(!3nZ+ z|N32>4RopmZD~(~hSu^NubH(x$Sb1M1G(@aevtGUL~Poo_84i%Q{4 zN9%JcNiTzZlqy2&cf1cqt&U8ymRZ>eh4)g#tHYxPJWJ_yTj2BEH-C6l!Y7U{Q8{{^ zySjXO)~Ir~GRsw3?)Fim%1g@1T^$|M-KC1FvSLz4$GCEryF#hz(K zE2fuwqmM4HmXVbAr!cR8{!`BXt9gf_6aTMoZwnfj2E8HC8~FDgV8UbRX%MGO}uc)eZ)s1m%|P{C`L z@}Mh&yd1C48v8#mS9{6N9o{ESczSmE<_Eku>K8E%`v>J5|`WG6bo_j z8a(JfW8I4*aiW!m4JpVQ({n^=amy_YC*S={vi_m9y*=*@|MJXY z`y)RM-oDqf@NnDQcfRy^KF$31_E+=1@;sWj&2w313(tF<$2RtRY;cPY>qqAlF2PjXjo&RrP-i{<8P!p?Yp7`WH7c>lS^IS(D5l=$?sSAFKWYw~8#xApJd>Dj)q z|4*JHSLEcbJnGr>RmIu$w>|Xh_Dk|lEuQ~qqvxxF{GBCTl8%kI&FwjC{r$-88}cU@ zuI(?KK6xa3vE#QhNA7ui#Ea75<1ZF_uA8xNUG#DDmb8Sk%1u4a7R5|EyS>YS>#Gfe zhoAZ48X?kBKfeFLW2soS;Tn3t@Pa4%7hh-lzk0;|^j{xwiaO$+SUt@7+RT=_=8XOH z(rsJo#zmxl__N*KC9PwZlrH%PmMk4SHQr(wmGwo<&0pk>8Z~@N&vy=f^+fmQ8ZW#3 zgRI|oeR(P;?xAx(wcq}h`}c+G-#fWrd!NL27WeL5_4L~M;|(Kv?~98*Jl1-1^z4ha z-!S9*rFU+7FY%(g>fT#%EW7Q+nZ+fSM*sZchNth?F+usF-==r7H-1_(_046CUyW#+ z^T7?-U)OIrH~-#_@3rml;itJPW-mDvmTrD+Z{gTGqx(i~iM^rI+J8iaZ_D2M=#!@x z%9i;X?sP~0>v-W~o^p5Ybq~wChv)9w<$mhc8!ldYu~q7~=44%VZQXN;S+^Y7`O3d; za6ERhpKu3YQ5YT@y* z&mU|!J6M`={JK3UJr9h(`}s$29+h&fv^>?&YJige^Z(A6eB!@8CNq7rV7Iy%`%Zd> z+3xqex9<1f`(+Kf;e~$n8M|(~X{v$h8w4C4d1=y=U+TK7bZX5 zVfhd9eqVgN(c?MySm%a|92>sgt?TuzXYo@X#B2?}>AP!x**@o2 zOYDFRPn@d1=ZgK(^dHWiInvG}stoeI$&F9l>xp>Mx%JBvo&obco*%?D@2)v{a{E<> z-}C&IaByZ)!^l~l#f@8fIG2C7T=9%pfAY-s#rt3ITztb1jaQ^SzH55T!sCZMpWI$l z>il3tFVB&U$Nsta&c{c1R;J#4^rHHE>%Mq+`aI8(?f;gm3~gU(b8h`VzTfXz{m^1h`=OpQN77GqyfSC-lXHGu z=DGTz_A`>AK0f>7;%^U}Dt_mUc14Ys4JtaLwAvQ-xRf@&hv)F(yU!Z7hX44;i=ORe zCob7KdBELmwobb3N{lnl_g$a={G$3-e>vf)ziUeIy{oz}y;7`x>;AL<-acUGwTH|T zzBqhZ89l?4-*vaR?aFIB)3)CI^uzJ5J$`UP_ocB*zu0;C)s6eZ?_YM%ba6$G8JAx7 z#o0%b8~6Ws-;D>wg41tioO*L{i(5mAdq47XvO&E1{`O}FOy2d{|IVQ5^xqy-;xXT# zs^&oz+pEKzub%aU96q(XM_TEdA9_yy=4o8Nch<7r`Sxq?KfC^wANG6RePXfar8}=q zKYZKnCkJ^pRbmX49Y5j;`Owq&!k#{t-IKE9ok-6MPcDqyS9#^nUv97dR)6tU^#4u|KZa|q|LVn+oT2vc6Sp6}?Dm-F`SN5*(Q?=wHqbmvnG6Q+OKuJ`QDbP}RxvHj!Ofu+Xn zuPxn?ebKjvZ~IaVO%LEiiD6GF-<>ELxoF`n zo$rhr*mcTeV~d`>o@;H+zai?%j8@AwCCoi`W$BLEoonuo8U0nvMH|;=estbO2f>Lo+y|%#a=l0vn}=;KYe#nC;|?~nhH z-~X~f{T5uc^w^1$r43(3{kFDa;kVzcs&DxIo{Oh;+c#my@zLjc-+xDTXvpEU!v`FE z_=fl2{^-u-4fln7(*MWKi+`C@IrZXcm%jZi_QG|GDm?2k`qKUqZ&;{*>v}eArgqQn z(FHeN1pdxhC9noJYEp5t^*eli)D86LY8STS++nus3A z_%@^4Op=3)11v;;WF_nyLg)@7EDtB#z$isfl+1`iIZl*COo%Xxdzjt|I!+v5Jj>WB zlCj?(w)b;zZn`IJ+o_A7^YMD&r49vILkYcE(fLx8sjWiQ;3XMkejq9|ir1dI?#Xvt7fo=mMhHCV8CEE@B;o zd5#Q+Sxj?G0N%t{=b)NC3p!Msa_j|0ro`ZV7zHWqQ_Nyw3TYRnOiPIncc)MbJjs$z zfuZ8dl)dnCjwSJJNs`i*B%MH;#rn33+lGo)+Qta98%x4dPqa0Ql+?w*-l=3iA(gb1 zpzUIA>NsOtQJ1b?a8sp83TYzz5Y%L+AW~X zVpqqPI<^seA!#Fi>qsNb-ibz9Mkg9+7cmZIoW$s2e6-W5PHn_XK)cund%O4+Xcnd{ z>XD=@k`yqO0TacpEQ;=dHc^CjrhGCPdoW(fI33tVJlpvYa(kn5q1;A%!*q}AX&6z{ zvZ-uMHu<@a>0h%y%T5&Sa|p*VPGziSd@YBf9Lb^4Zt6m4??RGRjGY;8?LuYm18o*B zbfNxw2%hcY=Ps1Lu`6Lq#x6j!7}RxwBgSw=SDLS`=}JAdobi#al;JR z#vIMo(HKqf%+1iaHt-WAZpMAO1iaVBA!L+W2i-!^4SVdQ+r+wV*h=^7`iR>(ttZ3_ z@Y#pn9*XGiA^M%7pTM18csani^cU-eLHU(~UeMvgE5cid#?@E5SeKXC_U zE6?iqQU>nG6pF*l;g5M>>wcv8k#iXO*b1Mm*H2k?2h0P=sy zBSD{&uSP2jGt>gd8dgHS&+s%b&G<2p%1UC6@hjju<2S&cjHiLgCaWZg;ihZQP};UUkD@Z7h#l@DV(%D!-<|5{si#(@Rxy>h_`_4A`Sq% zMI4q!*5rX6Su=ofL_|2cZAL^3Ik47x4{A--TA#6Rhka%Yp<3!#%zl(@5qk)Tm;D-| z#kyD{aC58$sJ7&w7Rd%lRJBO;Nj{H%5RzXQ4K0a|VN7PsWIWPx2jra+2(M+_&8T|Y z(<;>{iH26~jov7^tp`HlYCQp1+xjZty4FU+BZDxQM0CpoQViN^D|0czDkp*ag*kIe zyPSg2)NL?X7RW7`8_JwlH-S0Ti!5$qF2;Jb+z#a)*SPEDF5q@++!Jy?a9?QLTk=qF zxFv<380+`)L~yN`Gh2HZ7K1C$xO~I);3_rlD#I#pPix$C!`)cv{K8zcm}96DMv;xj zZ0LY`%J2w|@++BBvo?#V%ng)}8@6Da-=uLr8@A!7uVZehFc@C}_p+w58FzyFNLS7x ze$kb)iZDE~BZOMcDxAy>l&PFm9Mw9iaP| zIkl}r#jyZgE^a|l9~BsnqTF2OBypWFh2AK z-C#Niu3FPQVCsOGZ-u6N!PFVt8cp}Jsh1Qjp4N2X=Dy%w)^z>MgK>8LNYhO;4+Gbr z>DHUaV=Vu!>0U8k3C>ui=3=o-mSROKaFk2BWg0lArc*4lq!uDq)2*~z3vQ^U+l6vi zm1?@LP%ci)&~$0m$(Rps(sTo@)4<)K>6Sy+QarBdo`SBW*sAH|kn5!cu~*YMLTbSs z(sa{9ZpZ5K7fp9d$Qp3C6U+Vg7Rn`wmf)xk-=JKQNYixfLnlkEL~l(uICL7g!J2Lv zbgf0Prh5ds)}m6=eHnVa)J9yd>5R5oaJOl?fwsv~vUo((RobS3i=C|Ive9+|S#$(P zxooqY#Ai=Ucf^(?rHDdJchcqnccrFF2uqUMifT=l73Kg}qv=LMmnzn1x=GNbijA7? z*02YpH1V>gdoXMhxZRrW^{^A7ooLW>ABCL+_noHuJ}gX1$30s$&(mSi;AVgm$T~JW zNop@{(sb$J4sds9x&h%~l2bgc>BfdfgKIfeEw?!Q87V_#gQL3N7XCcA-kR>6@Or6( z7^CUF4*w^(Voetr@t%|^=4!gch>yU1!MZ%#f`|mUqd3dDJlo9?ZHTL&c#_x{ktTN% zHMrwR-0p}>xwF`!aoLqT4j$@HK(RK{(qNGbf2l zBh%!b;^|7&vIyM8V(4_0Q^55W3pDO-aD7FC#ytcsS5#N2mM=sOmHUfB8g~G?0#aZu zrul4>JW%5X8t$_{ArJO(@7TA>JbA)$py6BlAe;s8)B%3f*=?AJVoseEhl#<=sk7TK zQNx@%yA2mT`Pw_*M!hmz6oT{i%5ZU|rlVdNA*wYU^~wlQqv>dtDimup9nDgOVxy*` z*=?kFS<}(%Hd5@?bRjXX%cDetrb~=@6Wq{hszbi5H*}*#892(N5W3M~FYDBv9wUyi zPVH%Mv#6XT%3{*wvBJq4xoS_37d0A3Jv~vZ(KzbqE5y?pM?H-vHs_ERwWo`OgE>hk z@L4Q+YuwG?cirZ-;a$pREc%WnXQLocZw=e&s>bP zbqmsc%$(}8N*q%yd5uyf##l+4@n7E`}K*Dvh{-p`W$r0nVv$jV=0s z>&BefniW@Im??&8Tw&a$;L4aQkgtwQ5i>=NT27u5R|wq}O}8*^9Jt*YcRO>3G;T-S z<7*m>D7XpCNg@S0x7ez2nepQcZt=FpT^&CK z+>gw~iCf|o0}mZvZ}Nc9dh=ETo`S~@9b?p+3w+$S_H~AZqOd&))b?B~ikVaUXtAhc z&VcrO1go$bCt0ekTO%G}&TQ?|@+rf0qF&=hG54{?l{5FF#?52Snn7O7)>`Hq8n>3Y zo*K8gqj9IfT`#t1T#JO43^(AKUbP$u?nd#Q z#+86u#(!#=yxalqCXv=bwR{>}t;p55qu`c{E5XrU%sZR#Ps7b(hL3y8utL1eoLO{F zd=4v6{`v-5_o~EwhSkE6N#zD&gd74ln7IOZS|V}9%o(`fSBqbmQ+s-~*xiZBnZ>n< zpTY7Na|QB-#IM1LEYcOoFD1T$YsXd^cR2A!!|kG49xE}_*R`Cd_}ap};l6L)A_H|W-h$2G1$boU8k7uDxb=|o;tQ3to^17*;Q?`0kZB!@@(T3r^KOrug`~!TR=)8Tqc}i@Z-ZwzsC5Z4poVYLyctr@&7~kR0QqBKM%xJ z;Gd)iM*fvj`Y1c$K^E^c@iWy<@>xJhP!w5g25k^8vShzcE{Q+eBl_rnmcDR(|9H+L zV}sjmR|~4++d%J_{8t>&_;X@G{j!lI`dI#27`T;;0j=cMN}@+g@}`gVGD{BrNesh< zAodl3vPb|LL@LlIGJq!08HiqEe3nriT}@H-qt@u#Br2sp9?wTpDOr4nyIbBPQEz!! z8 zI1)HWp2%1suTL3g$is?wzp0n_AZ3eKB7d85#8k`LUhKISYVnn66;>SInbyiZ+MY6P zkO#GG1YX{DryxtCd96ITZH(w8=C=LJxJN3${!j{+-7G)ZHrbpaXh$qX&`ub3j<9$2 z3`*sgw*het&%3}oKpz!*SdznK-v_-3SD`~v?Us4+sMG_}CvsV8g5@Z7qf)S^OnXw% z2J&zmmTfE}xzt3)62=O~nZPv5JjNv~sbyTnxR!AP<7UQZ7`Fk_EEV#e)D)3m_y#yq z{E~W9{DfE?AeYjzfe~qgcrWcTn_E*VI^P2@5T1=hmjee_rmUWN#1eR+JM`5$p@GZ1!4ZlG?6Mqk4ki1QVIU|gF zxUct!1ZQ{Hr#t&tkBjcko#H3a7dTHI;LNu^V;JKcVy%$xvk$jcsCB{H33iG-hNaG{ ztvkdjXSsEU;U4F7c;4tt;Zid}(>2FPw%jJ3aUK=(46iups_qTgyl>d&Tx$KqU^Cui zr6{*pj~d!%++jU#xG3Wu>rbdfiZ~4%Bu8T=!JJ^A9*LF~XV@*#(w&TtWRPS_#yCTY zsLyB@mM1>R$P7z>eNI@2@npvGunaC6f^UV7Gh|2!9a2QJF}uUIkP84R6ssR-i!<_#?8|3 z>_djl7-OMPpBN@&M@MazCS}J(&4Z26yji*{yHnH>(?i)7!~5!N!2R;R^mz90sG|~H zH@z>t3i^F%FC#^)<+!yba}HYD6vvpKQxdfbb)OQo!E|em615rh*T$oow+%V7;O$vh z9+lq9SpfRCoTX7a;HNff8!YSKzi*dWz(U|BTb#6_C#} z)v$ai%a`Kbb&6@JI0LMOcABYv?HY3fTYk>9 z_?+cJqTCG9K~oBLc8N}rUXqY4(|OW|pz~Og&o;#@uaT&gmP(Y#Qnp#DN$}0Ou%!~^ zS;vwM(&whFp$|$__Xj1ncr5Hewy$UH4rn)rzQ&T*xYTRx^EK8sFdl`?J)xgVU9IaP zK8J^0z)b5kkX&MY0klC{2F$m<5+P*DUy?sJtq656odUWhG*#{z`gLTgOl3h^f5J{N z_XzfAg((j<*M#P?wwNU)kPHtkWl0T7mO#=qbg4{HmdXa{RMb+LqA!(Svk{W#rSeO* z=;%7O-vImA(0ZnKfc_<^0y;CKjxFn0vH=oXNIla#Kp(d@u(p9EMSfopl8_XnBD;TYFj;XH641ZmubGkk63_=i>zLjE`rXiarW+WAnQR=4xr{^1G@^=`E-`;@ z`q);%k{XuOF>W^BY&M2(*64f9DW=Wl+s#*o*Rx~?O8pwT$83eNi~$GJDbTJ6&0snMHdlt{GMxu`OxO^X z3}HzzV+rJqwhE?e7?(iuv8|TrI>yb6^^AKM8yJr>3M*w5!suYkuu`@eOy@EVVJv2> zV60)RWvpY|%vjI3hp~b2IHL&RD2xuq48~l>A&kY0HH@{4b&Q)C>lybjHZUG%6rtRw zjJb@(j5Ul)LO(Y>5nac0J!1o-uyHBIT*hL?8pb-tdd3Du5ytk6xs1h(HH>wP^^6US zj!3f4Wh`c_iKJtpj_G>F21XIZo*8o)iy3Pe>lo`98yH12+cV}e7RQjJMnf9UB9?6! za~VYomN4cr7Bki`)-l#IHZY1fwr9*`EM^q(EN9GREM}}}N%A_zdd3Duk-+whxs1h( zHH>wP^^6USB9ZMGa~X>nYZ&Vo>lqsuMH1UH<}wyD)-cwo^44Ti%vi%%$5_wUz$n_V z4Py;s9b>&pCzH0Gv4K%IX!aHkk_*RMw%4K^!2LjyJ6N8}bS~4y8j`k#xD@`S)$)?v$@0vcuzc6#6`9o8h z*=g?N`&nOdO0f1oMwIt_+`|W zQ75AI%SOX~`4CVTEC!?DfFukn>?`aCBqKgo*^>>ahP&+d+S8>~b|dsg!zz27{UMDu z8Xkq_Df<@tQ;!8tLCQJN>=_KRfL^?YqFeWBk* z`G7?K8th-%8<0(d7BSV>-Z;=`G)%y6II_M9pGL!R*b|qGe?*1LCs^_eN)e}i{sI~C zr|swLQj94kBqls2I!3M40jUKz(tf~oS3g-2^RXbCZ-n<>VhmBqF=;UwF`Z+!+2fIC zx0oI=htXzUZ{#;4hHO-eXzWblFS94*0-t2u$+#bAgwBNfbr@dw7lP-lGV$zG7d%he z4NpE_gr}V7Y0^vZoOZs5!J}=l{8t1A$&=wLiB=}fm%{3>!3?v|X298dR5qOJtmqDp|VQ6&FfOa>-JO#_aVW&pcH%>oXMx)wMkYB6vL z)9V;tWIPykJ>23TOf4|tjVfgrh>zgm|^W8R1M1xD5K*M6VVuo)9pf!Y=U{V3l7#z60~3jk zN+iz-jH!$niEW_m%(S`nC7?rF=K?=#^BnM7#*=Mc0^QhV2QVsmx6z6#C|N||Nn9EK zEZF0=qA!h*>;lT*OrZB*ywFt^-lK#OLnG%+{6?X_t&rd^=K*c_Cu1aqV|+z0Mq(`C zZ}2j>?Tqn@6Ol*ab%3=c98TEc!i|s$#^m1NEqLQeK7WA>}C`8MKlS| zF?Rx;i#U?VW6Vb!S@Z`=cv`tD=mN%ph$G=GlY~QX%*c4VBjKfphPw$sSqw!SNep8g zfoL*b8`B4pk%%MXNgcvbh$D&7KpF4q$_G7`aXg~QcuN!E1jLcBuS<9ZqRDv5dkE;O z5J$$&HsRHXBZ(rQEQ;}s8cCEemLi&rhbRfl5J$oTd4y9CM;4PA7vkGGl32u8gE+ES z%(w*6@T3w@#`Wh_ps#1V5piU31LHEpk;F}m%S9>VwTyQojwIG14(^^X-iK$pWpO{Q zUS-@7pALKwk4;Iq?>iIpM#hJ6y)0uUnFV|qj|9o$6?z68-y)h1+>R&IWnB5wleIg< z65vkcC5zXPizJSSWuQN0Y(N&0!0s0$pJ9HI#OI7(;$5nEewXnpaVz9s17&dxPpV7e zI8er}?Crpx@l?Ake!)}jlK2%Ui&LnLEPfaFLUI}?<8>+b0ngCW?&2&kTHG&`eXFy2ut)NYqE6n({;5P(w zf(>&*6ps67{MzvwgJ1eaS%lb#yrXce(kH%8rtv*Az85|nV!O#9_L$n@vn@VHi=Xi; zS#aMFvr_^U!uHFKo+``YsyQjK@C(~)7|(SUp{GcxodU> z-du(!B3*cA+31qVy2qgj-U2(sh%jA`n%%G;xwOMc?dOK92xemzE zHNUSl$D=OF95*+#PLCcd7g?pH)%de)+N+TAmC8yqH~J2Z=W>YCz4IVv`yDjywHT~2axf1acY%GGZ5^}iZUsGTdOlvfw|RMUNAVAr#iE_*S( z2wafOST|ab+%YkoKY~n1%Pj#1+Td%(LO&SEPR9pX>r+zw>TEd|lIHlRE{Lm2)Xy%$ zt!0!W#+6jg!h5tdzKc*Bx2R}HmAjgbqM{;iM`>M}rA8#gxy)-O3M$H#u z^C1S8xTjY0C{+{aUycJojZ`KE%*3JW##v%eImWkpYQ9odF2>B8QBDH>9HXe;VdV-z z=na8tX-91}4*pWLDtf(^lqlom5Yt;1>UyOL2NdR*@=7rzU#Y6bctTH>dNtT9t*WT5 zD51ol7&I3xz~KCus?%9;cweeHeDb+~x`}6M`{9_^&YO9FL35c07&PmD zXvu#VVm^cO`S%$#@$aj8mu8P{ow_;SI`#Rdr_m*|{fD1#8f?GFVo`M|*I|CPFIOL|8PYqPj95Vt|0k1PBT% zO6iTne7-E4s#GgF0p%MkBL~5pH494Mi(1?43HO9LOT`S$Unv2dE@=5vuK(lP2W8z7*f0RrC?qe`_iOmkAzTk{%n z+q`BBUhRxiFn?$sNTSXcnzWjiG`I*VCxNKuw?X5L(`DslB7ej%F>uJx0Y$^}h7Axy zhL0IAYFyq>Q8=}t44vs7K46TO9yJi_q9Q`|wbk6tI+k+OvAlZYD-vE*7Y$WP$}ovl z;bIZ{A-I?-DOFc^Y~wFjq^d+g`FSl=l^Ec1DK38)oeS0ojHza|kc(L}%BVTCb)UQ1 zCA<>T6Un*Yl1e3OJ`r;SWM=N(I$WW1{a(Uqb2(@EvpH7pv} zOVV*H)V@Q<>caXC3I9UZm!Yo$>gqeENv_(u(tDtI*N*<>Sa6+m>#Jaue^nE#(Jf1Y zRdhb_uS%NJ1}p=D4SZ9&2-XCgVuO{wVmVF91)Si5%aPJ|b_!PdoOWr_%)a*Yon5>w z?wjU=XYVFca^QR$G{@?vN^P7`-}|G`sP&FF@gFCn9Brft|M4S+;idD~Dsop-Z}JAt zm=YJJ1N90U2Np5I%B!d1k2ej;bI+?P#nukW2&VH(Dk~?IVA%FApHfjZq-r)^RFA`1 z_2g4}1zd!(#O6#@S&+5fx2DRUT3$MhPd=qnr;VBAsv1!>bbxxn79gPMC_q5mfGWDa z*3DnRGObjA9nD`|)cH&Au!u7$FZ0e7L9Uun`?C$Q71}P3e}l|R4J)ZCnSvS9rTy&y z@LuCVcmow(cdI*k+TRHnQZ*TGX4i~0nL1JX9k4?>Q+xGPX)isScRIYBZ}+Kca>bNc zSc~)Kp?@QBw68dC7Fz-NB9uPB+*CLbsJ_45jVQg)4EMux_g0d301Y zzHaw#9dd)R%*{0)RbI(;3$pNv^?N%7Xp7n9zKz%XO6&`X(NmRKm1W-Qm1~}Zq<(K& zBTblIDe$Wug!BQ<>x8$z&^WY8@Y`ppm84=CHK@EgsN%G{OM6k{N?dNVX9YHLyrTR{ zEcAl2^|!FU`npYEUX`dJya%{1I&E}Sme1u~H=mG(5waqox0$qD=eqqT3Cx|y%8jjX zwdvK4&{7>xH496(|I^;J#m04<=Q+#U>cW+FCB{-rT1QD#Q>ev|7S%|$gpeX>aa&QO zw3HpeQk5n5h}wkQ-R#980|Z%a6SR6TPyy|O3Iu2#f>sX(;s>K}0Ru`AKcuJv_(4Dd z#6|s3AbK#005y>G=6>HlGv}N=yENsvH#B?5oip>#?Vo@C`RAYO5wux*z^k@a09){7 z(S@3z0k#t{PQMQ^Zs|gdU9@it7hSL_nS>cFJ#Dfh(54*%`RRvXl1Iob`GnlkQ-$23 zH3$>RpcE>-x2_-<0&chS_?(0+E`24STgXFnI>@*+bkOZ%woMYcuBBnHT#)!JLGysr2>c4Uvl})p zI4WdK8z$t$9@shL(lgP%bjQ@2jYfKEffBsW*7B=t#0Uo87s|yo3t2KgNF6@Xh{)}* zN1NY#!3XBBqG27RzPKzQ0tdY=31>9nhODGrN;@;H(gyGu-;&NStWQAW4l{e0(Zfux z8C;m#ChzlFlxM6|2?zAqqy-2TDKAOWv0kV)ivN%^+;YXwmPq3H}xXw}P>&w4kCWsG}3BEdM6T_{y%7;-YCNja3DKqF~N#0ZSt zpe-Qnp@g+Fim70i16g!Obk3`iM(VN*k`+BryYeQb>BbvfmrP)*`Enk5es(p?i$2Wf zK_3#Zo)6Mo7dSO@6)ITuRem+t5`{|BN}{ONJNR}ujtO?@(|Kz%cu$V=9o4q=a;aEuOc3L zY-L&lmkp!4}_2OdyvOzOduLQqhZRKX**?#TZVhb%%uUDf?*uGHCflk=`5JX4zo`!J_ zC4l>-4=-qrOnb62IP0yJ@IAF#m=FtMK>vd>R;bRbFMA~!_LwwK>$ZXGaWKcFdRs*h z7Cc%l7j=tISIh!yPJx*?`NqCTkBh9v$o|nl7!`}G6<~zHJ1-?xm#cX!{i0RcQK5k& zXAA&y^Vl6BdVG*Sh2bl*a$>e~OtU=){@{D#p{L5&Owtf*qs$4er%%2p889JD+QEne7gCK0oC0V!nHKOzCNk46R=5-FV~ zZ6-FYCLAjq>Kiwx3DZy{qE}Gp6bhFx62b<91*$powJLV_Xg~DjM(@qCp*NDz5`fI3|yFsC-a@bvpZFksFn=<+VGV`<~Mz6KL zA;<(UUBb!LRVj(q0=#mY9zwSyFK5&gq$L{>gD%8W>J;asgPCAfPXxreF(55#bqvtP z=#XZA7gn1f7$G-FKHq`*lTDE#UNe|(huTy?yVFae?KMfLmu4H^3#%Af8-+x0z=Spv zk!je1bj30XH(i(RdZ~BJArsC6%#f*k-L$D`u&7pPg?@oLG>Wr9SyB(^l_`14=+BJj zR&W*Cx|dl7%`wL)1PCGo0xL9WU|W*V-yetBrl01DSGG(h(Oqhe`iLM1q)|dl$a;}U zMJj$Gr3`J-^M*&+zkw#0{UZ+Z; zC9i;lEVb=jt>8fAG%+LdhS;zJa9#1H5PnLNg$?FnEBb3S8NvAwt)B*o1YymJg&%Su zTgJG^REX~|r9!C4DgYptip6Tc!a+i24|U+h9(}2}PQ4)jS~)cZiMayW20nhhG-|SSNJyyV|Yv{ zgvib`Ws(6xe~EpOo=B9~LKkj=#)N};t7786kyw1k$x zK@+)L$b&nApwdC=_9JLeYe^TD(Fbs1i6lXnQoJ>NR%W;8)+y)`XV=erg_Y{ffT4m4 zoQ70fL#NF+AkF;pat$4;xU%cU<+BS#IWk0NBx)WS4Fejd@zjxD$gg`jE#OE_KR=G; zWvNap;XYidODYlyGzV8)d1T@wIB5L}`)f#-@SqsOT%jo_8;l*(6(IqTL9dN2K~sb{ zU}gjm)TvCG5uzuN!Vo>}WFe+Ov3fbaT*Izj+67HhrGld#AZYA~GXrHXCmC5zF;QBo zos47r^qP!j8=C`DvlCF!>?3J~G1K+XTtp&g3Mcx9wR10b*pF^ZFha7RPeAt+$;O96 zI|_x83C<;9azDg$zN}YHg>q3TENn^-T%fn065jfWss2#I|g0|Z^h zE^GDI%dnPDx-9OIb^$Hm`(1=A!PmtZIet0b#jgnS0?ewqDIYsuQR>u7VtWD5GEUi5 za7ynI!Y|`Y9poDP^e5xB?-XDja^ZLA)rr=a8Nm60^aB2f*9<=Dz6@IlG4g_!Iu!lz zdKxDr`5k%UiYwX=M*Ur+H?5w-0bu*J`3nfWhR~r{1J;k_)4qr?6nyI5LPK$$2z;Aj z4J-oJDsXAap+A5k<$(oIkaR4DvFHz=46_JKRs{P{u6s1pFI9iw_pDN1AO*9a+%nR4 zao&=2cR|PIkJYKbzd$eU#<<2&w4u%R0fd?2C`Y6Wg}A_{SFc8BF8w#;Fz4ZiBhDsqGh8z~2|RC{zz ztc?QjQ9FFwKJ7D!-2MEIg_N?KOHKY`+hh!z-^VL;yA)J^7^==~SLQijt|en09K*KL7MJIL{dClT z&4Vq==Az~vH%0aj9&n`GtpUTf_-#vVi^Eo_sV8j+7m}qp$L%?Xt*QjR2+5t~0`O&P z_j`;}+m$#P!FMW z99;BTl;m0TRg0!})j%`{-J`UFHud;POGT@ps6$bR%|rLwYG0tY_;C)m!XmMD1^SCR z7}%qsLcPbXK$}sA0{a5m<}ympR^=I8LLqgl>!>FJdr(ren1dOi8DnBN274JPm8geE z|4@Wf51`?&O{wg%nkwRbb`q&nfd%yj>b}%9U8I5u6oKPIK1UXDSH?MT#We2Hcp5FS z_3vrr>|2FYp#HondL3h{9h6MeJk*m~XU6w!5K8N|q<}|l<#|#j4;xM?0Omq_enE1h zjk;V8CVRRzai<vYn_w5 zd5)jsXwlXq{yonihI(GtxNGP|O6FnL6mmtEqE6)kyJkHWIUHfxI5yFxASF3s(PJ5E zAc9BBsKC~z^TnuqkLKYbXV#-GVUQD3K>lB}xRZXmzN7dDdTlgq#P50rzkcxI6vil5 zLFrbG96@O+kWK0!wR$X_N!uylzLf$-4>Qz((Pr45?C8z4@IyMr41733qTUncD)nU8 zrTfgd*+k}-I>P<;H|k?*{U_}5wzC|ctAa&v0%%jwm{9gO4%{loX;(A+byJj z3%BkBxjYL!bQGaKkGpZ^K-(rvGn(?xA)f&M3R(|GM$5>J`U3UTDqzd7t)WcoFjwKu zAj!`S3-;lN(1KB!UgoNVA-Iw1-W)QlB6pQfT7#j0y2+bJe zPhInBV^QeqA`eQc8p7%JNclp{2wM{_dK&Tah)<4r8os2L=6#)(3utSeIwaf5G$i{4 zq_&E`5#@ZWoP)mNe>!K~mf5oZ3v!k|%}~Cvf(^jZC>QZ|A>uEg`Od-iGFV^qfLzt(U>nIX^MH-VJdNLHlMSkc#8(q;Ig2s?>NnwC^w26kHI zvP|_+=|#gv(`r>GJ}R}=(9P)$qfBYAv}LI4A?DO&9t)M_<&ZCPO{2MTg61+xcwS09 z4_cCv(U4nFFK7x!BUEdLnN?)kV`hD~$1EIjYs_pYVup#FqmNtr>PWkg(Rx)+w+q!; zUkX?KZB;|+P`fk&nzoB;OSM&8-+%L0X;f`Sn#ZD4_61b`JZz8Cu*d?@B45J|aE#qr zNb3`zZXtohvXDTMToaag5l!tpSa3#|k!%yqm$^=~$yLLHJheN>(fV7G9L4=_{kRc} zG@*7d1$wm308#)jW;-leOU{tZ7&PY}lr}8dTKk8nD2s+5R=U|_fcHG^teb)GB6J3| zya?MOZi*Y$tiG?6hH9W41y%n<2z$B$?6sezo%+_E%kZ2=WobG6I7~!Blf>;<$x7sQ zWNy!5Hb(nOXfLsvtLEiU@hD}q>>$TvjVL(B=tmlA65U(|Gs?HisMKN>KKK6wp9g;iXe5QHB76};q`~V|Ni&7{{9bt zHgWe`_x|q|`;B8i9S4l#04|F~L>O@z12p#2IMD5?luKh6IlA}_ zo`v-yhk0!+5412kfCnZi46j;I3pg0CDA?1WMB-(@ac0Gw?=mL z!ZHjC0y{CpI)dL(MmQ>IABFQ6oyWv^49+n+$HX}X=LtGbi1P%Tr|CQ`&eL$7qVtqE zPrAWn?%Wz(y^NKjHzrHg^CbMz&y>l1=e`fnhiCAyEo40EsC66h2l9Jc! z#+<=aUcc7#>udT|)2|IuInje~38{;ttcznb#%P?Nahk>{8VfYe(3qq#LnBRNj>bhA zmuXy~ag7EL0SX6px?QRIW+GMp_FymBq`ukRo2uXL0jl-e8gjb_!RxmPf0f3a9tHQS zV&3UhjC7|bE+CqBP}K2QZ!Fe3h#QJoO7iVEd2_sLSb>76>F(ZS{X08=K&t-TWc_<2 z%rvqDkXhm-`QH=sH8JmkCu16)*9GuKAMsDs-;67y@>Z(;1D0wUxH3Ad^?PEzw%hGS zsRmQ$br~7yJd5!_r}nm__5jtAnvF~4OaQ|PvCZyuds4HBL}I81HGw4G5%X>0I~zxg z`omQHr#hW?CASACVZ3LUX=(6JS&eK}Lp@A#s0UaM^&p2?(%`)~X)p^55{Ahl%t{g7 zBZ`kCyGJ^uM})lJ(>s)^|3cvJYdBs?!<;y&2=g?2;y|tsFL*tSyFKwZijmj>i!RO{ zcbBn=2XIF59*OyWFHl4#C`t^h8|y|D#{~HVb4=EM#WD@ThzrjoHy!$>4vO#Qj<{nk z)_npu=+12{dN`?$tv7uqM@IRFk2X4J5C|2c^i)O$>Q`L92J~ycejVuUqmYCVr!hcd zKaB(Zj*8>*R_^S8RNw8WKDc-?43lQK_!^GTHeMeVzJpWkb<{3||?Vnx9ub0+Za@9TR?!7?_K zh{a+^3xSn0IEVzLEQeu9^ts(=sB9Ofg%UtyW9={8VfYe(3qq#LnBRNj>bhAmuXy~ag7FqKFRR5e*H+l-q9~K z)$Vu#jZ{by>miRNz$s2*ryGO#N^QP7G>AloAXB^0Vq+jia`U}p7GiNHKxChteLabO z0kX*^5uLc^O>~gz2><(+$@Ts0cn}}lJ-+YAS4M(|AZz9=rDoTCEQA6!Q$uVG^PdiNYp2@B8 z2o8a@E$C!$h)jxMkIA>*dZj*%Z*KeEvU$^P^i)qe>Qla#DTFzQrUvlITmR}AZb8go zC%oF_s9tkzouYuWw~8s1aMX_AvMzB3w|GfvHYfjuGMc=zG?7v{a26J@}_2(fVB@*^6Ap2Sr2-qR08Y=yB&vwU)~lNAwA9Rx%saOuW_yr_PhIBQno*B8Cxp;o&OAD7~GMVSiiBfk80alAEXM7fh z4>o+uQE)edjkma=ZsW{i8P{G*7m{oYL2J+t1?srzyDf^QqiGx=`5H%{+JcJIFJn+O zAw_A0ay^(x9p2@}pe9-n#ByT{f;d%wTO?&&_doSJI*GfnWaC7C9|(CQfnTbAmpwUj ztv*pzSy%U@#$M~|i=|G(AG)C=|2i#=Q>psvz3@Ri(Rmv)sYY7legh*D$JwdvGrJVR zyn(=}#>F_pzmaO7hk@b%K1nt%i^d86H-v4nh!syYbg$CL?l5FU<0Hqr2 z{VG7zK}oV%7IE`k{V%1iKV%@9=-db6;LX|8?9d>(HvrMwfedg8b>AU%r%^}Z61~0g zr;_*s^pa4aQil`C#$BE4gBTTVWRGD6Iz8yK542v;_+Br%Q8*=)hv*Aa6XKI>yaqiP z`ba$1!!(kO*9ZG{kf!{<$Nzx12uw=pzTtp_?VoL~cOlbagz^BbFOCv%wDW)^0u#N7 zvJ9cZ-b4^oG?C#TfUNXLSmjYnUhlK&p^JkH;xWd7T|kW=A;DDR0lImX@}VyEFErvm z71+C%BIkWYOK z#o@$p>t*k~?y^4R$J z()h8Hxf`R$yyGWFm&cb*-WVS}j^%nsrTiWE?%&*V-DgKfe+Qd=(MMscyx9?tp%!ZF z2nUXLY22gn8jUw#K(@fRLg!nwUF+(FjtSR0G~Skx<^x(EVz_#kArK#oPurUa+e3>E z_K+SQAlPpF;`j~Vw;#U)UA>%O8cHDS<`|6{f^Kfm_y%*>#C!w#&RB0h-|w9q7U~J* zF3|3ZwZ)k5!{HnYZj6wROz7{Ac-}}37v1pr@Q89J#MUu76zEW(LxBzjIuz(o;Qtl{ z`p0ii6C>(bckmmWz|52Ds7smY%;vxR_3y6V``gJof06(5pRJtEP&=4GTwNFo|w!PVClck@PFLmk6D6mD)pCb;G93W z-v-Xae?p__VQ7V~(MKN*|78@6g&sa}yneFmsGoB}!#wwIU^P{H3*_f3j{1!C#QOj? zXWb8nkBtNRB2KAXhsncj8JzBz$0-k<_qc#_F!K`ot?qyN4_SXQd22h4-I}z`I+bzh z7bjaBq{@3CxTBe87}Gev$lGxEd`>aeqMW!a;8@uzLRJxuXS4P5{cabyI>1SvGUqAP z)|CDY<#ps_C{Krus&O3T!|p#dp>_do!}DGco($Ee)x-I;J5$U2N3pUN#D5X-^-W3^ zzcCyY9QA+9Zx6z=gghn7Q^4G)Z;$aQ9A;^ErkJ-%U=W@5G$T&-5#HlLO*>!RSsuJc_KY1P5byr z7W60Gn&U;O7p2`vi8F~BssK0ME2D3|+Abd2Fv?EalLyF8XmsG2_D@~6$a-DDh9CY2 zf^q-;eLy~xfA!&qwBd(8f@plw=T_5G>Yi?TO5MmLc>cNL4u}C8=TT7tWJ>&OXY;&+_?w*xNsKGB+7p zzhJ`pvG}~tu&W{4xp_h6m%sLVR#)G-^SWBj{ZJ=-A6Pa$Y-;r;$YVGhwo&~fbz;hO z_X?HRGse{3z1qcok^Ok*=}@3Ufer;a6zEW(LxJBA3b@$LkD`A0olj|}BzkOt5kon?Y zr@mIw>w+z3|8m&gmy>Ptia)CRf9=9kdu~g7WnR}!pLzOQ6W+VOZRW<_m+Ft|{-5;a zzy4^}wpTuwdC20_E&qL_nvdAEfgJd#?*DmxzV^^_bH4xS|8={@jtBKzIOI1=Zu#dM zKRfK0wsG}wDnF|GU%6p@??bwO@VR$B)9$mqlMj`~IomdJ;G??#r~UTFH$MM#*G)c@Qu<0}SC9hu3b>#I}sRq1JyX4h2DN@u1{oL@Also~;uRc7kQ=H_(WjN19* z>t{BUTsk8Ns!pC--6HO0A9t!n+|@4bl#RP8jJwLj-88eNdcf3FF78GbcisG=Mi+O= z#a-j#{unR&+;nrp+@`8@a|wA^Gpjz`q>KL;ubms_5!Au6N)=^`?wp{dS9^q(ffOdrw5b44E~&+VmsoCRBVZRp2Z znstpsTNL4s<30}kII3xTX&(dEqU~^FV{J`UDpS)?|FPc2XmcD%LbUAmkMz7g!*6v{ zwj=X*u@>d|4nZ*5EmMArhfwdLdpS#(Q=H$G+m>e?)VqZ1jg2oLm*M{qc8m56f-5j| zE!deZQ@33iZ3}*fy;hp&%!NLB&hKY0yZ(oXUF2=v%h`{!$^?b`%cKL0jxt6!Pqr7- zb?GpL-^ws$ocz*8%l=V@dfl@gy6`aRDx;+V8js~av|`9*bAV7zYa z5siPBuF@!7`9*bgbG`0g7yRx~>FVZ7SAJ1l6_il-uBE@0uFgqU7}Zt5^SZz3_{)ck zT@oQ(`9*bAsJ-rWfB5>*(%p_oSAJ1l6=tvd@_B#QE?pIN>B=vvtHSGbfBr$q5b3H= zOILnTT~5VrFUtXnKu{74EYxL}QGVr$EttRG2!iAUeu+ClNmUiYzu@3tpF)KjfxdLT zf4`u(uy1bIS2A%v|9yX-fnQ^~DKj7a!}IC6fg#?(0r=<4e7OF<8}EMDojkueldcQ6 z2LHRHyrH(1At^0jvyIE@M9-IuO*2%hsS1Lggq!H!nJGEHrg?6vc2ufaUV%wRUQcY* zH)m1|t95<5*1I&_)J$4-t;aYbJ+i*KvZf9K@50`gn%cC#Z6)`kKFT$n$)cNhUQF76+S9&E{w)!!GV$ErWC`rS%Ep1E0dIK($g+T8adhV z=U&<%xn35`-=*-Ukza;CBj;usCZ{eUvM=mK zE1#0_^=+I>M+QZv4f=Kv7z~2;!TF<#%f}XHrp;(*s4bpc8uIM~$G0i!eBx$UFn@1` zZ+iG__{N;$w2Ji1)ZE&PJjJzD@T`(>3gh)+uI;qGkJ~Nta_pYPwVsY^w}xB`0#B2} z@e_BJhkk~KnQ2YwnZ*-I=^GRkGIR-UYw4etr(+yXHx&>7*WH5o`%QTIXMTk|4W~#c za`m=5W*c?O+o^E&W$eg?4;S+`=50+CZQowf-z;&wy*=b!5bT0BVSD*DoY8^|J5Ec4 z<2&)#kM#}-f~@9odV@WJZ!o7bFi^PZi0zXm!hWr~xs`}q5&GhAAFwm{=ePcq?E)Uj zaZj)>co;}L*$zQd&?y)O=i3DZ!4drK5_AYUn|RisW833I*q&=PX%!+jfbfcE5U6Hf z@u*rE%rS8=h7Gd#ne)ejNOla!b!R7lL%@mPQ1Aj!;WZa>9LE=e$Ac;G1h9Y?VY@PG zqI7mAy@wK7zk3ItL`pe6g7baMxx(NOIxI(XJ>AT8jF4?4!9QQ$?ZdJ1U+y&Q>pD&c zmEUD9zQSO%v9XPF9T81j$`v^o4o*UJFRnqTpM%xNX5|0HwI{IePt8_Bajsiset(O4 zdLPnalB51qtFep1R})TQyk1-{$My2wR4=Q~B(mHQsh1-(q2{pj1gcL}KUkh5LY_tI zhqGM$a5mTpT{v&*qe5y7)iJH>2h|lKXD>rg9sKW{`0M8{7CHVO6)|x*{C}Zug#TmH znek>WtIA9r`?jh9Q$66_5%BR{&&Luo9dG6}7Q?^w=u6l8#~h5?;k~IHj<&PY;el<7 z5~f`ef1=}-^Affnem-_HBJo@d)!hgY2O4%^93MtPQdOkjAn z5RPpnToD1hUd*$YXFFNP(k6N4$C&SiT;i3T@M)R)Vs?!A&(QzFxi&?U=(xu$n7?o} z`DxF!X4PxfXM6PvY9aa7ko%FXU1X)Nt%M_I`MN=NvoDJ^$XQ zK^?Bh{I!4JaPkDsn{k!;jpYq>b-Z$yTa4(Qd&9F0=qaq%kGU3eZBOD_KgYFyg`85m zwgVkP?y(u=hprLx-0QE0thoIxn7_1-$@5!quQr`(8kJ@lL7D}#wNg?$_aZvQgjZOv zA9F9}-k!ugwP%JD3C}6G*NP5)9>jBM3X4VL+%V1jrkzZtJf}>bv6T_D#Hm5>sgm#t z>-A$!#hlucIOX}`=QEaTAr!8id020M(|=4}?D;ajz9!=*Oz;*@roxeBgi{!=7xN_M z$)3a$-}dm*sq4=LK}M7C6H|?i=B=CDJ2sw6>sg>E*VlsiOTRH$+ry2e#HCjA6)WJ; zI>IT8*NeFnb7@cFl5cZ-AML#&OOSIdn7@phl3!}clN|kvkp#4eqQOVoBqs?aTrF!eo6O?o5F<_o6Rd?;mp~ z=FXnTolbeUqxo=+tM&{1%(y8tE!EVNny(#ja`WN7ZQ44_P%1YN+!?0H3g;M0C6{{cRHSRuZcMZd-mF4jy52wL zPRyM>kvp9u+;J3OHyGPC6-4~_0>h;>4Rf1wk6R~aG>4#ejMtum147*$=l?W^SInj> z_rfXdlk&C0>^z_5JVeJXVb~yu&Mo?R4WVxXv)WVvw^5C!bBybf8=TF64GY+M)XZ(H zCcZ1sm#+7Zc^vb2Pvmje2!|X6LLSr6R5#GL599HHp>BR2Z-GMZ59b(TCYL*#z9CoLv4Hq0$^xV7{bL@-Jl>OdtTtCP=oaD7&baEI z1$2+-`hKr(j}H$0^7D8VoGOD;;_)GUTJrdiFzn8G{5Ih#5xXBif_{K?9e{D}_gC84 zEe#ffS`Mjw7wB#WU*(u6gRg;|*kP@Jebwwfas5~;+|}&0poRITnD^2WK@q>@_C==a z2kslr_J4y~voG5RfJ-^nHQfwqUiOkqVDd2tJ#m>JDyr1LG zfvdnQ_yBknDEkY*hdBOkAioBkAZiC4}uSY3jZj$nq!*>M|15J z=00~1%3MC|`nWs0dDwmV#u_{{xP-2IY^`Q36 zdnUAbObZ)!eSH3XMSkjR{0vkX*bv$n6xwKP=hqICV^YEmMXEV3x6#>n!GsNhpMwW+ z{uiLG^+oU)@Fj30_)Adb=2xJ~$;;s9!B@bWz+Z#k0e=HN32p+P178K-1Yc_xeEtLQ zcN}Y?>-XR};AZg4;G5v{;2*$)NaG*DN^lEEeG&W#B(1@pL2LwXf$xJ`v3n31yp7|d zz`ubr!M}rdfd2qDgWJLW?StSQum*e=yd3-|cq8~;yWk6VfcxwdWFGvYLRv-cekbklW%-NDY_!QheLAtoP=B7W_K z+1R4qx9boSW=$fhE$aQA&fZ~Q0e z$fPjN1?bteU5Ri_nBG~LhsaUR%r*1_RZkoZ_5xMMi97u{?gtJ4j|K;VnyNhpq`Mpp z0y_nl5~ud{D-Beq6$VB8J_yu3*Z!#8O&vBJeY?gb5oo=O9K|Z!gLMeDl%GRErR6w~ zp>Hq@><=Cf4gyaAI|b8BoQ2ez1!mvU-eEkdx9s!&Tw@Py!g}ju!YiIrKwe$Y_dl>V z4?CqTY}n_X3C7#jMQxNh8zVubb(FDDg^g2M*s#xk66RTutVC^$aW=++%JXr?#!PIS z(ZYtEeI#o$8l67Vjt z7Q7p*1D^!z_X)224JbRWfsLHs4$cAJ0h_>g!DeuO@+t!sfYR6G&RmWU1TO^-ap!x2 zd}}FN3eE$Exbs87`5YeyUJiB&{=_}{6mp#7jQCr~Kb7l)5ZkXRG>ve>KQnq1oSnH-ekMFN3^? z5qt$y8^0LjIh4_73?F=z<72?DfrG%WgJ*zCz%#*{z!dlm%GT#V#d8(7l=Dl#o57pF zZ-U|7 z_qd$jDnIADdwq;Muew?1FL39NcISPW5~^(c@6LZz$0U zb#l4EN-$c!?%`PF>wiF%ukU~=U-yD4U*83zARlcxq%GU#+%GZNnw0u3p zvC7xOpvu=Hpvu>ypvu={V6=R#=2+$Hac~p(1gP@$Jy7L~>ugcJp5$2N>-(U}*AGCI zueG4c*Hd6U_(L!Qs=QnV{)poR;5zVX@W;+f=^5}b@TcHQ z;LpHcf*Zh1p!9zWKFe_jxcwYB0DK-C2yO($`4_-Tz@LM);4i=?P~qo-FLJyDd$ubL}jBr_n{Xu9GQePBD4eIzIdUs6>LR1(m5|eh9i@Z*+>>yg4~O&LpCAXk*;d36(F`O{c_c}2*Vs5l0ZuAU_3RUL+5#fd_ z;vqlafSHH2eV|0xcT(4QoC4$Mn`hO3ssYunzZirz0pmV1=4RZ-SV?1uLlDi;7YBYW zeFS>8ZOQ*EsgbaiZ+nb|dl)=iFAA z&GC1;b-&{8cIUq1?Z4aIx=gn2*K~D#{(-*0n|utC6MdPlsA+C&Xim#p{hIBR`Obuq zzSn6TM_lfk8(Qsa&#U|K_v$0x!}yPXufBDeJks@LhK7$rcU%MJx#9N^TDhM}J!_G= zS=8UYviCF`@fvFP z5Z6@e2`&6u1UKua)i*maqBCiBL#Dym*ZOL8w}(gko6^kS$8dBA!KDw7g zEF+Bcy-r*o#owrkw8^{0H$hsLNnh^$H(Hl#u@X+}ki6r0dvYcVj7+&dcg*;TbJMBn zbkj7xb(N}u6l#xGQ1+J*R^hyE>$u|fIBt)3xAu64@_&#m^$yIz#gzZA<|+Rb=}7sf z>@Opb!g<}e{Kxfwo2&n|NDIfXDs-1n{#WEF|D&6l^tn!3|5Nan5mw>6Ze0H3^50g< zzu*6R?V+~Vmxra_yrY#|ou~XW-mzt$a=(Uf3gh+SvLBcI-M#EdRbx|VZr?6U4rBXo*#3~K97~@d6`iS^K9F&4sN_mIEC?gF+XB{?C$)~9GD7t zS!;eYrDqmTC=KU~{CxH`Mbb9<_6L7iqn`G^N+kDF1d( zp7N+pV{RV1B0TTrh_#cj-LB5q*F5&8DO{Je`rLAKBboGpl}Dd2LModHT*bBmZAt}SZkF$gUv`xzpIi-g{C3X zDkJ0dGB`7ga0=t~V&25O+1+{L#~g1{Zl@#m{g;G!7luPq-t~@@oc7(&en47Fsr8`6 zh{o6)XHNuKmdN{B+V}4mj&fl~@!N-0Jhg~@-ymV$J>W3V`pxP3f#WyvSi2&v!s=On zC(ajvil-0AI?JqvNS(nBK^gvjzr;TL?t&Z{bih|}ZYl68j%sva!{AOPPOTafl*0^Q=22#Cb6C`j5$iC&;`!IVbNR^X4 z3LFLw0ZC()^{K%LAa!BDeaW5&vXs>9NyMYGY#qluCdkeQnPM?}#n2td-pDakT=r)0 zH1JOFbWnT4lz~rzBf%em+|%qcU^%G$$C-c4{t6roz6Oo~H-lrrZQwXig=Re189W2j zo*!p|#oz=``+tz9*%9DbU^#d$cqTX*oDNok+FRy4@JjG}@H+4Uko{JJPlD`;%1&79 z#RFaheh>Tz$3wLfG2^J-Rzm*Qg8-%GdLgoCb$Uv7I+W1415B- z1^hMmZEy>CEBFq$9NaI-+&0(`yc0YTybG)Z?*?apE5T;)9xw}j7rY6)54;P!A6yHr z0-pmP2DgB4D*Hb8D0s-e?8O8g1+E5903Qd-!6(6K;P=5s@CV=x;9Bq-;8Wn;;19uv z!JmN7f=`35f$PDyz-PeD9oahxJQREm><2y%o(^sVCxI`37lS_sF9Ux8UIYFLya{|6 zydB&GJ_NoB{uq1%{5kk0xEcHd_%8TIuyZHsHSlooPvDc_pTU>Fx4=JwTfz6izkpr# zW4$=o2mC8I6x;?@fYdSB6!>?r0sIH3mvH|H-T=M_-UYr7J_h~^TnBytz6R1zWd91b z2ixy&zT1;M987Y2EVwUN2JR0|1UrKlgVbf&PlJ44A$twTw-U172HEdDdq3C>Tm!Nf zboLeSVDQf%dpKwR3HAWHcV?evupihPJPte@oCF>LrobYw9_#~N10D(91oi{(0%;4f zKLFWxE4vY7->vMc;9&4=umtQ}Kz$7M21~&bkoP9Cr-Qs3k(~najzTsK@-9O5Dv);$ zvR?stuOO>6`_#?ZM?u~X$UY5@0$&7q9+mwYSOF#vFwdB>2Z79^X9t60!P7wY|H_^X zP5@_vlfb#)IpCMUbHQ7|$>8H)CHPZt3ivnhLa<90#&=*5_(||&a4I+soDMdCDeziw z2KWuI3S0$NgWm^dgKvWDwV2(fEAN4W-M~x060jB=0XBkF;2cn!Q#OG&g3aLFU<=|(*N#IrBW#H$*8^HzOw?Xzl%dQ5$0R9BL z4%`Y}4|YC~dJ*gm-TPxUYxC-n8J^&5|9|TVZ**e9C8ApxCbCZ5uI0Bl`dVY(xmh%-MT)dPx1RSmh)R_RlGW< zcw}=lqVURFrAMf=`0LQMC_bH+UFFA-i1JctkUiy_!l(>LU;bWC_ea;`&&}qy;#PWe z&n6)%6KA>KzfaiX^Es|`G8I%F=y)QcvZegK82LP+eRJh6KjoW#Pe7E$Gm(6Hy7oHc zT107(o>1v-M81S54N8~Fq|z(9($js=b;(a@S9-=HN{8aDMZSp0U+1KwYu?#;A8rmh zHzF#dx>jA|7ZAm(^eWzgh^~1oqWo97R3@%Ql!mC@XE@gVEkR^U_vuPR_I%h+@>}7L zL9Re#ZxG_kiPEfiqc;3+#V5N;i^8eQ$d*K9QRPXt`nzM55%~#qUMN4MS!q+4p6<8w zR8Cb#T!c(Vl;^sqx-Z_Y%GP1wn2)};dp|B=-j$=iKM<4BMj0F$j{CM(w z6ga`y5|_pMoW1Gz*>#%l!*tVc3hdgqgx1`dczP19g5PpeT-o>(cIcLI)z+@&B97!Z#c_X-a$(BM zOz>2WXMv>Aj29a~>8s38=CX|W%=qzgu#w{{!8za!UPd=@+o{2Vw8yb@%str<6}tlE9e2LzhGDPXok^CJc1z4ql7 zZ=>fe?>w)EI6u_^1^hb&sX(+RkLvL*NRD%>NSj@+lrU?TbdQvOD-gK_E?=)DeY#J& z&OYGv91jN<5%*;j9~NOhozm4YHLiHDh00*Efl)8~82o81NPox9Yxw z5!Fd!!}6xO$Ucuxm}m0}FQHr*cdN@6@+nKbWb#G%b0^12%UvM#kH*JWQs&LLSm~wA zxa%G2u2=1|u21!2moR?px@VmU^W0N$cSe>Xa`(FUAHZG_$GR_l!3Q}W20jE*Kbdj1 z?$e_j>prapb)Ph@)_r;cRC)g%$h{8MfcAcz;L>+ynD4f}&*fD#zs3>PK7UG>XHiOT zv|fQ5SLt5-ko*`0t|Oic!5^FW^xXxO*HPj1%buN=PXtB$Zf);rXKw@HRbM^}s{VP- z*i+l2dj1GwZyV>kB5x@{xZV!4I-s)Bei4I^3S=sx`HLmUDr7yPd5ZS?GG~a4K&B!Y zWHGW5S%+*w+LOp$$OxnoS%@r0)*vq;+mWuFhzqGerXzc^({1q2J+)V`+&~NF@29yt z7gI^A+yt%m!co{Bgpt12iJ#xZ&u@13=Ql?N_Pqh-g_zxt+xdD+|L(xO)IV}797pu~ z3b?V@b7L2K;S>>OCE*p;>&HBadD2#R!n|peCoR?ih)Zf4Cbrh`d$*L@_XOIZbJosu zhFBd@>+GHB4Bc@Lm=&(=K80}J(VtC@80p$8?Ey11w+D>+63YoAeXkSqFy`Uz&O^W6 zz^~z4p+N|4yan@jA?5xuU+#CZ2h2*!{&K=9oY#%Ze_a0CT>0l2n%qGa%wOh%l56sm z|L7htD=GWS39E2kH!lBi`EPUOUz063&7*n8++XtfJmo*S2h2*!{&K=9oY#%Ze_a0C zO8NI|jn{RzrM}!3evmouLJO3M9O!YPc`i_3mo_ILNP@8_y`_O{b8xE~*Q ze!Skp5+m9_S_D4^GU=a?SDrm!*29fWgi{!=7xN?L$L`LL!vi~)droV9wAuq^jC*f> zs~!~MdRj1lZ-g7CdTvzBzNB()Q~lZX6Gm4|E1#XNx+Gnl+X}|)1+y8RY{8Cf_;4{- zVy^7&T=DIM=fZn>SdNQw;mdI0f(REz*QaLGrrn0Zt>~clg15ng?bwkGA1>xX%!RhX zg|{iUwTOLw{qen9wU!4W_E}&ee5S}6w%}pT%h4Uns;_o1sI@?>1Ir!?()46ma~JSC z%VQJq&a9z=hGuO^FYr9h_Xf4Lqz}mYCRQB<*{_3r!4+UJxE92gd55YW_!`GN%g_E5 zWNl8iGYJ?3@_vBU$YlqD#F;Gzhk}*habO+DdY3Hg&&|3#){C3<%(M%a(u@;3=Ti!c73jfER*ifHT1}!Owvcz(wFh@J{e7 z@Imlw@JHYzQ138Rf`10do9y4g^TC3B>^o3LfKxag0O$V2ODew-k3bbpzwWj7AL~C5NwpMF=bx!Lx4?}7Zt$*@s$FyeC z{~ph8tq;|jF|9`yM%M$&PwPHqQ|pFhvjS0g#UWc-6RLQ%7EqOzEu^~=UKZuKFo#+Y1mhM%{b)vdYc5IisuIPOdSCuAl zRQb%(2EBel$&0RsRhiNH(3WdMm1njuoG^U>g@*>JH;fzUY?p(o$HearyeX)4-O+rv zeTe)vR0k-1rQCpjT&ljhHcg4o ztv&Hv>7hml$GdK!`!-y;Bo9~gE_65arR)7;uEgI$ZcE=n_FTF1-{6Yo)$Rov!fj z0i7eT(x$y{)ZE<@u~Xfg~;F3OYT@MJ%TCe9h2*jiw6y2*SvG?k&7 zG_j#NEpKsE`zmOVC>uUp%$t}uZHYI&t^7`eH#;l#t>@&IY5kJ;vMsU$zh%+x%W6L7^7U8 zuC7RBQj^mel*O6N@MRk|6yAr4ITLfHEpf*8t^8c}AQlVA^|N69GS8Ph({rM{wxOO8 zy2}51l>PqbOV|6y8>k^*pz>^VauA&by)?wj+K&fZ0WsEKE;_ zj`{B79M74_vm55tR{MFbwC}fxL#6Pix(H=Ldi|I~F^Ad`hx{DZst8whQshJK_&%8b zzF(9(cSDEEcEX)#e@^_Vg*z+yTK@PjF@IwIv?czOxUoIYB*SMbt@sly_92IS`_t`c z+wA<@g89oc(d1`5hqPpSN?omQfHX5ECGqE8xYL#J3hVV_{>1!gOZ?Fq0zFfFFyv4E zH3VBJ>zyg<%%KHea@_F!zlXxG^v9SJ^W!3+=UMGQ0^&+6n7{YHv&k%AFwZo{rZcS` z#~7xGXFZ5_HsKZ4>&HBcdDfPA=KFaMN4T<+A|H;Q9*O9(4OBW+m*bXyp3^wk5{k$D zp<|sv@=DJu&BL9aYJ!%g&1!^4wS7|(cI>zLzTIOx)fp1@)jXHh94D)0Z*%*Dzx4T% zPe-{_UdxAVZF{l?9<3(KWc0jF%%zx1ZHY_1J@NBu?N78tKRU0*bJ67C9o$%@)dWLy zEvLpSYsDdKD7+67b0X$MTjGSDS6dyn9n|qHAH_tAeb|opbu^`VSrn(|``+=KC|MkG zDEfksZA&`BnL&h87_S%eCgx3B;*IZ@Js$FA$9|b_Z~WZYi>F$KO!7nl?}sa=c&;!} zP&vObTtZ{#$t-7v!IzDMS6Htfb0+3YTjGqLM}8vY4EsOS&u6~M&P{(Wa$fVx{@t}T zk@GvDNT79XOjid_Ms%CgbLOV&tITs8tyN%Xqi?Z>&yO;2jZL>dh zWR-TMu@|T`k}mU&F-<4x{1A|IW={f-1;>I6^|IRg0KaSs916|?>F#D{gTuhjgU5r) z7uoqbcml^agEa41=4IGTfjvc>|I;9GWVe7+W!XQ0+T-M1ko?K=?N+mYLN`$RC-ebN z2TQ;*kZ+s@Bf-(&D3HDJ&E6;Me{c3iNP(j{KLZ>C>b+sE#e9Ey9LP61wI4>7Z*H1B zQ9AH7C+*vj%k$IR?;|K6^U3=&kcr4a=;=FF`i|IqqfoD-*-~@LcSm^y#jJv z->WL%u3FT$piV|cBijE#-%Ofe?CJZ7x%)dVytgVV_Wj31xHehkntNj0B(8x=V22dG zaSWadc48ln0<(8XSMwcm*|6_|<+pL6v+)UMLwmMZ8^@BioDKUfOoDUPMbk0W*`N#? z9$q24M=FNWoBqYd$Z)yVb@ycw^8eC)HxgVp$+X-Vr{4_+qI{O zu%Ft2bCe6?nw$-)9CIxhunRtO!Gpm|!476m7|Y8j7pLQI*YzdB^?(`=Do(ligw_4J z94r7o4R!;s0Q-QS0ma?Vf*oLh{dSn*8HtGVh2cH5Yo8Kkyh)H2`-NOdc*S#-v17mC z-NEc_)4hcayZ$4;jW0MGUvxIEF{r(6ayAALiG2p1Fweu44)x=U6glpCXJaAQnPb%r z2ZA?nd?@%|p!S>j5_mL7{gH+5MsFl|BgZqqFN0O!SHMPaF-TsSZ?9bkevM<*IY@Rn zxCHzzcoWDxnE9soTJXO)ehOR)J_AxeWjBJ~1YZEZ1$HpscWes$_vtLZkKkVX|KYd7 ziR-!VqD?0r`#dudJ{OIak#Ca*W#6sfz983=?GD}s9uD3P4hHW4JFxST>L%MR^a7`~ zxWD#UPr^L+AxMidau?wh&)uLnz0%kdPkLg*?&ZV%aC7B}pp4&gs%I9MUwi}D*|-<% z#X0i4#W(iu<5=yUZ(Hu?_*9Npfx6ERfYj^en{OS+U%S^+UzhhM87!m)^YyMzm*Thc zjtMgd$su9Qw+i*se3M<*_9*tnGs=J|Z>vG^>v2$d_yl-7_&u-;Tmzm9J_&XRl%LuM z=nzEw(|%CeXGwce4G!~Y1p0QqCqIuUcP5`Hci6Pwcke)J7v<4(&fBqXu1<=Ui61)~ zKLLFkegI);M@`vS52|jWOcO^Fw$E{S*s|f7)^N95gh{K3KF;9)L!J@PuT9qCF%G6<$>?YXF4NEtE(xdK^?tVGr#FC*KK&Q$!x$ONPsQA4liou z*Ds$xuU2Gg>Sr~h*O+d~(7pum-a+x+LA%@DK?hQHTNG`|shJh$G&ju5l$;+a1LY0%&6!kvhAyqEM|P@rX}YO7 z=1(N=&L1@~m6=Vx9jW>^f4)u5G^rBS{)okeljk>Q(sd;l)YMluT-IEouc(=PKRD-C zQIncg-_V??slrF~wF{${FXQVo>84bbcB9!PPj-7Qy$uHzAhu6t zzX#7D{nOmoVglVj^^qrn>ZYCr(xo(G9CZuN=D4dnE(9lWd?0uZsPP-)i>&sPEnq&P zYjCyer*{i6I(IVPRQ+fs%~y6B1ar1{=T5DvDnx>4jbC%w5#dQ zD=)Sw5bjzHDsVlJjbzqlWf%(GkU_`=0gdd}Qb zt=(Tk;ijN3UGE>)xpAFaQ&lp)ekN_R*=S;yeYG}U=lcCQ1|$p(#1K!BaBSe$6|8k* z1BU;hqYg=4=DEd#pmC|@+2xVF(6s;I8p0`z*NZt8b8K(onBU)HV1#2)s`xRuUk6&O z$z7b9W$)-?B(I9_OluP4r?JC2_*Fz0>3f}+V=>3}CXV@b?3k7uGc;+>CMcXm@ z>&Y8EzbYH-Tmm}cSAV#reLnFpP(j zOFhTzEZDSZ~;X)GgoB65aW1g24HO-9;&CoGIOmx%^787U@;T6{F$J~s$xi@iBoTK;$ z$F}5LX4hDl&px(;dTj9ysP&qKX1(vB;W|w__n3dZ>OY;0_drd( zyl-rrj*WplL&@2&b1R8(US=P3OA)yboDCi_n6+97uz=O9g*=&v+OXrt{OQ<-FnUJO z9#lFy7#pWxweg_KmYw;LmP7q2ZFjE2Z05w`Yyy? z0qe{BJ+*aPBCHdmd3lJl(F4@A9cpa!<`GpdV`CfVblyMD8qV)(BD(@vjNFT?LpCAX zk*?I({gDYsHF6EI3|WQ5uI=Z5p5yuVxdI*FPPSnFex0^fKg{#LS?sZYZo0W)Zc`O& zFzQpY?6=X>zg5upD2P6+^z*Fu^P!td!e4r(OB>ZPd0#Ttj%e(9y1Yy7 z$S;#mc|A+wHCkc_oBB;48#&FKA#=5z2qUCKf%} z^^9=LQ6y~3Jij(-;s6)r7Zggq6y=wD16%#Yd2nk3VWjVMVt&Q^+8gHA(8{5bu#>?Rvuu^_E9?04*WErv=*@$dIIv>PbKQaQTL~4@YRdnkzWnPMum8f( z_=@s|+PQW0XlYKNKU|nXc!l-)F&|<+v?V_H_p8^2Z3cT@)iu^O%ulBy#XX$o_VaKH z-2_~eH;==cr=q->kZR7Hm8wfS)`&CH;mb9IRXDF3b0+3YTjGrGXFV0+Osk?E^2N6^ zYnXeHi}K|O__86&moYU>EeM0YII{@8XbwkVy?)G@m@{pWGe3-Qrgd@meKX(2Y|%$X za8b^D56=85%9+ZVOs#KV&=p_S!j;X0RXDF3^Cjj>TjGmU!q05HCK8ZDyFpL z${M)xyC_#C&2GpvghLp^m96lk8)3y2uN!kE=1N=S%DMQlQir0;~5_6?3a^=Snu0)Hv=Zas?R;|qkaV(z+-S^?jdr_{G zH_WZi*uK{|_%WR@()T(sM`Dh&C64&@o05W+@%$y(nHPo3 z^ApVbD`q^Q~dRPrqDeD7lwQY7Z$^V z_Jmb9uN!kA=0aQIf`4X0-Jg3;tyR@89rc;uM5xo$a9NAyK|1Zw`Dv(Q*0^M*rJ9;j z^R?q_ZZ9m)yXk{Ci96bY`AhiZ=REJm@MXkN^L;$yE6`9I)EUlAC9J}E-I#YV@7faY z{PX>vg?tHuJjFfSKYc@}w{u?k{Sg)(YY7#d8z7$K?VeX-)0xrrbL;pLW2T|Wa;h3W zT|+p9@p>_*VotRsPWiTswZdUL)vBn6;~>8ldCgGE75A9N9Kf~YgPtqpwGH)Y%aKL! zV>SBH_5LwOVve*WjvP!sO@;iq2uG@F>v;#v_VJ#NoOeY(LHTp3?qlQ}=t)QpeDHe2Dy7Q#s1>%=^XdD516;^)^q2YQUKh5sq@;Klx?ok>pP zoJX8)2mHbz%<09B4}%@NLBlVOz2Dal4-n8+W?pMs(axTa(nc zb`4L?O1GSJLtT971y?Evt8iX7=1a_%w#b*ChkW6=N~_}T+ZE53D@IwqXx*20@GUtk z!WSN0j%jMB8#TA4wpyE~i7yl2$~?j>@Msv}6vpetT#C8W7P<7R zmR!k9YsICPTl(*kOAF54kxOtj`Faa3RitavnXp|N0gtkT6PLVR%%zx1ZIMf_wB*VT zT>5oO|6Ouv!?`Bk+!PFL}A=(z)rnhD+0a9jAGnKx3wjaOp+DDxBAi`4sc1E%C|E zN&Ed|+JC|_V4!(mV}H}fOJ3`_z{GU332U8=>r$lK`6L+oD8iEs~Sg|9{A(8;R$_$#RMe}3yR~h&L#}h#!&FWpK1b8VZ|M_4$jcx{l%Zcyo<~>|I|#>I;I2?s$MZ9_fyc zb;n16Ck8$bDzR(#N=<}&tajksI7F^9aVifAK!(@mS`Gsb;P^Bwv|TP8{aVTC?zi4D8A zM}8Y8I2$KA8^d>E!|r{MFl!}R-s6Z z1PeI+1gLWPNpL(k6%=PL0y_n(Suj5d`!$HlPhaBc9)1(TzGIaL-_wd-?{vb8Cn->M z!wh5Zd~BTE!iIgPB!9lAosF5G@_kllV?by_*Jan-C(QbL4qJTp;$mmx5>VG$3w8tR zz#d>d*op5l6b6$?o39UZ*J#%y=l>4$9Kz}vn~aShXf}8@b_Ry&Q=M+tYbL_Ap3yq} zQfK2b@DOz8frG*MU^#d>cp>;{umQXRyc+xr*ooG!AUGX41yMbCd?>!osUU%Ntz5#a znnCwO2S7hta8O0YL)t^$t*KM!g?V*z*(cr~ax`wQUp;1|I=z-z!qz-z%5!0SNT z%HVpCdOcVOQjY~Ufbb~zFYrw8OCV)2SOjvPgBwBeG59k0Iq)kWVS>frH^8rgE5NUT z4}xC@*MdvHPC*gZ{Y7LLauqTZS%4geT!E;rZ;jV+PWh!UrAP^)aDx$r)3NG1-Amg( ziYIm*RsQn&-=u{k1xrDd*PBh+#P119z9RakmM}_g_HOYihfTzn z^C6>m5pfhF6)w(8cZk!@Z|9HmQEVvA$BZrB;{l^_KF+b?d;-*Ue$VKA_;uQO!2EH3 z9~+AE2gX(qP>x%~`4q>B^M|0~{E^Yy^>wOT*}0PZW#T8;P@GSLDiiCCO_hnF@cvNu zyYXehj5SdU)VGi@k8GPfJN25td=3#uRcI!IqM zcmv#zwEqt50sbC565I^ZKMCFhJMl%NLVDPR!NrKaS2P&Z{VhWVA*u%|k)z!C@$S4o zSI@EPi6Q2EVW4A$(RYg!UVQ}h0lTZ8Zod2Tt_C!?O~`UO*bgHckk^s-kghaP{gDYs zHF6EI3|Wi3jJ$_*qZ2U0-~W-W_mAg<;yIzVG$-WeNd1}+eXm3=TK=iulRx$4e^!fc zI|P~=ZO@>im~aZ?^lAUPOxd4(ryZYmkm(NEo_T;mP5iCu%Pu2E-G6XKO0q6vpet zJc)VImUz;-z0miS<)ZDyYw+MW&jYm=;YUtvdr=Js77$Khyk5+Mm_PHSkq zdmSEBc^;^}FdzA`ZN*{=zvjTD?{#7h#2jc#9O&uhqW%~Y{`$dE5CyS_jwMeT`?cTvhB(i%Kvb}NZ;$k9Eds4mN?+smA4{oge&5vT`B6t zngPnV+Ld3lYFD;K!tAVFDbwOxT(n(b9a?gW=akx&2&c-3YXo7W?{#8M#hhwOoNC>! z=({6w(RO7s97wR>D|{YeJ|1V=l?uwgzV{=2uM=}1=0IEGfNxj+5@{n`5jXA1Jj%Gf zOQm+DpW}faudr6oJa-pocGj*e=`Y`w?aG^Q>J-l@GhWfRM=ht85Z7YDs9o_oF{ffq zwIxpZcEztZS#yk`0DQ_h)~X~Yc@B(kHY4`4=GN9qL-WB);lOIbDU8>Pc@XoUE%CrV zH~DL%oro6o);w8PV)=2n1@o6@^vRi?CzE-{yCzecc0>_R*20msgi{!=7xN_MNn7Gc zYaVRny==K?d$9!`Ebu%S-)u(W(e`3J9N0oQh4FeZ4`Lp)B_8`+6G6q5l-!e*Nb@)^Q0~Dq%{wUhTGB~Z7==|4<7bB zpwp!hcC@{C4-WJqoWgj$mmcB!;xabDU8>Pc@p!aE%C(jfcaXp508D{H4(1k)jPC$|6T5{ywj~`9ox*i-Ry}3 z_T>2Q=2&}W9EOyK@4PFVeQz*lk5>xAeOumj_WtSYya(F-bS7daxA%*Erz#P?lNGh` zzO(T!P_IOP5ZX|BayIPyDEZUTzMZ|U4xp|l3EFg=(ZYsZtDgv;gGSS_ud~q+?1qg_ zp$+XFl1qnO=bS$s2RIvDK&7K=XyeQlHtZVE{OMprFLRF$1eK11LK}Mj-lk(7=j|H0 zMEE?bBj?NnBiO^)I23HhaZgZrtNkg8!NWLaDn951s(aBJJPAA;wE5PJJUWx-V%n$T zM1FrB>=DMVa$(mS<-dj_u%mKT1nL_4gm!cL`RE$#dX4`XF3}bK&4}%v7vn> zTBgH}`|_t_lCyCRsC1lbZ0wj0+h@+7j`N(2^FgKK0%K#xblCnx{&al8+4v-=bWAli za_QK{Iq})=g|UR+jTD>($WmlAvJu&abf%)|kCY)(kqoj3S%IuYUPiVdomnSUjEq1k zky>N{vJ_c`tVgt#@I9nQFY0(?0#c1+ktN6~WIeJO2}pP^CH_C?)OPv(AIemqaPIY9 z^Sc98ePf^e`#+38U%KA^@SwP`@5oFhU0< zsV=1q{SduOx+!HcUVByUG|ux!O-yBGlm1=kOlC(;3X#1(?*3g+Q(xV1S#!x4Qe*Nx za?dMjQnTtCnlm+3_^7v1r>Zi*9jJsl*A@Q%!}Gt~ zd{lVaH2($dY15ehU=Iv*r|?JNyzWQE*|;u<>w;V*Te92M1^wK63%wJ$H9dLgLLFxJ z3qCy5+wuFW(h;YQXsOd;uY2jxHU~vJ)fr;q(v~)TcB(Vf@V5+|N+LWKypQ!tqQC4L z48sP&D4ObY)5LUhb7~gN4q@%y$bBO^X$Bp>UKINM$2VwmKU{R~h{aFIPJLb9qN1j` zv7tHLqH;lB^~-e9ww~|`>-FRMWvA_B+}GHlb5=6GzK!=a#7FU`IOLkEH)h$MY4jUs zzCYh}e}!n-pXW8%d$-sm}4==YO3JQUe=%Y{Hf)+hMXau z{i*%vlck+S&D>xLcgYWqa&4T zq71v3KTVGG+!~wCj7v4oE^nw-SJQB;5q@nToWgj$m}4==_9l+`XZHOf9E(!LkG=f6 zzS^T%j%|cO$EoCm2+zz%)$!F>>qYogih}gLPRy~GV|x?Fd^>h@OO6?uwC2~69+puQf=_b1 zKlpvHGx!6rE4UWa#OqU_z9mx_jAcHy9qU6*HF#)nuEE}<{LtVC&L7IZ3&6vWGNcE` zN4qfdBD%Hs^}_Eo=hq9{-T7Ax9>O#JL(O-U#*tP#$C`VtuDNJE-;!HLx=3E|V^G86 zpMZKq^|VRvCD`g~#IK`KI6I$||GC)DoV^X8o_RfM?DXb|STE9)TN7l*)VTt)54xp@ z+zZae&%v%7{{o!L9WM;}hu5Wa*fB%?@7}!VY`g^Shwd+pjXSWRZ)@1Rkqz4?%Kwd% zmz@pnzsZ|lg9WS@Yn={T@8?g)Z=8)ypwjUwI5)Tz8}^%d+c>9u^3Mr}^LsisU;(le zS%bWYY(d&Xh+fDrWD+tP5lNOH_abs1;CgmC_Ag~j{B7#M-rRKjbbo8O>B5spgzyF? zK7@b5uJASzA)JE9%>xG=pU3w)gny%u2rqK`U<~F4>6mp>_B`{BI-cLd;ycdn zD+~s8{zlRze1J6*!tO5oNiKZ}m%c|_`g(I+($m8c;i)d%Ei||~9^KjEwJyDN&i@<= zl>D!C{#Ux|xYninP#4cL?mX*TjQ&l%EWYE?|AtHNO-}Et?)vU={)3(WGY;Qy@pp39 zlXCexz@_gcmmgQV^Cyu;rSk=MpDuLQ^}e(7j7$GZPXBm^a}KrP-go)*ti#(J-s0j* zxcq&?*?q)e!d=fCm#;UG2&JRW;X4k8xO{oxKL?(Q!BLYKboE*(dCJ!kI*I$cW7EAD<>>*62a(tC?5Pw%*R?s4J2>(Y0TyFWL( zeEf@xkMEKhyU+M?;`0Amhx6Ti9PG=5v){qlzu8?!+SxnRrT1}{zIWVxf7ONijLRpU zBbs;gI&J<*rhY&u4BB5 z?^%9WF=-F-aI-RF_+_`5EhS2{e$VIPODI()%}d)%e}CKvwzmmd?|@f)r@9_5bf zT>9p?`_;#Vf5xZJUFQQXJ;%Fzxxrn>)$Y0q9HyP!S6#kc+bi3&i`hYu4i1l@3{1IaQXbEJO5*sj_yvsx66k&-0=gh+@9*v*W2BnKRLYtF8;Jj z-;FN433r_n-T9+jzFp|zecYvgq6`13OaDx#o#U_D-LF?%Iv#iF=-_yr_V>r#hc{iiI=SoZ?d;UK^quO?zwgq0 zr%R9jw#O?jJ$$Fn)H}z!c)sf5xyRYN#qp=m3_=E|Ej~A zUAW%P-qo&rz2MFt@6Ok_bo|(*gKxN*^i6d7ce?xXq`RKEF5FyqzPF2Sv`g;*hgZAw zcA&o5kGyYBpWRr_W3&_MnsZTG#Bb71 zD0A8*PO8?v(r5jX5&Fw&O<`B?;GV zQ5pW(cJfbjw8jJDzsLj+x|S8UE4tG8w`*r?wY!EuCVUou@;HknC7Jxv&vqTlin8Qv zK(64AeNHCM2@?3r$$ls03?l#1EGcl|y?+^ZSVmoVX**X`l)Ne%l(p~JF3TCz+7&q; za}*SFREms4Dv{|(EwTVvge*l?Aghoy$a>^OZzQe*|P3R#c5h`f$$MczZm?4Sr4gj67tkl9EE$s!ApCCGB*USu`04%vik zN4ipkdLhG*GGqcW1*t|Fkt>kJ$TDOl@-VU%*?_!^Y(};rEI$f*Ao@O6DKY{Xhg2fd zky>OPvH)3xEJaoztB^IwdgMjqb!01|Z!{05UY~?aMP?%zB#SIWmLSWK)yO(TYbrJ& zTafLDSlJcnh4e>;A!Wz}WC~J^G$L0Z*C30LWynh8VPq|`0ojafL$p|;dzw2uIG|A11l1|sfbOw;^nlNxI3GkPX;l<|j_ z=#*616+=3&5i0lCoG(406n9ceYxJys1@%C?VC39P!{pSZX}`!n7tZ>-a8+8jZNrIs z?aYUhD$+Akb8AUL7?<^PVXApA$%Rqbv|-L_Xv)lH!FDxk;Ogy~emDE>(`$8|jdU(v zUB^Bq-W}6w{al!txogz<156m6!1*=Nk@Q-B8*T`39q7`#n7lcFywu_=pDugO=@N(6 zm5q+AbnQ8-JM)CxH59AvHR%~yooZykTO=*k&xJWLcMYh-ZZFP(B8ac@l+XFOK{YiU z(W4t-B%kgcdQO+VN4tg8x3+iyyr1j*s zexFJk>f@`cOR1*zZ(oIRS{)abHpPd1k-oPJTboWbjY_jFG0huJwUP8%9T#>+F6^Lg zVS0BO*6O&hkv3^6W6qAj`1+d6j`gbbb787;`J;COZJ7M|WBpw?+6I4(8yN5Ua68K% ztK-5(+KQl$!rBb+_s^a)x)fY&pZ9&a{5zB^6T64PJdWV|6$UWFFp3W(?33^uRV)81{LYrbj$SH z^G=_()aTD?%DV1DGw&ouuh*V;`n027f5C|S>9OaXJ~pH6`o4ME^?d`QTRJmxuiDeD z?`zuia~m#;ly!UF>60J64^;%Gt^P>&cAe5``)k(Eh2efh)6*qSdb+su42_h9?X(45 z0{6m3Bt7=LwLKKuzD#!`JzWfcc)_sd@^pDaU1LLiTHVVqT~^11rCj)H(b%F(pjY^Y zOqHZ*3X7HAyPN3ppNMhoI7TG#kuKJb-HO9FYcwPW`}WEe;1Cr$@f`TP`|VY zSCMWR&iK1Z21}U4L(1g&SShSlci^oo*gQznpg|&q`fd zGb=^kR|A9bynwrdJsZy2I}slEvaqh7O9yYOR=ZF>?bgqQp{)9}Zyw;nRHReU)cbJO z--V;h`nWm|R=5kAYBK4{h6xQV?u+$vVIpOxXd3>bS6xa-;E6SHq>DJ8;SR*)YQ+WppL&eAiuY$@;r+#O3pS zCFATC;aYLY`nzzH!7v=p4O)b2#ifV` zvtdr+-um&Tz6sPdsG5CA<=m$Fv+E~}u9#LnJ6&~2x;ms($SJGqY)~#s95=QxUu8MoRHb?7J>*vBm#?EV~!)=&z)3qkSdauLQ-`3BCq0R5-?%`(Y=k^gU zR&c$SrmNMXViF-&uUb79KGFwxk9xd)P+m)07{+DKIo(LVxs-lk`(X0yhPk!XK3~)B z@_ah2jtfis8Tis5D_UX1dF05&f>{y|3pu(!(eSWHmyXf`pd8bbzd><@Bot;nLo_G3i-|Me| z(^kK{mc}8pZ_iu(8R+|})@|Frtl7cFZdjL+)0u%yxRU2RCGU}CDKK9_g)oYgIj)FTzt4V_xmBleur#jdZT zHDBH-IJ@4y-z@v;pXK7P{w`drwyq$2BP6GBB3p-=8|GAhP<<>)Z2AKQac@yfFKB?YI#_gbP;3g^lp2 zxKLs9zv%4awK^^=Jo5K)Nw@#6y)%K1sygHNix8@qQrtk0(g0Bw$udcpBoa#|nM7rm zMNlJc5v{Y+Tejjc11pBZ|*(Ad@9-PzDM zqpq!PX~KM<4x??$JbB(9LEBa_`P$v-ZR1)qHsrZ2C;8nYL(c^y*=Wt!c=BE1Ka%vM znomB`)P(|1|15R!NR=iTJ#?$dO`B(0({U7#7F$m@Q5UpLq@#m-R^ybo zc8j=ib&;~^(Ympt z{@6Mod6wy`1KLlAt>>KFu;f=#SmkHJay~ZfIP%FKR{NQ-o;o~^`@zhF`+_r~OyP95 zdioe0#@JGaZM~G=X|%1~?A=<%^H_&5wz0VFHQe`UTX*AM*VyKp4r6RR_lDb!wzg{Z z`y@N98@r}>{n^94p^j6nf}CWhb#2$cb;8!W5yPyVS`9PFPV2^w>x1o!PG^j!&A}qvi(VHqS(>zSGRRDmXfien-^L$Hk6gE z!`I}CP2#^$YOhkMM-6!#nqcvmWxu)znJ<&!MRI+tjYsSWNO(~!5 z+UQ9;>Xo(8nz5nJv-M`(tVA1cJX$k0p6mJJbHrv&V{7}WMqjqO@#!$e*3%d6oG-Ta z-b~$$n>(}kx#}>+mNsSUtMuCgQuO5m%(XA(X-EC(w+Hz8T+H3`)4GYn)9+2BUmu{Z z%Qj`w`r>w4H+Hlon~%lx@j5=+PseSvrfnK&Q`V-IzFo(aY@;<}(WmQp+&j2{h9md#_XSSbF>$>>PQTv&& zp6ivYVUd+$e5UT~~J4#;o(Jx7FiCR6I0vu=zt_Wm4Z|$?Yxft*z>V z|Mu_K-{e^G&Hk-@N2q7O|!h?PM(95xSpE)Qb1fY*0@jlgd@?a%9?16vOG{6$Ear^CFnemIBqD9ub7ya zo_HMY@}|+~q)>H9Nu?YBmp(nioE@j?aPkbF#C7-!Df7;K@X1a-mW9izio#)9l6L9i z8R;B;jt;k%K0x9b9D6oZzWL+Hvv(F<60y1ka-xxNS#`9M4i%R^-cL9aC#zuUxlM_; z;-X{ZLpe`g2FEM6$kBpGX=!08mrUi-$2r8QATP!31&Qq4i=X@7((2y)RZhP57SK5U!t|}-v;@D^K1J#5SI$&{MtY~ zg0$n%Ot+JC%#msA#;4JW(M)qmI_5OAlLF53d^A(-lk9rZXcwYA8F0+G+$%B6QI24) zlWe>c&6a~-TaQ*@Li@Fc(B=kcBdOOxX~;nf%9qJ#vjdK~9?e{q`Ryt0Bn|hYJ!-uC z+Vz~sm;h}vnynLlyZh2;+tX;zq|shZqrII*lXpD0?N!cyo>~0PA@{%H{Mu+VrZbfD zYaz6m0ouiAV*|8X(1On8E;M}~o_sEkpxJunKbNP`t_X;4F&)-@roH>^ayVenxfG)X zmF*O?pnRE$HZ9;>ZcL-?N~7g-B01YkFO1l$8A#D ztxt2zjcD>-r8xgFx6^3loy=6)%|s^eL#NWt9Od4^CfrZTp=7@aTMqV9jv?9_G;>?+ zUJIO+sEdMUz0U^te^d~c1@o6=<;1BY3T9T`L)YD@%goD)7Wi9Gs7C@ zM&nN6+k$4(?$;hhvw7y%oDZhZ$hkRHpYS5ZP~c9ojJgcDJFK=#uR2Mym?2+mB}R+8^IYE{qkDP@G>| zG?{luwUng2jy5qs8^UkE^8>UNw95muJ!t0yXj2)+W(R1?(QFynx-UT`SsT#gJ#TS- ztvnJRBlxu*v@^6>lHFD`TSk7n$IxsU`L$QjY#I5r36;UeJQZztz_~0)qn(dNF)8OA z$7kTP$rGPfJB-;28Ba^@+4<>v2rKW-iL-w4IauX_tnAj0u|y_gxR21k52TOD;yJHD z3p1&oo#infJ*te(P68v@$w|x3x{aCeTKn8jjRGm^AZExUl3-+kW=C!PB zJ2_q(iM2MjHFvF4&tcR?8@pOows+J0*3seByTT z>}AcdrHw0VXROIK(?+%S$ax%#*9jUs^H$Y6p^{jrxM@;DZe3APNp5jjNog)Kx}n@j zMa575vRAz#%DTdyarus5oVr*3PebhUTrg`*!c!EnSo8p7>^*bVk}8r8+46-Ku?`AMza7kQd50s`yG-TE@Bbz0Ffs z-~M3a+FP4%+Of2J?i>BN*P7nk)*?HAIQeaLtvsfh-__ZWzf8SXSHGgYp+$Q%vCm*v ze#0rXv4o3Am)YF0wl3i!5;GT(I(-poa4#Ya?Q#+6Y-)~;udQ=8l3d(jE+VaKvODy4 zlC?aq-`HBeVofurCT(1uR`X>dVktru5imSxpDX^odMG-h+{RFXmH**lW?{2(NLAF2j}G{4K{nkApEorl$F1 zib$5#@(vyG>Rl&eex}zP`OSx6w=>lI_*g|MvN-95_#F)62)B)t%6ee3237@=d9rR) ze+Gi3MDqS={Ql3xNjZbDC^=Kg&23PK833Qh`9=69s< zq`;(bqyVMRr0|D zPyiv|kvuhbSIp-m2tx@-`7j-!=Hq2-%8+0ELj6fTr$7Znpc1Me3e`{pWWQR6j^a@B zHPiT<4l`gT%!1i)CdfRj{N6YZWG>)|T+JbVGJhHKzj_#%7>Ho$f8Ww;)0fE(c}@Kx9dUxTm1H{d4tCVUIN z4L8Gg;1;+QZiCz54)`u?g73li;RkRh{1AQwKZc*cPvI{38T=f60h?h9+zr2kU%@@F z6@CrBfqP*a+z0o=Z{Y#>9XtpR!Nc%-_yarw+u>38BRmF=!xQi%{0W|dr{T}=4D5hs z;W>C7cEStrBD@5<;4knpyaKPnYw$X}0dK-z;Vsw=d*E$&2mS_o;qUMd_$Ryz|AP16 z-|#;C2ll~!ke*u}WRw*g<(Y^6kO>1o*4~%(6pw&`AZzc-y8AL;GYCEgvi`oTy)X08 z@)X*!a2yPQp&-vM4uj!v0*nAzr+Fl>SF2j5aTK4UVGQKJiEt8(g>f(*&m=9;c0$2!r?!%P>EtKgBXoa@E^8IiXZeMEpa-c5<`f{Kz2l{d# HAP4>nN_zws literal 0 HcmV?d00001 diff --git a/Chapter05(RFID)/Attendance_Phidget/obj/Debug/Attendance.vbproj.GenerateResource.Cache b/Chapter05(RFID)/Attendance_Phidget/obj/Debug/Attendance.vbproj.GenerateResource.Cache new file mode 100644 index 0000000000000000000000000000000000000000..121728d4cd054ad88dba4e21d018a9ffb602dc62 GIT binary patch literal 900 zcma)4PiqrV5Z^V~ZL&!*Ig}!L2;xC#SdxaKmr!U*wAf&^rBo2)W#24)=4D@bvn$=6 zJoeN>>A|bt!f&8=zlLAHlg_MKBwfT=n0@cf%x`}4$8jCU`9Z>emgX%|M-vrUgC3!;#UN(o-`qd@Arb6;lmGf-1#SS^d*>i5!Am zBji|c5lg>2TN|1AiLhW>3_3Cr_N;lQB-k21?5i`VQghKi6gmTRoJz&LVnmtSxm8$0iZG?Y`nMvr$Ud50*zrCz+I0h-K4 zfWORjG6(FwUff#@#yItWRgt7gCy%fF@(JEti8XpE)`2_R(AV35tJl-cc{|o(Qi+(u z-Gz58Fr65wVg+(#!3L)aQ}k)-%Wg5tWoF7{f4chkeemkbx$83TqJZ0M;}$q8&%b&X gpUKAM6t*_oxc(2#%lB_MuFX&^ZH{AUvlC0>CmD74^Z)<= literal 0 HcmV?d00001 diff --git a/Chapter05(RFID)/Attendance_Phidget/obj/Debug/Attendance.xml b/Chapter05(RFID)/Attendance_Phidget/obj/Debug/Attendance.xml new file mode 100644 index 0000000..afe0f32 --- /dev/null +++ b/Chapter05(RFID)/Attendance_Phidget/obj/Debug/Attendance.xml @@ -0,0 +1,11 @@ + + + + +Attendance + + + + + + \ No newline at end of file diff --git a/Chapter05(RFID)/Attendance_Phidget/obj/Debug/ResolveAssemblyReference.cache b/Chapter05(RFID)/Attendance_Phidget/obj/Debug/ResolveAssemblyReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..dc75300a7aae32edebe74bc81b4acd7c88fdc648 GIT binary patch literal 3141 zcmeHJ-A@}w5Wlm}=extffE0zaRpm5!hy*%A2m+y?Dp)~9EfI+kid3r8+P7!6tZ&io z8pU}@9^1bt|3dzTen|a#YUy(y+nMETY_JlbZ-})$H*>c;pTC*2Wm}f@FD$&`D&>H@ z*kny9lt^^A)?qvjw~5+Uvy~kx6%*;|gK!Q%vz1zh>yD(WDeY)U_-tjX)8MT6CGBpD zeVVQ|<`$C0WGR`Sj~D020x6)GJ0rD+^{&#iUDrfY+~p^XQzPX+Ierw@1n0D=!2=b3 zLDZfm4NlQtKM%w~^4_gQ*bsarNW4y(TF7D+j#m@y10t!MK&3Si(=90uSxlveH|p#a zbs!?;?hxLg%Cho#t56v8M%miv>AE+<=Z!P^kDe`mj==`O7*O9qQUEf696oSeAj@I6 zd+G}wwj^m+)*(r1cWaNuEviqLr%$%SnDYtLWs-@Z7m&<+F!?j6(0nrifX> zXj~#n(RPD(pOQ8$#q@xtF-@C{s*-9Ft*JErSdQb~m_2Q%z6Uvu!^Z3~jOF-6o1%W!8bj|#EyC&^$Uc^XD?NGII;Yj=&aLgYEGKuNH<)D8bhy%SZL|EP+ z>i2T_gf(qlin6}nNE6{l*fDEFQ7_6GYCJ-qKjtkVncizp4~y$U)A(X#Vq6>~XnJS$P=#bUn$(}cA;lHlOz z6%8QUW4lAnUhdT0v*tG_{si244L^4h$UKhJ zm1?zGTd58WkZSKtpUDP@KLy8}zv2CGxxC=)DIVh3j3Uc(-TFBi z%&-NNoIgS5dGa-U6f+gr*fnO5+%h8ej}fO)EaM(rIS2D{3U4?q-Ds11DN%n zPXj_={|HhaGCzROhfEo9hx07=_SNpr?T5d7ZzKM2n3=y)aP6%!+8f@Ac1LX;`wywj B0(bxb literal 0 HcmV?d00001 diff --git a/Chapter05(RFID)/Attendance_Phidget/obj/Debug/TempPE/My Project.Resources.Designer.vb.dll b/Chapter05(RFID)/Attendance_Phidget/obj/Debug/TempPE/My Project.Resources.Designer.vb.dll new file mode 100644 index 0000000000000000000000000000000000000000..2840e96833cef9fa6f12dd8a9bff374e232eb8ef GIT binary patch literal 8192 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 literal 0 HcmV?d00001 diff --git a/Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS.sln b/Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS.sln new file mode 100644 index 0000000..b7ce8fc --- /dev/null +++ b/Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Attendance_CS", "Attendance_CS\Attendance_CS.csproj", "{4DC5DE6C-DF8B-449A-9726-9E661436EF86}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {4DC5DE6C-DF8B-449A-9726-9E661436EF86}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4DC5DE6C-DF8B-449A-9726-9E661436EF86}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4DC5DE6C-DF8B-449A-9726-9E661436EF86}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4DC5DE6C-DF8B-449A-9726-9E661436EF86}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS.suo b/Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS.suo new file mode 100644 index 0000000000000000000000000000000000000000..d29185c59f2e267463dd230944e1254e0f2192a4 GIT binary patch literal 23040 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 literal 0 HcmV?d00001 diff --git a/Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/Attendance_CS.csproj b/Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/Attendance_CS.csproj new file mode 100644 index 0000000..511178d --- /dev/null +++ b/Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/Attendance_CS.csproj @@ -0,0 +1,79 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {4DC5DE6C-DF8B-449A-9726-9E661436EF86} + WinExe + Properties + Attendance_CS + Attendance_CS + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + Form + + + Form1.cs + + + + + Designer + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + \ No newline at end of file diff --git a/Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/Attendance_CS.csproj.user b/Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/Attendance_CS.csproj.user new file mode 100644 index 0000000..6a34e7d --- /dev/null +++ b/Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/Attendance_CS.csproj.user @@ -0,0 +1,5 @@ + + + ShowAllFiles + + \ No newline at end of file diff --git a/Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/Form1.Designer.cs b/Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/Form1.Designer.cs new file mode 100644 index 0000000..2d6fb25 --- /dev/null +++ b/Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/Form1.Designer.cs @@ -0,0 +1,124 @@ +namespace Attendance_CS +{ + partial class Form1 + { + ///

+ /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.chkEnableReader = new System.Windows.Forms.CheckBox(); + this.chkTurnOnLED = new System.Windows.Forms.CheckBox(); + this.txtTagID = new System.Windows.Forms.TextBox(); + this.ToolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel(); + this.Label1 = new System.Windows.Forms.Label(); + this.StatusStrip1 = new System.Windows.Forms.StatusStrip(); + this.StatusStrip1.SuspendLayout(); + this.SuspendLayout(); + // + // chkEnableReader + // + this.chkEnableReader.AutoSize = true; + this.chkEnableReader.Location = new System.Drawing.Point(106, 32); + this.chkEnableReader.Name = "chkEnableReader"; + this.chkEnableReader.Size = new System.Drawing.Size(97, 17); + this.chkEnableReader.TabIndex = 9; + this.chkEnableReader.Text = "Enable Reader"; + this.chkEnableReader.UseVisualStyleBackColor = true; + this.chkEnableReader.CheckedChanged += new System.EventHandler(this.chkEnableReader_CheckedChanged); + // + // chkTurnOnLED + // + this.chkTurnOnLED.AutoSize = true; + this.chkTurnOnLED.Location = new System.Drawing.Point(15, 32); + this.chkTurnOnLED.Name = "chkTurnOnLED"; + this.chkTurnOnLED.Size = new System.Drawing.Size(87, 17); + this.chkTurnOnLED.TabIndex = 8; + this.chkTurnOnLED.Text = "Turn on LED"; + this.chkTurnOnLED.UseVisualStyleBackColor = true; + this.chkTurnOnLED.CheckedChanged += new System.EventHandler(this.chkTurnOnLED_CheckedChanged); + // + // txtTagID + // + this.txtTagID.Location = new System.Drawing.Point(57, 6); + this.txtTagID.Name = "txtTagID"; + this.txtTagID.Size = new System.Drawing.Size(146, 20); + this.txtTagID.TabIndex = 7; + // + // ToolStripStatusLabel1 + // + this.ToolStripStatusLabel1.Name = "ToolStripStatusLabel1"; + this.ToolStripStatusLabel1.Size = new System.Drawing.Size(111, 17); + this.ToolStripStatusLabel1.Text = "ToolStripStatusLabel1"; + // + // Label1 + // + this.Label1.AutoSize = true; + this.Label1.Location = new System.Drawing.Point(12, 9); + this.Label1.Name = "Label1"; + this.Label1.Size = new System.Drawing.Size(40, 13); + this.Label1.TabIndex = 6; + this.Label1.Text = "Tag ID"; + // + // StatusStrip1 + // + this.StatusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.ToolStripStatusLabel1}); + this.StatusStrip1.Location = new System.Drawing.Point(0, 72); + this.StatusStrip1.Name = "StatusStrip1"; + this.StatusStrip1.Size = new System.Drawing.Size(219, 22); + this.StatusStrip1.TabIndex = 5; + this.StatusStrip1.Text = "StatusStrip1"; + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(219, 94); + this.Controls.Add(this.chkEnableReader); + this.Controls.Add(this.chkTurnOnLED); + this.Controls.Add(this.txtTagID); + this.Controls.Add(this.Label1); + this.Controls.Add(this.StatusStrip1); + this.Name = "Form1"; + this.Text = "Form1"; + this.Load += new System.EventHandler(this.Form1_Load); + this.StatusStrip1.ResumeLayout(false); + this.StatusStrip1.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + internal System.Windows.Forms.CheckBox chkEnableReader; + internal System.Windows.Forms.CheckBox chkTurnOnLED; + internal System.Windows.Forms.TextBox txtTagID; + internal System.Windows.Forms.ToolStripStatusLabel ToolStripStatusLabel1; + internal System.Windows.Forms.Label Label1; + internal System.Windows.Forms.StatusStrip StatusStrip1; + } +} + diff --git a/Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/Form1.cs b/Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/Form1.cs new file mode 100644 index 0000000..4d64457 --- /dev/null +++ b/Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/Form1.cs @@ -0,0 +1,75 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace Attendance_CS +{ + public partial class Form1 : Form + { + PhidgetsNET.PhidgetRFID RFIDReader; + + public Form1() + { + InitializeComponent(); + } + + private void RFIDReader_Attach(object sender, PhidgetsNET.AttachEventArgs e) + { + ToolStripStatusLabel1.Text = "Phidget RFID Reader Connected"; + chkTurnOnLED.Checked = true; + RFIDReader.SetOutputState(2, true); + chkEnableReader.Checked = true; + RFIDReader.SetOutputState(3, true); + } + + private void RFIDReader_Detach(object sender, PhidgetsNET.DetachEventArgs e) + { + ToolStripStatusLabel1.Text = "Phidget RFID Reader Not Connected"; + } + + private void RFIDReader_Error(object sender, PhidgetsNET.ErrorEventArgs e) + { + //---display the error--- + ToolStripStatusLabel1.Text = e.getError(); + } + + private void RFIDReader_Tag(object sender, PhidgetsNET.TagEventArgs e) + { + Console.WriteLine("tag detected - " + e.getTag()); + txtTagID.BeginInvoke(new myDelegate(updateTextBox), new object[] { e.getTag() }); + } + + public delegate void myDelegate(string str); + public void updateTextBox(string str) + { + txtTagID.Text = str; + } + + private void Form1_Load(object sender, EventArgs e) + { + RFIDReader = new PhidgetsNET.PhidgetRFID(); + + RFIDReader.Attach += new PhidgetsNET.AttachEventHandler(this.RFIDReader_Attach); + RFIDReader.Detach += new PhidgetsNET.DetachEventHandler(this.RFIDReader_Detach); + RFIDReader.Tag += new PhidgetsNET.TagEventHandler(this.RFIDReader_Tag); + RFIDReader.Error += new PhidgetsNET.ErrorEventHandler(this.RFIDReader_Error); + + RFIDReader.OpenRemoteIP("localhost", 5001, -1, "pass"); + ToolStripStatusLabel1.Text = "Not Connected"; + } + + private void chkTurnOnLED_CheckedChanged(object sender, EventArgs e) + { + RFIDReader.SetOutputState(2, chkTurnOnLED.Checked); + } + + private void chkEnableReader_CheckedChanged(object sender, EventArgs e) + { + RFIDReader.SetOutputState(3, chkEnableReader.Checked); + } + } +} \ No newline at end of file diff --git a/Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/Form1.resx b/Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/Form1.resx new file mode 100644 index 0000000..faac01d --- /dev/null +++ b/Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/Form1.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/Program.cs b/Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/Program.cs new file mode 100644 index 0000000..17e1cd8 --- /dev/null +++ b/Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/Program.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace Attendance_CS +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form1()); + } + } +} \ No newline at end of file diff --git a/Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/Properties/AssemblyInfo.cs b/Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..6b77ca2 --- /dev/null +++ b/Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Attendance_CS")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Attendance_CS")] +[assembly: AssemblyCopyright("Copyright © 2006")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("60aee91f-0a12-4a77-b9f1-4c5c2275adfc")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/Properties/Resources.Designer.cs b/Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/Properties/Resources.Designer.cs new file mode 100644 index 0000000..518af26 --- /dev/null +++ b/Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Attendance_CS.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Attendance_CS.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/Properties/Resources.resx b/Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/Properties/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/Properties/Settings.Designer.cs b/Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/Properties/Settings.Designer.cs new file mode 100644 index 0000000..6c076dc --- /dev/null +++ b/Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Attendance_CS.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/Properties/Settings.settings b/Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/bin/Debug/Attendance_CS.exe b/Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/bin/Debug/Attendance_CS.exe new file mode 100644 index 0000000000000000000000000000000000000000..07c064f947468f731dae1215fe66790e0fbea452 GIT binary patch literal 24576 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 vjX- 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 TBcLY!&!}P9UAq3eeA)j4ZC9R* literal 0 HcmV?d00001 diff --git a/Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/bin/Debug/PhidgetsNET.dll b/Chapter05(RFID)/Attendance_Phidget_CS/Attendance_CS/bin/Debug/PhidgetsNET.dll new file mode 100644 index 0000000000000000000000000000000000000000..c6f8b490ed6b3ec5988610314922975645d4d406 GIT binary patch literal 49152 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 vjX- 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 B{^I}u literal 0 HcmV?d00001 diff --git a/Chapter06(ExternalDevices)/PING.bs2 b/Chapter06(ExternalDevices)/PING.bs2 new file mode 100644 index 0000000..5812410 --- /dev/null +++ b/Chapter06(ExternalDevices)/PING.bs2 @@ -0,0 +1,39 @@ +' {$STAMP BS2} +' {$PBASIC 2.5} + +'---duration of the trigger; 1 represents 2 micro-seconds--- +Trigger CON 1 '---CON represents constant--- + +'---variable to measure the pulse--- +rawDist VAR Word '---VAR represents variable--- + +'---the I/O Pin connected to the PING))) sensor--- +Ping PIN 15 '---PIN represents pin on the BS2--- + +DO + '---Set the pin to low first--- + Ping = 0 + + '---trigger the sensor by sending a pulse --- + PULSOUT Ping, Trigger + + '---measure the echo pulse by reading it--- + PULSIN Ping, 1, rawDist + + '---convert pulses to micro-seconds--- + rawDist = rawDist * 2 + + '---get the single-trip timing--- + rawDist = rawDist / 2 + + '---convert the distance to cm--- + rawDist = rawDist /30 + + '---print out the distance in cm--- + 'DEBUG DEC rawDist, CR, LF + SEROUT 16, 16468, [DEC RawDist] + SEROUT 16, 16468, [LF] + + '---delay for 100 milliseconds--- + PAUSE 100 +LOOP diff --git a/Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem.sln b/Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem.sln new file mode 100644 index 0000000..4b5b7ca --- /dev/null +++ b/Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "SecuritySystem", "SecuritySystem\SecuritySystem.vbproj", "{F03022DD-1D92-41B1-B63A-64BB6A380D3B}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {F03022DD-1D92-41B1-B63A-64BB6A380D3B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F03022DD-1D92-41B1-B63A-64BB6A380D3B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F03022DD-1D92-41B1-B63A-64BB6A380D3B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F03022DD-1D92-41B1-B63A-64BB6A380D3B}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem.suo b/Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem.suo new file mode 100644 index 0000000000000000000000000000000000000000..0caf9e7db449f43b833994c8bb509f9eef5975f0 GIT binary patch literal 19456 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 JQ~27R{SSm=o-zOc literal 0 HcmV?d00001 diff --git a/Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/Form1.Designer.vb b/Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/Form1.Designer.vb new file mode 100644 index 0000000..662dadf --- /dev/null +++ b/Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/Form1.Designer.vb @@ -0,0 +1,109 @@ + _ +Partial Class Form1 + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.PictureBox1 = New System.Windows.Forms.PictureBox + Me.btnStartRecording = New System.Windows.Forms.Button + Me.btnTakeSnapshot = New System.Windows.Forms.Button + Me.btnStopRecording = New System.Windows.Forms.Button + Me.ProgressBar1 = New System.Windows.Forms.ProgressBar + Me.lblProximity = New System.Windows.Forms.Label + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'PictureBox1 + ' + Me.PictureBox1.Location = New System.Drawing.Point(12, 41) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(336, 253) + Me.PictureBox1.TabIndex = 2 + Me.PictureBox1.TabStop = False + ' + 'btnStartRecording + ' + Me.btnStartRecording.Location = New System.Drawing.Point(12, 300) + Me.btnStartRecording.Name = "btnStartRecording" + Me.btnStartRecording.Size = New System.Drawing.Size(108, 23) + Me.btnStartRecording.TabIndex = 3 + Me.btnStartRecording.Text = "Start Recording" + Me.btnStartRecording.UseVisualStyleBackColor = True + ' + 'btnTakeSnapshot + ' + Me.btnTakeSnapshot.Location = New System.Drawing.Point(240, 300) + Me.btnTakeSnapshot.Name = "btnTakeSnapshot" + Me.btnTakeSnapshot.Size = New System.Drawing.Size(108, 23) + Me.btnTakeSnapshot.TabIndex = 4 + Me.btnTakeSnapshot.Text = "Take Snapshot" + Me.btnTakeSnapshot.UseVisualStyleBackColor = True + ' + 'btnStopRecording + ' + Me.btnStopRecording.Location = New System.Drawing.Point(126, 300) + Me.btnStopRecording.Name = "btnStopRecording" + Me.btnStopRecording.Size = New System.Drawing.Size(108, 23) + Me.btnStopRecording.TabIndex = 7 + Me.btnStopRecording.Text = "Stop Recording" + Me.btnStopRecording.UseVisualStyleBackColor = True + ' + 'ProgressBar1 + ' + Me.ProgressBar1.Location = New System.Drawing.Point(12, 12) + Me.ProgressBar1.Maximum = 160 + Me.ProgressBar1.Name = "ProgressBar1" + Me.ProgressBar1.Size = New System.Drawing.Size(291, 23) + Me.ProgressBar1.Step = 1 + Me.ProgressBar1.TabIndex = 9 + ' + 'lblProximity + ' + Me.lblProximity.AutoSize = True + Me.lblProximity.Location = New System.Drawing.Point(309, 22) + Me.lblProximity.Name = "lblProximity" + Me.lblProximity.Size = New System.Drawing.Size(39, 13) + Me.lblProximity.TabIndex = 10 + Me.lblProximity.Text = "Label1" + ' + 'Form1 + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(360, 333) + Me.Controls.Add(Me.lblProximity) + Me.Controls.Add(Me.ProgressBar1) + Me.Controls.Add(Me.btnStopRecording) + Me.Controls.Add(Me.btnTakeSnapshot) + Me.Controls.Add(Me.btnStartRecording) + Me.Controls.Add(Me.PictureBox1) + Me.Name = "Form1" + Me.Text = "Security System" + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + Friend WithEvents btnStartRecording As System.Windows.Forms.Button + Friend WithEvents btnTakeSnapshot As System.Windows.Forms.Button + Friend WithEvents btnStopRecording As System.Windows.Forms.Button + Friend WithEvents ProgressBar1 As System.Windows.Forms.ProgressBar + Friend WithEvents lblProximity As System.Windows.Forms.Label + +End Class diff --git a/Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/Form1.resx b/Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/Form1.resx new file mode 100644 index 0000000..19dc0dd --- /dev/null +++ b/Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/Form1.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/Form1.vb b/Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/Form1.vb new file mode 100644 index 0000000..809f013 --- /dev/null +++ b/Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/Form1.vb @@ -0,0 +1,185 @@ +Imports System.Runtime.InteropServices + +Public Class Form1 + Private WithEvents serialPort As New IO.Ports.SerialPort + Private proximity As Integer + + Const WM_CAP_START = &H400S + Const WS_CHILD = &H40000000 + Const WS_VISIBLE = &H10000000 + + Const WM_CAP_DRIVER_CONNECT = WM_CAP_START + 10 + Const WM_CAP_DRIVER_DISCONNECT = WM_CAP_START + 11 + Const WM_CAP_EDIT_COPY = WM_CAP_START + 30 + Const WM_CAP_SEQUENCE = WM_CAP_START + 62 + Const WM_CAP_FILE_SAVEAS = WM_CAP_START + 23 + + Const WM_CAP_SET_SCALE = WM_CAP_START + 53 + Const WM_CAP_SET_PREVIEWRATE = WM_CAP_START + 52 + Const WM_CAP_SET_PREVIEW = WM_CAP_START + 50 + + Const SWP_NOMOVE = &H2S + Const SWP_NOSIZE = 1 + Const SWP_NOZORDER = &H4S + Const HWND_BOTTOM = 1 + + '--The capGetDriverDescription function retrieves the version + ' description of the capture driver-- + Declare Function capGetDriverDescriptionA Lib "avicap32.dll" _ + (ByVal wDriverIndex As Short, _ + ByVal lpszName As String, ByVal cbName As Integer, _ + ByVal lpszVer As String, _ + ByVal cbVer As Integer) As Boolean + + '--The capCreateCaptureWindow function creates a capture window-- + Declare Function capCreateCaptureWindowA Lib "avicap32.dll" _ + (ByVal lpszWindowName As String, ByVal dwStyle As Integer, _ + ByVal x As Integer, ByVal y As Integer, ByVal nWidth As Integer, _ + ByVal nHeight As Short, ByVal hWnd As Integer, _ + ByVal nID As Integer) As Integer + + '--This function sends the specified message to a window or windows-- + Declare Function SendMessage Lib "user32" Alias "SendMessageA" _ + (ByVal hwnd As Integer, ByVal Msg As Integer, _ + ByVal wParam As Integer, _ + ByVal lParam As Object) As Integer + + '--Sets the position of the window relative to the screen buffer-- + Declare Function SetWindowPos Lib "user32" Alias "SetWindowPos" _ + (ByVal hwnd As Integer, _ + ByVal hWndInsertAfter As Integer, ByVal x As Integer, _ + ByVal y As Integer, _ + ByVal cx As Integer, ByVal cy As Integer, _ + ByVal wFlags As Integer) As Integer + + '--This function destroys the specified window-- + Declare Function DestroyWindow Lib "user32" _ + (ByVal hndw As Integer) As Boolean + + '---used as a window handle--- + Private hWnd As Integer + + Private Sub Form1_Load( _ + ByVal sender As System.Object, _ + ByVal e As System.EventArgs) _ + Handles MyBase.Load + + If serialPort.IsOpen Then + serialPort.Close() + End If + Try + With serialPort + .PortName = "COM3" + .BaudRate = 9600 + .Parity = IO.Ports.Parity.None + .DataBits = 8 + .StopBits = IO.Ports.StopBits.One + .Handshake = IO.Ports.Handshake.None + End With + serialPort.Open() + serialPort.DiscardInBuffer() + Catch ex As Exception + MsgBox(ex.ToString) + End Try + + '---preview the selected video source + PreviewVideo(PictureBox1) + End Sub + + '---preview the selected video source--- + Private Sub PreviewVideo(ByVal pbCtrl As PictureBox) + hWnd = capCreateCaptureWindowA(0, _ + WS_VISIBLE Or WS_CHILD, 0, 0, 0, _ + 0, pbCtrl.Handle.ToInt32, 0) + If SendMessage( _ + hWnd, WM_CAP_DRIVER_CONNECT, _ + 0, 0) Then + '---set the preview scale--- + SendMessage(hWnd, WM_CAP_SET_SCALE, True, 0) + '---set the preview rate (ms)--- + SendMessage(hWnd, WM_CAP_SET_PREVIEWRATE, 30, 0) + '---start previewing the image--- + SendMessage(hWnd, WM_CAP_SET_PREVIEW, True, 0) + '---resize window to fit in PictureBox control--- + SetWindowPos(hWnd, HWND_BOTTOM, 0, 0, _ + pbCtrl.Width, pbCtrl.Height, _ + SWP_NOMOVE Or SWP_NOZORDER) + Else + '--error connecting to video source--- + DestroyWindow(hWnd) + End If + End Sub + + Private Sub DataReceived( _ + ByVal sender As Object, _ + ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) _ + Handles serialPort.DataReceived + + Dim str As String = serialPort.ReadLine + If str <> String.Empty Then + proximity = CInt(str) + ProgressBar1.BeginInvoke(New _ + myDelegate(AddressOf updateControl), _ + New Object() {}) + Console.WriteLine(proximity) + End If + End Sub + + Public Delegate Sub myDelegate() + Public Sub updateControl() + Try + If proximity <= 160 Then + ProgressBar1.Value = proximity + lblProximity.Text = proximity & " cm" + End If + Catch ex As Exception + MsgBox(ex.ToString) + End Try + End Sub + + Private Sub btnStartRecording_Click( _ + ByVal sender As System.Object, _ + ByVal e As System.EventArgs) _ + Handles btnStartRecording.Click + btnStartRecording.Enabled = False + btnStopRecording.Enabled = True + Application.DoEvents() + '---start recording--- + SendMessage(hWnd, WM_CAP_SEQUENCE, 0, 0) + + End Sub + + Private Sub btnStopRecording_Click( _ + ByVal sender As System.Object, _ + ByVal e As System.EventArgs) _ + Handles btnStopRecording.Click + btnStartRecording.Enabled = True + btnStopRecording.Enabled = False + Application.DoEvents() + '---save the recording to file--- + SendMessage(hWnd, WM_CAP_FILE_SAVEAS, 0, _ + "C:\" & Now.ToFileTime & ".avi") + End Sub + + Private Sub btnTakeSnapshot_Click( _ + ByVal sender As System.Object, _ + ByVal e As System.EventArgs) _ + Handles btnTakeSnapshot.Click + + Dim data As IDataObject + Dim bmap As Image + + '---copy the image to the clipboard--- + SendMessage(hWnd, WM_CAP_EDIT_COPY, 0, 0) + + '---retrieve the image from clipboard and convert it + ' to the bitmap format + data = Clipboard.GetDataObject() + If data.GetDataPresent(GetType(System.Drawing.Bitmap)) Then + bmap = _ + CType(data.GetData(GetType(System.Drawing.Bitmap)), _ + Image) + bmap.Save("C:\" & Now.ToFileTime & ".bmp") + End If + End Sub +End Class diff --git a/Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/My Project/Application.Designer.vb b/Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/My Project/Application.Designer.vb new file mode 100644 index 0000000..d09a16c --- /dev/null +++ b/Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/My Project/Application.Designer.vb @@ -0,0 +1,38 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.42 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + 'NOTE: This file is auto-generated; do not modify it directly. To make changes, + ' or if you encounter build errors in this file, go to the Project Designer + ' (go to Project Properties or double-click the My Project node in + ' Solution Explorer), and make changes on the Application tab. + ' + Partial Friend Class MyApplication + + _ + Public Sub New() + MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) + Me.IsSingleInstance = false + Me.EnableVisualStyles = true + Me.SaveMySettingsOnExit = true + Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses + End Sub + + _ + Protected Overrides Sub OnCreateMainForm() + Me.MainForm = Global.SecuritySystem.Form1 + End Sub + End Class +End Namespace diff --git a/Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/My Project/Application.myapp b/Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/My Project/Application.myapp new file mode 100644 index 0000000..1243847 --- /dev/null +++ b/Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/My Project/Application.myapp @@ -0,0 +1,11 @@ + + + true + Form1 + false + 0 + true + 0 + 0 + true + diff --git a/Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/My Project/AssemblyInfo.vb b/Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..44f8448 --- /dev/null +++ b/Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/My Project/Resources.Designer.vb b/Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/My Project/Resources.Designer.vb new file mode 100644 index 0000000..222718f --- /dev/null +++ b/Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.42 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + '

+ ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("SecuritySystem.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/My Project/Resources.resx b/Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/My Project/Settings.Designer.vb b/Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/My Project/Settings.Designer.vb new file mode 100644 index 0000000..f54a954 --- /dev/null +++ b/Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.42 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.SecuritySystem.My.MySettings + Get + Return Global.SecuritySystem.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/My Project/Settings.settings b/Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/SecuritySystem.vbproj b/Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/SecuritySystem.vbproj new file mode 100644 index 0000000..e1637d7 --- /dev/null +++ b/Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/SecuritySystem.vbproj @@ -0,0 +1,106 @@ + + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {F03022DD-1D92-41B1-B63A-64BB6A380D3B} + WinExe + SecuritySystem.My.MyApplication + SecuritySystem + SecuritySystem + WindowsForms + + + true + full + true + true + bin\Debug\ + SecuritySystem.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + SecuritySystem.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + + + + + + + + + + + + + + + Form + + + Form1.vb + Form + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + Designer + Form1.vb + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/SecuritySystem.vbproj.user b/Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/SecuritySystem.vbproj.user new file mode 100644 index 0000000..6a34e7d --- /dev/null +++ b/Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/SecuritySystem.vbproj.user @@ -0,0 +1,5 @@ + + + ShowAllFiles + + \ No newline at end of file diff --git a/Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/bin/Debug/SecuritySystem.exe b/Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/bin/Debug/SecuritySystem.exe new file mode 100644 index 0000000000000000000000000000000000000000..86441aa7ce1527c6b14253c64dec7dcb0f5c321c GIT binary patch literal 36864 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
2+ch*YxOHIb&R!=O>$}EHUbA(3Pw#fx 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 TBcLY!&!}P9UAq3eeA)j4ZC9R* literal 0 HcmV?d00001 diff --git a/Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/bin/Debug/SecuritySystem.xml b/Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/bin/Debug/SecuritySystem.xml new file mode 100644 index 0000000..440d3fe --- /dev/null +++ b/Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/bin/Debug/SecuritySystem.xml @@ -0,0 +1,11 @@ + + + + +SecuritySystem + + + + + + \ No newline at end of file diff --git a/Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/obj/Debug/SecuritySystem.Form1.resources b/Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/obj/Debug/SecuritySystem.Form1.resources new file mode 100644 index 0000000000000000000000000000000000000000..06c24d06c1cab750788146ce052b37770f3fa530 GIT binary patch literal 180 zcmX?i>is@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYis@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYnw$|YArxC1bmgEUAq_0DDDDou3Z$5I#q9^r2hP*v$#R$OBXT_ z!QE$(EiyIGyOmQXQ51^2;5toI!^8qnBR^m56(uTH7XZGcEN^SxJe&uf+ynrgwAHCM zFu9^cds=hJcs@?_4W<-uv&uCqR=noJ4}7 zWVr(Fva5rrs|>9qD;B6&pkjfF1u7P(SfFBoiUlebs92z4frT=XmjSJ9V|USNzaA^JeBhsf7_Gc@EOs~47m zkwb-p&1glifI5iWGQIiTz=`v)-UZN$WSE)*$Zx#|yr8e8x_L8W?-fbr(?zR1#Cz%$ zQiqG7t>L_ehFnEQS#`C)`4$%TH~(kJbF?I}Ks3)j@57mfFZVvMt@pFc+ycuGJr(db z-^zq1=_prPwN1mOT&Kmfa!8I2G}i_#QrAsTrQ}xU&>_JBfHV*F)G3O3s;e2t9>Hc0 zYkx{d0a6v+LaA&4RfbNrv-o&~w0|ePq1ns4qpVNQ`H;5!0L%0S3-$?;KG&*pp3nfi z!Gg6}85C?sXCmpdP=f48FwKt@#iTBe*D;9A5g=(ejN;CG^1WCuIH4(oqFlC9(4ve>{0ad8obLxE0&UH_IV91#Li|Tb2irm z^+!n8-^yAnv<0qq3HsBZdhlWWFzGiTbx})X7M*Y4l=WKVS?Ot5q0Ox~!bbbgQP@#P z8cKJ)H|%X$BZNm;T#d9P$W!kN`&t_8K9t*VGlrGcycE>jGO5CfYRX-VRDm@qeWmQP zt!A(=reV+(!Kbc&%AP*ywr{+#C+`1HGxbX@v>A@8m&kY*fM5CK1_yDc{0Gh8O zZ9Y$MBf^-`X%Q0e*f4p{H^8PBS*uuuCqn1vFzP$T5O!uC<=KL5&iNw92Lv|v$OO`i zc~JGfnm6F$JSTzQyw>Hoeh6Ne9);(qxvl7=8YJZDN5i5c#0wu$`Ho&-r?buuxB`_C5nCJp~!3hW>8)Iby znsyT!U(}5(D+){%mRMtIerFDYx!tkup-$-IOK-*sf_X+?dfpGC`Er*7ZQjVVqnu&N zB$c}YbaoOS=~fdzxT?~ha7e;@gSNB;^y|=bh8i~*e>DoXu4JX$-yM=*KQQQruo7k` z*ei!B1+B%RJlDl(j2RT9(ikwsGzJu>yIBV1a=M4paBZY{(E6-i5Rl%a9!!eRqMAj^ zdEp6yzoo>m@5k7&FjhH(NNUj`jOXafXjAhWnC`c(DzWET{UxNq8c@g*r-*0^vQ8_7 zdG=#vrHHV$D7|RzH2ut&Zw;1I+P~v$TT6tw){sKr5olBNx2WVyWis2Iqm^1F@-vmm zjMunjO15>J%_)-!#WFEBu^o@jR3P*0ZDj?D@Jt0VV}VJXuGvdnS%-TEoH?^RxP?1-Eo1LnK#$kUdp+s%B@d}uwshE2y6^{(4vNEHDI3o znX&>!SX*@QqS|Sl%8W(9@&fFC=6u6aNJNLvo$de_>TKS@q=20f4|gL`=^|KlPXbUc1ya! zdb6Tk%MYF$+_(x0Mp(bD2J?cNpqA;L>lrJT!BPVm%;1hpJz_%WBLpH2y||{&S8_aS zwWEqMYgr>wC={~_CGg4__DBY24pT8O0vnWt)nZy55Y#yIa+NH{b-)}ty$-?>MX#J; zhB_cfLRnamrqy9VkzTHn<+u*7zpxI%5=F0^VTL*^l(Mk;mGu{6<^6@VAN9m4SSG_* zxlB}Kup&-tOH+|vUNx5EwjiqW<>KfaYt-#iVO_`Yl`|wtead@^+ldGciuJ{6g;FaC zHntTt4r(fCg;o3QKe1o$WuiaIdmn2|(hb%=c`me4@|`nU79f`J(Z;ifH6#c`Go;Ubzp=5W`6JEx4h z%%QIZebK@h7^`Q_FqbQmLj^om9%Qj0AY6|y$pISua#CS4F5LPLSrKLQ`c*!{YCy0a`!K7STdu~@IYrG}R%3^`-Zwxy zJ4XS}=3@Z%d?vq*QFaHEz;m=g=r%%(g)&rC7EZ59^Ks;<_CLCfJqfNAv~C2bt!lZV zoc4F1zrO*h@YK@ZE3y=1W-K=oZ}R*kmqmj<;?%bJm2N zFmuJ!b~Bzd?Uv|xE@9c})M!g|r)lR>R%YYs)>ZtkCE7ia&QI9p#*8_Ux8v!S=+MMy zI+eJ}oE*0Ho0*NH>(|HECDy&Jt$oc}bJd3S#TOPfk;$jVO}F%znb%P%_ZsT#;s3bK z|G(C|EB1yi4ZAwNc)B^r##^^){c23RgmWn#GxuRIErxF{nT?nOf&JoG-cDu4axBr0 z0DKQ@vUo>~K8pYx>jEv_yrZuN&xe3N><8YJ=DAxgh-$kwer!P%77ThxTf+fAm%bM_ zmyh8<2+Iju4?2k(%NB7#a6w`nP$&CEtic#nvM)p}l@5L~jb%B_PsWKJo2^^Rr%;$RR^mg^!uu(t3q@Hr3C4# zL9WRUf?Rq_^$Td#8>?@_?(cxWk5<3E+D8vpe;)8>0$;9X&2=@OuMX01&B~e}rEBVu z>r~B+HE2Z*bAMd(a7~EL)o?4SYngHxV34|MS3>3*q2z^fvrukBIzqp!z0KpJIicUx z25C*G9<>?_ao*#hWXMM!1l>pfD3pf*8|azPf-KT~jycjnE?keoMrp3+xfNE6nxGgt_$V0fY1@p*$j#?+FY>m|h>L zhwH44JRSjK?%|g5!Unf5w7`z5pKnI1^z1Xa7~2t`lqXcw630I^7V=O zAib@g`{IuJ&sSU87vb$b`c6IP{guGr?1v$F@od(!PSQgH_Y1sH;70^L0LcEPyiJX( zI-I4hhd;WbtPdC#L-tUZXBZeJT9oKTCWOks{1^$0@t6qXL}iX(c?WBRraF2L-HKQ^ zi0D9vcmu`s<^n@er}i7EpW~p8x~re}{1{jbR+=a<&G;#>dBB)=neiOX4Ocn5ZN{&Gec0h02Cs%b z=kRU@V{SMPFd(=yL{4r8%FY4Y!n!~-~Ur;A>&eoJ?B5Et)#4AKKi}Ci7ur-I6Nb8 zn|3L!U8N)&fwj?x9Bd7+HOzqTac`d1);ZWF&$+-iFlQ*=(mbTT?oi8qsAt} z)ewjU{rX1wuweCpF~PXqX^r9MbcW9f^m#bFrVJ{Ig6|P}*kGAg13%%Ts809zxSbCm zZO~Vc_R=FrYjh52ojeFqJX8&6P%WUBW&!%B0nm?`ir+9S21Km@b=m;vq09ZOt-FlA zU+Cp}`2B~Ejsp7Wm`Hv=;N5^aeL>RSxPVg5{d4Ir2Ux>*0Aau?PKNfo|R~ z@jO{Y*9XJ;{q*7B9KDLZ6nqWf0WGRO0=P^M(=)*pp!{2q$L=2m)>m`7y?PbsS5?1G ze*%)1>(2pRr9ThYL@x@|G|?|`zEIW*yj)<9zytdtQK)biL z1MnNQ_YzBP0{wfn_0&$!)-Ka0wRd24YLdLiv?ZZ9FrJT_i09!Z;u-gy$d&Wl0@y^m zWlg;e=`(anC~cDW4x~?G9DX@8Y#b2EJ)*gdcrM%~l&b~C1*QZ(rukgh+I~>t^bSzs^gh58eHfG! zG4~N@$Qw^<56n6Ocy`t?qmBL@+OVS5oiLu)o(aAi6qbBUi`H>Xn(J8qI!Sle4MTDW z@I`6e0h+9P0Ij=O;79A`cn;7VkUT(l)!nHdpoi)#a38Jv3gAy9{e0cSNC(3I0@x5{ z$%`0jY}NVtQ22*Nn?C6IA1Eae{*BSDPlP{>(vJ(g8SnsoD10yVX{W+38h!db;XgwD z%VCeVT{{;Dc(2xf9FBP7^laEN`m|q%8$thF_zYqx4Y6iQUldvHjq4XjF7F0f6Y4jPLx1aXb;AH`1kmyJ;=p9@r~DNxA}X zA9Vw!X$xSM1_1N49q=&iLUjIC+KqI9Mv%Udl1QIGI!f08E+>!n1HF}AFb0iQ`VWD> zH1_#h=|SUpUn_mhcnR7Ez_;#XpXNNdr(eueY!qbE zj*EtqLOBJQd%dSc&sUKCsQ0X-pGNwG_c_r_I@gwTwwtDR8wb5rNT>9uP?|tVdOIZD ziS)DHKHZ}|>f0lfg20mwWId-v+i9Vkb)e|?D9EKmCEX!#j{})rkn~9pr%y`yw1@3O z2E(Yqz1bn@Jpu~?PYOIO@T@@cioC!MfqMiN1fCRlTHskl53u}62Xfn&k_~^g5gpm^ ztAF+0s{g(I5BewcJMZc`#&!-EXUY={xAB!3iy&{kcODU zhZw<+NF#uVcorhxFe2OtVyD}+y?{s1V~8U3Ea2O9oVwCYI*v=Rulxewb)JU-`vRXr zFt8)=S->%YhXkGo+ylz3fqw%0Sl~gxYpQ+)_(aw7fFr>g#9etn9p!rvNd!d zFo>s)+EfG9Ag~67vCHF?NR-P$3fu~WBhzZtmuUnCT0g9J~HuHth zs(9i2Lef*^&Ime{b{8x}75O<8$;_fzdSk;3Y*X09Naw2VBLGD>A4Wtsbm9zHdTX&{% z6Y+FcJeNw)z+`7Oiv!kp9>=g0GZPbbDnIEQst!zo-))U&C-SC^#Z2Up+GN?| zIXrinqcPJyn8GP94ezsYz8j10HMfqk7^DxTaNfJ8jaa;GnsyqW>@m~kSUhi%dsv&B zCeu1FSv)-E;&7Oomt)LQ5~XBKJCB;q)V|iT))gzdE0sxFhjP+}GCmAqQfnfSw`_6@ z&~2sDXbDV{qfXn7PxhyBc^Vn%9qg9WKs=QJ1Lvx(l5K0I8#c(BOlS3frcynovRKiy zsyI@1qcJl-Qe=%6lT)oKQf0NL@eyFtWOn4xZ>&xd*|GIj8(K+8Iwzn4}CiGSZjH<>Q%zIWppQhSP1WN-INzL#`P0 zq;gp+2XU8zj44M4ZHedh<>RAi(b@)d$fn0@@s>&tv=~R0GQSPNgU*l|z|sTey3zjG4(}n3`$o>$Wm^_zZe0;c{|l zTPmN5r&CAFqBsqu68wIo%Q{RWrF5IrtQ=>vmgBop`F*_yQD9EhvTGur$ABLh&1Yiy zxSii_;+0I2YdD6S7gAZ@g;XXD$M>7DOgx+0hnI&=<|#BM>lB*OWo2h5wwzcjwVa3% zKW3Y`TvyzN4N8b(gmQvdp`6ekABDL`(xYi)Je(TGTqkv&Lf~9e2+nNKx3zW1vhzGi z+2|Ke(+EbGo94!sp{%A1%@zyXH89fMIW!U*?%a<3ZfvA`OJ6@W!LgB@eX+i-{$6qf zdbaoN?A<=ny>)P~w;Pfwn?vpCi%nzn_Vf)yc<5?ZGS<6o2WG0GzD<4oy(6*CoxPp0 zlF0B#th=*RW~_I3WN3Tu&c5DV+dGGgS2+ch*YxOHIb&R!=O>$}EHUbA(3Pw#fx zvTLwsq-*Q&@YVrJ#IqO@J$CA#Y4@19gq_OrgxX1m6s<3lG!Iicn>#WXA2%s6Di6l- zau6uPIOfZEcFpS6WID|X)zIyZXL&5Bd7)EOsI+KE9*X5BG2#!?BxQD`lKFj<*{Q0HD=CKHD#F-eCurQ=u@(BQmnO)6>Hmq{KX8HKWD$OJgjZ^e_8Lq(9+q#+w? zgL!Bt7EX(@quqHs?YLVHe%y@VV#1Eel8$mJO=R&4XiOFvl$oXrhU-W-7W(~)UN)dg zJ4-Cg`3?{X*kU|E`{62jC z(bt)q%p?#mAP-5pJDyID#?h`Wb1aqV%N)deV%S|p7Dc8@kSv(-5Onl%zfF-Y*X^*J zpP+&m$&d8qV$hm4i>+f~Z-!TU73j(|kP}&MP$_iW zn&~~9%2RCLL>}>AM#|vKEUX0ya@!Y$BUQ zOjZh;-6eqs`9v;@8K^%#X-(v1F2G!;W=$U85;4fwXMLO)j*qIy#6e?on2{+2arGRAP=>nG*tCgBIGiqaLsxtvxt$kj1YsPbvsKEH ztgS1>kvMuq5-damj%C#%O;=0KkTg7D2Of; zq80&_=H5aSt2%@mp<2xQRFL^9>=a2Ad2YuENk8^^)H|Lc&UYY9m)f zV&wr)3^5~Cy$nWNQUxtD1p=zwo6^=HXPi*?J~Oc&VLIoR*eD|gmufiEk(wKMLK=X6 zp8b2-p^8z(1@oF4U0^A|08|U})L25%ppu8Wa*b44=Bn*xI(}GEW!7;fVDTV?Td6b# zOv!exLAax_m15s5F*i@7%9mfqki&L7X^zM3{Ut$HOShGsw0RG8Aqzd3oJh>Tkcwqy zs1m%SxEm}6Qf^7ZseJj$G3{j1Jd9a?>S3kqrtmkLoR3bYvoWZhuTe`PI49jaL^h6o zveOv2`X}ief zL@(qumC9$U&QSUSE}eNZmOWqf$C$JVK|5N;?Lf=sV@HerQ2fJa%Q$ZCF{%V-0NFc?jPMW{^-Cv*Ef3~`}sXR6!^lC-8<*6J^RkU-B*s> z5dJ~%_53x9#}}!>=Z4yXkS9ub8AOp9zi&>YQH#_t5^#_JBXb;te{mR@?I5!mndcz$ zi~tlc2r!t#U^at!MwB8^6c+VHH7yd=@$#Tf!^cW^uEIOfx`hPh0wb#Fji^X~#hZ`_ z8O_M2*Aoc!5J93D3CL+WGAzZtoMo4b+T}o3GP+XGl|b7VZ4MmDNPC%1PwgOv>07_4J}NAJ5GKXBw?SgM6t_^~tB7j|S_ z3qlOTaW-rtKtM_er=*NN`CHB8yr0!Exh0nm8Lg_qaiw^zV; zo|hLz{EKYPQhxAHH5&Or<6SKJD+ur7BBCBYTqsJqAD?VAg$t)(piqeI06R5$p?M(- zFU0FHn6z-e7oJkMANJQmc-H#;3kiwa7KC(Nhdu}s@NqZ^>Mt;I;cJI_X9rpSMj?V06kmh6&G-5-j`X-jYhCr`Xsf#oYQ?gcw-Q!5*BZ0p z*)92eRz>M9{Z*Fi_9RAKP^%}DSx-8Daf}{DFGUJJV3WbcfrJbHT|J)W4h%4(rbbbI zrXIf&JHE(Br0|hyzXw^ug{Q-XpK+%wXRwk%8-sNW+Li3flK+^d9$xjpm)V~1v2bJf z*qp|I--C{cw6jx(0_fR!UcYA^y2pnvu|0uMh#7%Um5iWc%NH~P<<8PWI^H;=n|yv9 z3V=}fSR3+V@N1zU@^T;IYfVtWiyYhN#Vi$R0&I*l)%cCbv33x_)x#RqOgU;Kroi6r zTLUZ%_+@RK9A}oDgW?z38qJ!1q)GTw0^ti!KE>(F4@adN!pC-K&9g8h;pOgI0leMS zb@(zo_t@3SbMb_kwnetF&qj81;HyH%bxKjnuq8f&lUy8bO>)GUbeUZfsWeWD{mzeO z_&v22Ire7!$Hr`wo;sHDp@^179d3Ws^aGw)ej=H&TGg2q9McJv-Kf1tPzP%qIXZ#7 zWtV0cu6m0z^j!_g8N?(Ti~ zvcFOH`%TC>Sf)Twe+EKspP#R3%z zR4h=jK*a(T3sfvnu|UNF6$?}>P_e+PwSWh|w3NSnR^Xp@ZXqhv;kgG-JjyOz-oxXs zAQo8uy%+FtN^k?wf1QEO=Le@}ptJHHF_?0(G|?}n&=^tlKl~XwUeD1VK8}2Rpy6C+ zZ%4aSHlYMix!1Z(Jm;MvI$JKUuLX4{zN{Gm?8SF5F?_qU6<qW-A9ie^upt zBP9}d8y%>thC1aTrM}j>P*bDGtRnZ{T72`f3i-F-H_jSbpi1tMuX+-qr|erS$i32+ zL0pYh{EoJ$XD9Tiufq5nGrrpJ`{z}~o6F^2QgciBOC=l6INCM{I1c=k%WH+iVUc1z z5$Nd$HYOUn<;$x{X~7u2=izIDx$>*yukOt$)d6xE?pFA} zcYC1UUtT8rIj><++^(OWMtbI}z|PH%tsa0#{#AbNcih#n+UBiNnLqq*Kewpv+uX0Z zW%JjS;?t<*l#7R2VG89{AR3QRb+dJJibm_iO1yIFR9B}kUN?E2uUr)iR4h=jK*a(T z3sfxdH)4T3>hGQJ;SEvcs#u_6fr;Yb?2X7+SIbTbXj>t#rSbE z>RSTL2=gD@$>lb#Wp1-9{yh$IVE;$4IgxXqdO#U|?L^Lu6EN*3|FAM)%D@B)f(SD+ z_~@gN@RJIs~1z$dA9=IPp^S#DUXRbp7DK#K%_!50+he=HEQm@ag-1 z^*{e+;ysrH``7>Rh=)%8>K&h%xaGf0eEPf~cz?{gr#FASyXHroyBojv?y8q>&3@y4 z*JTKPQkQt|y1rdc-TA*?{G*>&JhS=4%gJLi#h=vk|BK7+P5s|UDzuZ~&e`a;=&eR`#so~0FB>5+NG(V~5|KWs3{<`+-k3T(g^v`dc ze`cZggwNPxBm+LF=l{-w-+4as(;vS6#oFZNliw=rJ4TX!!bkIydj6M|H8#xtH@)A_ zE$Z6;-ONjiPxy>IMl#@&dj4&b{#RS}nVsXmGUY$s-*DIZDaT0i<7m1Z*mAPH@I20# z6C(#ceCNY=G`IKj5`OAdwAN=jdUvF{^SRPwcV}r!DxXhxZ_TxCOr;k#rMkD4Hl|Xo z^{L$Ue5R+hwkMm)0v9VDL>Q|homal>9#vW8%Wru!rz)3qR#t6U+OaUXWXZCHRm+!E zFRWf%UAb`SlB(s{RCiQXEUVOmJ|bDVI+NXDLO&wKY>N;52&VmrW6fqlw8$Kh+=$lH zJw09Nj$}Ta={~CPm5jtInqM<$-F8JLCFjuQJ@GNtw7$wZ$V2Fz1uq*_>=InYR;YWq zl^5T_{>$+Hfn6QV=&41qqyOrR|6Y-}i&T8)=FYlxul;4>W8_J{M2+T736|dLt`Dh< zn#aBT{^~W?UcQNIWu!7pZYj7o%2+RZ_2=KbQnJc$$;vG%s|V&~J72i}0m*-B zSv?3Z`}BjG4oX%JO0sf`%Ie{H+0j9DL9$AZWaSo>RUz`SfB($~{#LTGldO1DRt3V# zzJJTlW=hr<9JxhhaXKP~EDp+p^Cl|rk;Gr7#{Al!vx1=Ho7gKqg7S`hCL07(gOeso zFTlPA=G{*V$|m;j>+yWBo7>;Ays3|W*XNTr=M5#}n{Z@%QrUbTvf~tn>9#2z{<^#_ z)73=}lIkcI1hWRUFJF_Qzm)C>f*H6s`F)S&SEX~k$*xt&oScGlaGN`*BVlys@=3bJ ziu3StJ5$*laT#8&KABI|c6V+_@1P(IbZ}nCgLNcbNM9Fmm+ulP2Sb4fCp1P09SW;p5ek&uXk;pN~y&`Nnj2XXb`nxjG>x z-y_ewKAqg!oyq0X9k`rYeCFh9GB9P)l#}xMZ1M&?4y;|jv55AzmKa*>Fi@d!5QgQ> z(3FCKUwaJHr*l1-oPn-zFb4Yt=t$nn#5fR`gqIixTk_Egru?YI!JMGfv;oaQU^uNo zaMh}^x;16_w)RY>tE{CW#LC4EE02z~5cx3}@MbnxnM~tg+KYAF={)sO`o>gUW=Bt^ zn|TGv2{%<>W*_>}_3|-pV%!YT_8#@Pxx7Da@@=_%wznfM*w7Z2P81%l7)qwn%FrbY zT85HYJV;wLUT6w}uUTe(mx8}v(J43hQ>$6o)|g3l8q7To-WH%Ec`p-VF2>xkhPhb| zPa6heC7aq()>vWiCM>ZDWyrQnZO|LwVIFwU`1QIm7Bf>_J9t&7%Q$UU5qs({Uf|ll zy>9c{vj%zg=K}EeCFfVroMpy2b;DKZ&Qu0x)9w-8!{|xJ%f%RsF?g(D(DxTNhBz_( z#X;LW<~^b~G%^gx!nRRZy}G~5p#4sdyLTs9thHKZewTr}_2AjGdl~^=k?KgLccwaV z74G(dxwp`hj+cvZ7vt_&!<}!RJ`>_42_Ct@~JdQS;ZUMC2GV@yvj=tq_ z)Z5d^92MjEd^W?Zl5lho3^k)C9WNK-D8|vTh9f^FqdkbWP5s&(mG=dcgP@V}u0G;N z4i_GS*Mz!<_7PXPK4O#VkfuzFU zMA+N#L;7AP##@ZHV-0V9p54zKK76JH1Y@+&P{vD|`{5$fGY}TSL=Sj)5Pj)-`4|&1 zCXO{s_%YPAVLRf+Q0jG=(NS^U!Q-ZSwuMVBL`@J}2yVU>!Oe!`_EbxEvM0AKllQHO zaI+W8RG}|jFCXJ3#?7&Yn;CA7t}Vn(5VY?|_6QPk(;UF&h#PQ9%1wCFTmv`JK3~2q zf;Y)%Ijg$W=Mu>{0`)IK?zb=bXNnqsfAKFRYGAloNYOU`S4TV zqlo2LY7E6`d@!5qPeF5nQMfA1S4a5uxP)1o!%Fo_Z~%LmDfpoCA%`Ln|Q3OQs&04@u@icds~}+bn`C6S29n?MQ~rn+LW-YcB{Kt3Jg;{1|Ej142&{qoD*0)E1kmgDPVgh zmE2rtHna$u1uce_;x+}E1>5SFtXC+Xs6&DWAQ_c4+D-X4@h4A$Ex1$8f^G1d;n%_Uz`KwW##s|7{3-l;_%rYPaE}S?P z7Qt^p4!i~h{>kfrXHX!ogWd2^l*92s1^$+~c+D~KP+mskvKM(fKbA0aWr|BQ?{3F0 zEs!Udf&uB9;cFdMAgDo^AKF&{Cl{6t>%w^qf7E_`7k(D}d+-Xlp2HIOpCPCG|33DV)8I)s zwAq)k);y`J&dBp#a_&0`a@7q#DhQuZ~22R}Zc{}4jSL5E(q-EZpGU=FI1#hh%J z`KA6ZndLFJCY4{C%x%-Fb#fH;w9ouq^rYkEV(f8-ZFH+8c{9xZ=6El+IrKN0Vdd+( zkD&y#p9b6d< zz6JjFpesEu8)GoWV2nYHH7o`{9l_urFk*Jqu1_)N<4`#CK0UwYTgD`eOxUP$Jp;V9 zd%U`L68ixb8MT`apj3*!biI6x*%-4iX61%Uq z_K$Sw0>he+@nbAp<6*5;X{~G=_o|*whHFjh6!@9&@o=qEp9(*P)!K=ylWDzpidi3? z0x!ev^e}uq58GE5{CTj!#)QxQ3-dfC!N;>&uJz{e!Q}9H*g7u})|Jt`Jl***4X(Ah z>Bf&USu2}q{Ls3Y>^0XdQw`O##?=btp?jdc(0=F@=v~O1#ejT0v<)gid!X11oda6` z^Zm@3ZjEw9M7)N!O}A$KZ)+;w=8vFjN_Ho=rnD4l`k7Ll#*f#P{1E55cpq}*;nk3` zO?`u$0rPR%(0J`IUOOD3ojoef5-?{J4O}~n07BzLVQXR7H)X$&J7>{DPcl?{v_4e5 z#vD49)EKZHH=VIj3Rn9nZ2EnY?00dx)T^l-JvfE)MVhnq>y$5!mW$a_XfOD!rEU=3 zp{}4=|H?50IRL&Nyp2@c#ZL@@)P4VJZmsKPwsGd^_bN7 zRAV}s1b@DdES&i<-MMaTISQd2q<=OFSQ5$^8QOayb115~ILrki6bAp4HQKE`JUpf{kA^cOS+sfJ?nFOvhxYTssPyey;s znm21`Gv4MV?Bn_I7>Q>eJb^YpAoi8k-wxtmd-*& zNNv~S;A;Z9((|%0#$t@c7%R^Gt513xWczl-b!hcHcR@1jVKd|XCb+ttmzh4Pox9Nc z5$n0v9ER4XHDTGz{b}&a;aZQr0zQ@*2hCqh2yUk>)R_d6L$3E%^-i+lqA+cHm@sXl z`nS>f6V|&;TxJ+QZJ1p1)^|{t1D^>$56*gcVKJQW3z`q1|4JOD6KfV%rxjWDy{pV zN1^ASSD_D}e+i>te0{oC3BsIhnfWE(N;JL?$Ny~T_uGOc;Ku?FBO^U88`r0CeHz!N z#l88|jp3S26hd0V6}G4=o%^9{xW3=x#}hjEMMib8H`Hq-dbfPwctZ25AJE^Ctap#G z8DlfXX8*pSJt%kEho%5sI#%_=n-!tBzpLK__hcJnkADI-|G)S|x=j?%daP z)#kkd=GLMkc`p;=F2-GqyCUw`=Nh(o{=?M1z4Lv}1C!O-^>6Q3mM;1IDDF0<+FMfD zo#~ELPO`#ZGd{nFuJGq&WBkSVi}6?NbFyw5;x7szkHO!79nIU?dC7#CqvV#efz7#q zx(q%?^QK|p7vO^G9=O(|e+i!lpUJ%I49?4*!4CTw%#dmi`wZ5q<+oW2HaH&qJ@G#L zz&W@Pek%MXxZR_Fv6;j5e%LYP;C|fh{J6vUacAg<&cQD3$G3gs!Tq?$`EjrFWX;(f4u*Hi2CHHIK$y^`~Uq|@HK~3?Gx~( z0bKQPW7^f)-h8Gdxib}cImoX8Y7IhqUN**9+{O-pi4*Ew0PUL-mMX)s;L!W#{5t%D z8t`G-Ei=EX!QtIp860XIzCN`j$uTB!6b63@{vJS2I$kcuV2r^SgT?vK#UTb6mpl0A zOlo0@{b6pd#^5vGmQ8IbYpgKm;Euq(s=xb?-&xe0fbC}{0^dKCzQ5+14Q3uk`}?N_ z|Bik2Uh$j_KLxIReVTin!@b@gm<#6}0)<1rd?#}r z)zlRuNR-Z2m}L6s>gVr=Z2gc3>le-aJPygsM_=JAfU6o(I4rf8^BV|**aijMjQt`w zRG@Cs`vrwYIQ3ki2~J)YHo~R92~PeNu7>lDaUluUIS!g@n(WT_n@)Vs#8q*g&Dnpm z$?-FZ`*e0W%5Dm8NZ7Lni{~@=cZl_Fg7z-yTQg(Wurv>P%5cdaac`^!InY{dq||!&k)D_RIODtDr5%mOg7H{zh&K1A9t-+&;d!6iwS%1P zdg$jBOnb<5s@4|zx0lImHrZ!C2ChD@uy#>@nSO1iWSFzn_iLm6L}V&WSXAlyw(Sry zi%s9R1{s|nq4wx%8e7!?@?X3r)a84rsXQB3n^L(PCxYTO6&bb7wGo-ruHw9y)@l5i zqvj<(WVQC<4ef7|K-$mR$pe>TFmyhe6xNkm0J#j*gk5`2lbp7vP&bHsg z1_hbu`p*Qg_@6x%qw7CRL~lS|vfe$$UW~mMd&PFnzgP9527;Kd17NR9e&TTz`L3?c z-+Tdi$$Iw~S23<)Tovb=Sd$E)G}L!>8&4DB`hQ;#tCBZ7=6DHv;CFQofV;H_sTuTg zG4^8Y#n>zEy{nI4FA5>Q_s;J-e~xb-$uO1+%_Q*m_YwR>zpL8}?)IZ2c`p-VFUDSs zy<)q^o`JC41ABvhSGR_PkYwCY&RkChcO#fwGV>{s4})s%_60Dv5*^8VnHYC5?qb{( z+dS6cLfl2*!|GXyq2GX=ZGg+JeI&y56Ybk+HK1dDl65&q%_yqWKa7_e14<8@w zCWF>czi2)2BEzS1x|{CLB<9mOWo-(-)6H2ZXK-BuP2>Jtr?V>}+lAXq+%9%*Gx7V- zZ$Zs)NE->3N_ z=idRi_F%qb{3(8~OnJxLy&JP9@Y@>A=~uYxA3Hz(D|`ZWKY{o1#0P%I&W=3>|9;#n z&X1qMwT}EVT&H3>fT=94v z-W&We@vz^qJBXd~$?sdO<~q+@{e94*(96(Ukc6f|70_C!6S^7N1MP#JgJSc~mjfSR zW{h3*p0Kol!g@a-5^ny01tRej`ETxB|6!r)zb|)kzi|9{ujk~Kj$lmlY7az|DBWnw)3aS`TLlYztzdjc6z^X?%#I){?x^ncTh~Y*EoMF zoqO8pKjhrsBXWx0DChsZ&c7eKc--s!Tk7P;I{R9mE~l@(8uI5FXaAVv4KBRroxjgI z|1NTRJ6yQGb^Li3&!m@k@xR~sca78kw)2-d#)LcHx&PG3_c{HsPJW8J|E=TiIs3nI z@wndc%UwJcI)4_ra2|8+vmJlL`P1O!zToVqxcggNyr#SKG`R47<^1b)a%Z~m);YOe zC&&3)CSA8U`$wF80{Icx8H3$~g1dGMwW2%Ms&{2jGe&$4 zn=~>$56q4INmzG#Gl+XpwBRmFxu|j1j@9pLss>YjGhgT*#t zOyF1KiuI$)*OvbQXRUG5ny|y-gOnO@z>G$DU8K+CW z`}TF-6zSRxHeS}+Ia%`Ahok&Vm=Ep_{338M94ljWt7vO|J64K=)%9NvE$Ub|rxR&o z^K91JS=`fMy!%_GrnK%|-YV$hQ&FS#0d>+VtWMDrs6_p+7%1#CTds&^2 zIdVXLSv%`*1smgM`91<=W@K>a$3T1-j~jQVS5?$ge8!qIP)7aJ#LnwkcdJ*~QHmQNcZpATq#vR*me`LihbJET_*gfW4)WEfU+)lFo#+W| z#jvcq(*p}WZkxf5)w8Ed`Eabglc)T9d7T|)YwaBZkP|5iWnLB4tH+I3hUog-o9o>u$rTiqvI#Pi%yF zF8&ReVmhpw)8Sc0aXk7kb&cXb+Lwb=QCE9kM<1rHu`(`CwnXxeR&Dga{4;h|wvzh7 z=b!c?jUJ>i!HLKBs)almV z$%EtA96krs$Gc%{WkP+s=?qC{1n2(c8O$ZGrF=aBEx^7ROn5Vu3*<0w?>CH}k3O>Yg{qbX}zQXRe7biS{pFQ;!|H}#eKHZ51Y3YIKc+OWEI zF?EfM_kZy4P7fZ|gfwQC3-8e{ePx*Nik~G7D(aT6T2)s~@i%7pa85JhZ3%9Gl&+eq zCy5zzXu68wG-oqCscgP4sHj+7zpS>Q!RZVi-lSlfOPA&(=#B?9e=>Y{(b|4#Rpsgn zmM!x^9VQQ_2CC;|eA-@_Fnn0y`Mb+&m)F)WsiR6TX81Hs30|IT<@Wn$^||50A@8nB zb>xH9OR5_#SXN1GYR&NBObhC5p*3?TdPs$j7Y+r|wq*^qtCv)*UKZ9W!-qFPFCiME zIUt4iZvFkkmO+;;!i%2IXM_fKTU?UK8v%@f2_PL->{7rQaW3b zTT<)WmAS-aC$l2i&6PpLs;b&0)vN1`zr%c_umwhAAs!s9r-Oy;6Q?=8R!FJv4G_;m7Z#8tB$O zjGN~1htewy z#U+QE&$EGgH{*7;&9Z)FUuk$Kq8G)5+`frhjnngf>sD^R#_hZz+$K|Ce~i1#K)qiP zxvyELL)^YZ1fCtjZ9N{f4&nAK+_n$lHWl#sdSYN)nsK{w2)(c2mK(xN-8;(VZ28XiBN+`suUytyS+!+p$HL^2CCe68Enil>uzGQI<-(;)s+MC@-BDSwtn!FO zv#GDtweqdSKJF3EyhyBkkvZ~DG!m&uC$?X_DDxk_^Wi%{0^Il?U0?(@Yfg<^TetYP zUk>akuS`t2==28V;hT+@9(?_&n;P$UvghF4=e)UFYle#&)7{(k=47y_JGp~%iWlXw z9gDWnUrc4&yE3dv8H+9Hu2gPO$BNd@ew7e&hIv-6a;-N|2~js~E$yNb>U5P*(pEwp zVI|aIDxs9CggSjClyhUmoEamw4!GUXSK4C-1+B?kF14e*t1nG_1@ogQYE-wG-Yj)$ zIjIk;%cCfQ{!tATzmHwF9_ch~(OU4)@bqm&j?%}SEPn2$-xH^M#Mv>nPJL#q9ic3y z??IQw7}+#YFEG_>`mE}6e@NvaJ(0#HPa?0L&eM?kp4Z~8KH3~8+K1&fHb*!IH1^e0 zh31Nx`VZdJgTrj(LEXi3+r;%yG!M5I=d-_rJqP!pr+p?5P*AkD^93dfpW?n6`-chS zEeb{r<>FNe1lGalp#pR(q%yP%>Vs~CZh~%xv}f#dkj7h@Jkc15sbbR)S2YLDJ%+FG%**mOpSt&FdQW>2Kl|dR?odcZ< zDXk>cjE&BRFMt+8< zpjv1ZR0q{V4bW<64YU?o2VDw%8ft`^pv$23P&0HnbOqD`ZGbcex(eC|=^0)PeFpk0 z)Cye#T?@5Ao1rAs4s}4CPzu@tZH2Z$Y3Mp=JJbd3fV!a!qfVmw8>v9(@GdgLD@zAeE5D3XrALE#TQuX~31SKsZq81SEg&DhqLDY*F=JmJ`lW zIl2mQHUh>c++wx!@*hQ&)#Cy)m_`GmHI=7fVDwhtc_zjhT!AXxsWSZc=o}qr92g;o zf}5E8Guhg}OfQ55+hWpzk#K0urIKK4oH$n3P^IBwcq()b=y{cj7X-~(S*`uQT(3$r z??2-Id9=0NVO5PLVLf0730fR+XQ9(PGM%(=0xbfhM;xpxbWo zWjB#J1@#6&z)`Q-k*;a(@cr`FUthj`zwv#R?6fa%z} + + + +SecuritySystem + + + + + + \ No newline at end of file diff --git a/Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/obj/SecuritySystem.vbproj.FileList.txt b/Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/obj/SecuritySystem.vbproj.FileList.txt new file mode 100644 index 0000000..4ed3a00 --- /dev/null +++ b/Chapter06(ExternalDevices)/SecuritySystem/SecuritySystem/obj/SecuritySystem.vbproj.FileList.txt @@ -0,0 +1,10 @@ +bin\Debug\SecuritySystem.exe +bin\Debug\SecuritySystem.pdb +bin\Debug\SecuritySystem.xml +obj\Debug\ResolveAssemblyReference.cache +obj\Debug\SecuritySystem.Form1.resources +obj\Debug\SecuritySystem.Resources.resources +obj\Debug\SecuritySystem.vbproj.GenerateResource.Cache +obj\Debug\SecuritySystem.exe +obj\Debug\SecuritySystem.xml +obj\Debug\SecuritySystem.pdb diff --git a/Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS.sln b/Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS.sln new file mode 100644 index 0000000..173df46 --- /dev/null +++ b/Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SecuritySystem_CS", "SecuritySystem_CS\SecuritySystem_CS.csproj", "{FDA46139-B096-42D3-B8E6-AAC2F11DEB3E}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {FDA46139-B096-42D3-B8E6-AAC2F11DEB3E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FDA46139-B096-42D3-B8E6-AAC2F11DEB3E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FDA46139-B096-42D3-B8E6-AAC2F11DEB3E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FDA46139-B096-42D3-B8E6-AAC2F11DEB3E}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS.suo b/Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS.suo new file mode 100644 index 0000000000000000000000000000000000000000..9b06766e46682bc8190dfec35aae976ae6b582da GIT binary patch literal 17408 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 literal 0 HcmV?d00001 diff --git a/Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/Form1.Designer.cs b/Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/Form1.Designer.cs new file mode 100644 index 0000000..0c3449e --- /dev/null +++ b/Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/Form1.Designer.cs @@ -0,0 +1,126 @@ +namespace SecuritySystem_CS +{ + partial class Form1 + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.lblProximity = new System.Windows.Forms.Label(); + this.ProgressBar1 = new System.Windows.Forms.ProgressBar(); + this.btnStopRecording = new System.Windows.Forms.Button(); + this.btnTakeSnapshot = new System.Windows.Forms.Button(); + this.btnStartRecording = new System.Windows.Forms.Button(); + this.PictureBox1 = new System.Windows.Forms.PictureBox(); + ((System.ComponentModel.ISupportInitialize)(this.PictureBox1)).BeginInit(); + this.SuspendLayout(); + // + // lblProximity + // + this.lblProximity.AutoSize = true; + this.lblProximity.Location = new System.Drawing.Point(309, 23); + this.lblProximity.Name = "lblProximity"; + this.lblProximity.Size = new System.Drawing.Size(39, 13); + this.lblProximity.TabIndex = 16; + this.lblProximity.Text = "Label1"; + // + // ProgressBar1 + // + this.ProgressBar1.Location = new System.Drawing.Point(12, 13); + this.ProgressBar1.Maximum = 160; + this.ProgressBar1.Name = "ProgressBar1"; + this.ProgressBar1.Size = new System.Drawing.Size(291, 23); + this.ProgressBar1.Step = 1; + this.ProgressBar1.TabIndex = 15; + // + // btnStopRecording + // + this.btnStopRecording.Location = new System.Drawing.Point(126, 301); + this.btnStopRecording.Name = "btnStopRecording"; + this.btnStopRecording.Size = new System.Drawing.Size(108, 23); + this.btnStopRecording.TabIndex = 14; + this.btnStopRecording.Text = "Stop Recording"; + this.btnStopRecording.UseVisualStyleBackColor = true; + this.btnStopRecording.Click += new System.EventHandler(this.btnStopRecording_Click); + // + // btnTakeSnapshot + // + this.btnTakeSnapshot.Location = new System.Drawing.Point(240, 301); + this.btnTakeSnapshot.Name = "btnTakeSnapshot"; + this.btnTakeSnapshot.Size = new System.Drawing.Size(108, 23); + this.btnTakeSnapshot.TabIndex = 13; + this.btnTakeSnapshot.Text = "Take Snapshot"; + this.btnTakeSnapshot.UseVisualStyleBackColor = true; + this.btnTakeSnapshot.Click += new System.EventHandler(this.btnTakeSnapshot_Click); + // + // btnStartRecording + // + this.btnStartRecording.Location = new System.Drawing.Point(12, 301); + this.btnStartRecording.Name = "btnStartRecording"; + this.btnStartRecording.Size = new System.Drawing.Size(108, 23); + this.btnStartRecording.TabIndex = 12; + this.btnStartRecording.Text = "Start Recording"; + this.btnStartRecording.UseVisualStyleBackColor = true; + this.btnStartRecording.Click += new System.EventHandler(this.btnStartRecording_Click); + // + // PictureBox1 + // + this.PictureBox1.Location = new System.Drawing.Point(12, 42); + this.PictureBox1.Name = "PictureBox1"; + this.PictureBox1.Size = new System.Drawing.Size(336, 253); + this.PictureBox1.TabIndex = 11; + this.PictureBox1.TabStop = false; + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(360, 336); + this.Controls.Add(this.lblProximity); + this.Controls.Add(this.ProgressBar1); + this.Controls.Add(this.btnStopRecording); + this.Controls.Add(this.btnTakeSnapshot); + this.Controls.Add(this.btnStartRecording); + this.Controls.Add(this.PictureBox1); + this.Name = "Form1"; + this.Text = "Form1"; + this.Load += new System.EventHandler(this.Form1_Load); + ((System.ComponentModel.ISupportInitialize)(this.PictureBox1)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + internal System.Windows.Forms.Label lblProximity; + internal System.Windows.Forms.ProgressBar ProgressBar1; + internal System.Windows.Forms.Button btnStopRecording; + internal System.Windows.Forms.Button btnTakeSnapshot; + internal System.Windows.Forms.Button btnStartRecording; + internal System.Windows.Forms.PictureBox PictureBox1; + } +} + diff --git a/Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/Form1.cs b/Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/Form1.cs new file mode 100644 index 0000000..69b725a --- /dev/null +++ b/Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/Form1.cs @@ -0,0 +1,154 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +using System.Runtime.InteropServices; + +namespace SecuritySystem_CS +{ + public partial class Form1 : Form + { + System.IO.Ports.SerialPort serialPort = new System.IO.Ports.SerialPort(); + int proximity; + + const int WM_CAP_START = 1024; + const int WS_CHILD = 1073741824; + const int WS_VISIBLE = 268435456; + const int WM_CAP_DRIVER_CONNECT = (WM_CAP_START + 10); + const int WM_CAP_DRIVER_DISCONNECT = (WM_CAP_START + 11); + const int WM_CAP_EDIT_COPY = (WM_CAP_START + 30); + const int WM_CAP_SEQUENCE = (WM_CAP_START + 62); + const int WM_CAP_FILE_SAVEAS = (WM_CAP_START + 23); + const int WM_CAP_SET_SCALE = (WM_CAP_START + 53); + const int WM_CAP_SET_PREVIEWRATE = (WM_CAP_START + 52); + const int WM_CAP_SET_PREVIEW = (WM_CAP_START + 50); + const int SWP_NOMOVE = 2; + const int SWP_NOSIZE = 1; + const int SWP_NOZORDER = 4; + const int HWND_BOTTOM = 1; + + [System.Runtime.InteropServices.DllImport("avicap32.dll")] + static extern bool capGetDriverDescriptionA(short wDriverIndex, string lpszName, int cbName, string lpszVer, int cbVer); + [System.Runtime.InteropServices.DllImport("avicap32.dll")] + + static extern int capCreateCaptureWindowA(string lpszWindowName, int dwStyle, int x, int y, int nWidth, short nHeight, int hWnd, int nID); + [System.Runtime.InteropServices.DllImport("user32", EntryPoint = "SendMessageA")] + + static extern int SendMessage(int hwnd, int Msg, int wParam, [MarshalAs(UnmanagedType.AsAny)] +object lParam); + [System.Runtime.InteropServices.DllImport("user32", EntryPoint = "SetWindowPos")] + static extern int SetWindowPos(int hwnd, int hWndInsertAfter, int x, int y, int cx, int cy, int wFlags); + [System.Runtime.InteropServices.DllImport("user32")] + static extern bool DestroyWindow(int hndw); + private int hWnd; + + public Form1() + { + InitializeComponent(); + } + + private void PreviewVideo(PictureBox pbCtrl) + { + hWnd = capCreateCaptureWindowA("0", WS_VISIBLE | WS_CHILD, 0, 0, 0, 0, pbCtrl.Handle.ToInt32(), 0); + if (SendMessage(hWnd, WM_CAP_DRIVER_CONNECT, 0, 0) != 0) + { + SendMessage(hWnd, WM_CAP_SET_SCALE, 1, 0); + SendMessage(hWnd, WM_CAP_SET_PREVIEWRATE, 30, 0); + SendMessage(hWnd, WM_CAP_SET_PREVIEW, 1, 0); + SetWindowPos(hWnd, HWND_BOTTOM, 0, 0, pbCtrl.Width, pbCtrl.Height, SWP_NOMOVE | SWP_NOZORDER); + } + else + { + DestroyWindow(hWnd); + } + } + + private void DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) + { + string str = serialPort.ReadLine(); + if (str != string.Empty) + { + proximity = System.Convert.ToInt32(str); + ProgressBar1.BeginInvoke(new myDelegate(updateControl)); + Console.WriteLine(proximity); + } + } + + public delegate void myDelegate(); + public void updateControl() + { + try + { + if (proximity <= 160) + { + ProgressBar1.Value = proximity; + lblProximity.Text = proximity + " cm"; + } + } + catch (Exception ex) + { + MessageBox.Show(ex.ToString()); + } + } + + private void btnStartRecording_Click(object sender, EventArgs e) + { + btnStartRecording.Enabled = false; + btnStopRecording.Enabled = true; + Application.DoEvents(); + SendMessage(hWnd, WM_CAP_SEQUENCE, 0, 0); + } + + private void btnStopRecording_Click(object sender, EventArgs e) + { + btnStartRecording.Enabled = true; + btnStopRecording.Enabled = false; + Application.DoEvents(); + SendMessage(hWnd, WM_CAP_FILE_SAVEAS, 0, "C:\\" + System.DateTime.Now.ToFileTime() + ".avi"); + } + + private void btnTakeSnapshot_Click(object sender, EventArgs e) + { + IDataObject data; + Image bmap; + SendMessage(hWnd, WM_CAP_EDIT_COPY, 0, 0); + data = Clipboard.GetDataObject(); + if (data.GetDataPresent(typeof(System.Drawing.Bitmap))) + { + bmap = ((Image)(data.GetData(typeof(System.Drawing.Bitmap)))); + bmap.Save("C:\\" + System.DateTime.Now.ToFileTime() + ".bmp"); + } + } + + private void Form1_Load(object sender, EventArgs e) + { + if (serialPort.IsOpen) + { + serialPort.Close(); + } + try + { + serialPort.PortName = "COM3"; + serialPort.BaudRate = 9600; + serialPort.Parity = System.IO.Ports.Parity.None; + serialPort.DataBits = 8; + serialPort.StopBits = System.IO.Ports.StopBits.One; + serialPort.Handshake = System.IO.Ports.Handshake.None; + serialPort.DataReceived += + new System.IO.Ports.SerialDataReceivedEventHandler(DataReceived); + serialPort.Open(); + serialPort.DiscardInBuffer(); + + } + catch (Exception ex) + { + MessageBox.Show(ex.ToString()); + } + PreviewVideo(PictureBox1); + } + } +} \ No newline at end of file diff --git a/Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/Form1.resx b/Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/Form1.resx new file mode 100644 index 0000000..19dc0dd --- /dev/null +++ b/Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/Form1.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/Program.cs b/Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/Program.cs new file mode 100644 index 0000000..d6de0a1 --- /dev/null +++ b/Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/Program.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace SecuritySystem_CS +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form1()); + } + } +} \ No newline at end of file diff --git a/Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/Properties/AssemblyInfo.cs b/Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..6d68b17 --- /dev/null +++ b/Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("SecuritySystem_CS")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("SecuritySystem_CS")] +[assembly: AssemblyCopyright("Copyright © 2006")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("9f9202f0-f215-430f-9ec8-98bc1b427df7")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/Properties/Resources.Designer.cs b/Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/Properties/Resources.Designer.cs new file mode 100644 index 0000000..cd27771 --- /dev/null +++ b/Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace SecuritySystem_CS.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SecuritySystem_CS.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/Properties/Resources.resx b/Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/Properties/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/Properties/Settings.Designer.cs b/Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/Properties/Settings.Designer.cs new file mode 100644 index 0000000..0c1d1c1 --- /dev/null +++ b/Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace SecuritySystem_CS.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/Properties/Settings.settings b/Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/SecuritySystem_CS.csproj b/Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/SecuritySystem_CS.csproj new file mode 100644 index 0000000..21dab8e --- /dev/null +++ b/Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/SecuritySystem_CS.csproj @@ -0,0 +1,78 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {FDA46139-B096-42D3-B8E6-AAC2F11DEB3E} + WinExe + Properties + SecuritySystem_CS + SecuritySystem_CS + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + Form + + + Form1.cs + + + + + Designer + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + \ No newline at end of file diff --git a/Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/bin/Debug/SecuritySystem_CS.exe b/Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/bin/Debug/SecuritySystem_CS.exe new file mode 100644 index 0000000000000000000000000000000000000000..b02c86263eccb483147e51be622d16140f693a1a GIT binary patch literal 24576 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 literal 0 HcmV?d00001 diff --git a/Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/bin/Debug/SecuritySystem_CS.pdb b/Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/bin/Debug/SecuritySystem_CS.pdb new file mode 100644 index 0000000000000000000000000000000000000000..5191abeba46f1e619745c98272900c33f706cb0a GIT binary patch literal 28160 zcmeI4dzjSKdB=YP>&hK=MM1m`H(hSaE>}U3%Pu$FE$D)xp<##F0Tz~>&CDQ>nC2Ht zjjfnqBwkvt(YE*m6OAM#3K9EQLlT~9tM)N{{Db;ftF2MvgQ=}n`}v;pJ2Su83oN?0 z8`uNyet*Aneb0N|^PcmbGc(oo@l-OMT$71bOsp6;E?Ql)AUeIYtgL^ZVU;x=p@-*1 zfay>#JrJf?=>B^WNZ_vXiW$|zpLT~+Qv%TuZ+~)X_Po2-l0e^Il}9d?9UBx7FxdO_ z(*m%k&!6saQcGZMV4EqOnu|p z^vcbN`Uym@jW#3_E9(;J4Vh%q%2-n>kxs9SuZuNh5~=8xXgpb$h?XR_@YWb>s7qX5 zA5WymtV}23n^N_et?8}lOk(4zc)FFCrc|;ik;>F3(krPnxhX}-QW~o7T5PUKrZ$%6 z@zo0@831XA^j2T1G2db9q{laj>;sBUgC2*JUqRDs9_hWoBB&4=0i6zgA>qT-SI&O! z^cRbE)OZJ$Jk;aCXXjsW_gioLbJ333_Py`DH(gh>=Eb7@V?FP~UW@nF{!QbY=j(2) z`ssV~UixP0Z||1bQ0RB=@(;?MfBSz^w-v8{xpGC{uyt)9eKOP&Qis*a2~a6C5h{Zu zyn&GF8wyDP5>h`%f*A~*1)U8IgU*4@h0cS{hc1Ak&~Qis90`qrMne}u7eOV^IEb!z zW1#WSnb4^mTC@KeyRiM&yJXZHPi48CEPd~&`Tx|~yQ|N80imPDfB*1h_dN9BUFk1BIpy_z170v&$`inDca4^RR*H)x|bK1;z-Z*&Zu_te@dU{UR>uEPftx2Gx?0@s|*M4m%6!zD&x9bjF zO9Cfq{JT~!ySZsg0-wD5$-6A`-hEosD`u{&%sct3aVLM*aPn8JlfNoX{wjl$zq$70 zuOfT$S7A>6<_9N#mG0!PCOG-4u_u2OH7i@jEHFoE97KAZc>HM3^6@%FUXf zE+VLwR}4A@4~Lt0>4WM1GjIneE3Qz5YxX9zjU(J5toq|zL!1S<5Zq1#uN}4iKf849 zKYruvk8gS6y}f-J3#UJ&v-WddD~l8i9PtzRkK#(4inBz}wm_V_yiebFbBXeXdlk;B z9=p7~j|{j|dDUyxtF&-l_1xv{`S#LpDX%1=yh;n_m4sa0)b9Dyl~)o|UZsWe5_M9A z6E*(ld!ve$+XcV0BH7T8h-d1Pjp@>b2`(J#CGJ_l@q|ZXy-IHqSirdGjzafEJlgY!9zQ)@=NX0kR~_&3 zybP-3GAY78-5V(|{N5t-WbU1O=@55MzV4i;&)0bdv(1<9!uhk`o2$G2+*bAX=0RgQ zo9^QsA*~lAT~*L?6#7H^Y*a^$|FG@rKByl0KfO*n=f#iq?iqCOc*egXxv?qP$aQly z`$sMeibJ|l8Oy{FYkpiRwwe3rytrlDH!I)K^lC(?-m5k>X6iR4N*6bBO`UA2NuW}X^d;hAU)Y*^AaC5`E%v48(XX{OBW{{OP?ti z)@SLH%1!gentJP`9%BhUYr~WBB z(FQwe{6BhT!u?}j`1ps5SO3RXAAILqp<%9S6MKB>1*K~@M`*@0lz8{Pt;$Z zs3TSVSO>H3K`P_&xpAU8(+^26f1GSTbLpO!&ZLY?OWQLRkz#ZA>}-h}2Qx_U@nyrg z{li^Vp)UCi|C^fXVwprmvN4lNqRZmH1SSqaD&z7w{wdQ2|2>OpDRU5#o=u_us{dGe z*1obAb4l1W}{qUKuI)I%t_jH3n-Kn=V{;pkX z+(AtCps+K zGB=0ScKhU%uLG9_bFoaqA#Ao_{?f0)mqYw6i)~2MG{&0J>ynv(UBmBq`uZ`XvM#^) zmHdeg^P9CfN=FTvrzae)7QjO`Wy>Yikdpz8CcPlj~a3@fWnYApBYb83gtmg&_==SO9KC|y(PGQdBDJrK0t>5WCz80ntp z&0SNTz5MWVk(@@@e8>9RS>u1`gLVJa-tqtOGn=ka-j3M+w`c#?-&jX0x&D0eNc+Y2 zc|8Q#bvTk;#~BCj0Hm;tG0_-d%Y1!4>1uEx_|ChZ_?Ls%@O}kIU;H?DEqDWX9k>(x z68IRn5_}v~xhFu@9e)qF3OoSTg3o|4(2f81pPzZF#$V%kJfXA3|BQka3)(yWhZpUC zsH4Wev-f{bhX$v;`#+VjdZ*9I*?keF+N?FKk=Pi!4!;uA?ffLY4#uWzqao>~R~@Tw z1SA8Mlg=rxOYf80U(-&`zx(3+zx}QHf0n;5&i^~w{_o!rq-3da5JIi4`I2#X|5qOD zEjoJt7aspbVu&!(g89pOV3q`vR2t7DQ@QaUM5N2B^v^o}*#)l)_vTGo-Z8$~?w*$G=Dyk#m^b{l;;X#`6I&>!GA^IvpXfID z?^)E3#0(_A$Pemw{mPZgKND!*-Y(~>X*}lzwtAE%E@7qx^A{hj@Vl;W#%GG9GR>VP za<;GCy?M6O`93cN?Kbz-4&}Amy02D3*#{t%b@`o+6CIXqR>wc94m*Bd4K_5*eYN3? zv(W+M)RwRI3QX;yyvn-#;+LW!e=7gnLFtTl^Yjk!)!H|1`9ABUKwtJ4D~|sGZ!X}+ z7vAOMU~WHFRV8C}W_>?QzkSLmzsu8}c`%qVH$a*Pl?XyIJ`wZ4^=n<=SB-O>0_6wA zgSNfO`gBt=olvsY)V=UFiZaUY@;DtNDXfE8`y?Ga-t%a+*Oo8%YQXdFr6@s=FZgZ8 z^XKvf?H))n5a04Uwghd+7aW;=Zs`l^2teaC6zU7{j*nQ$lRcZf6fA}=CSGUbGeGVC zutENC@Dh`Mi1By&(^A;)QM+p2t%+g3=Q7Hv-Pxf0o;jdemH)C3oXh(na2{9-R)AYU z^7yxb^T9{K1>g@sm6IPt8RG{n2KV!h59R+HyaKdm`c0f=QJNs1t%x2J(Mpjw3rd=} zT-s>!?)tQYgx4VT$*qq%Bip6|gg>GU^=S#H^RlI&zON$QE OJql9R9}m`m>hm&? zyv7G4kMRL5uVu79ni$9H40v1&>0V+$R@SeRZr80y_KZ?W?e_N9QNQ?-kI2;b{umqt zimx+3);*s+zws3>1Z#QM7{ox0!Dd8-9Yx?;`@r$CZ_vFVTE`}1ucJ1*)w8XW{T2DQA~^)8ZK2MdWqh9<11E%kK+ zsL~CfzBjZH91b>u=rAMgc$!E%6QEJhw5&{P$z#{6h*`UMWoG5tNl{+yaCc?e$$)BS z6R38s2gMUQ8}wacCQ>`=v+YQy>^c+4o-KxT>ITZIoo|3=gFgSIOWy=1gBrtW;ElXb z2mch*m}~>#MfaILyy&hp;A48gMR?415555>&o@0m?2sNc^wB?}Ju1NAl+6p)nd@ zNOP@-Z;cgUk&5^RSrHbf$Xf_4hekqnF50rK>u&fwNPV(vP{gc9y?7U)rzT({ja-qb zuQ@EfB~PCHGr?j|@?_o`d6MRj<(;&kAJPifj|+o-jLzzt_N;cziFjIz)b?x@;922( z>WP5pnBNbKf-rkAT=kzXvi$=ly};YH&1&%=`&p9asU% zwk`+PfNMe7Qk@^K18)KA!F$2=;EzD&j{g+c0R95p2>vT5yY~i|1m6Lhzz;y#F{}T& z=UxOYgcbzP!WGa6NOrOcnhGgiHdAp|1kZ|B*^=P>N^lmW^m6DDNNvQRrNR5QNcVUv zAm)+TpE+N96mbfDEttR9_`+vS5BOP|;2vpHLuOM7HL!bGP0sfqm2vspUbc7sUbeig zyDxRo@vv7F6T&=TOA7A`^H7;s6N3%qbLW71Q5l!d@jx+|ErRip@_0C&{WPj+LP3vw zU)Y^n$`&ZVYc{a{7Cz$mE{&UmtM>U%cK@t?yZtlvCFoluD;x1t7PQ7V89T|E$ow(i zP4?}+MfyL$?7@}S@)ODOsUgQ^nlPBMkg@T-wE_~3K(fj1(_7NbCJJqb9)|WoVLs*s zd{lsR-RzGoA7cz3uD+^3pi%N@{GA*#JS+6EVE#%^f1Z=0Isf}?W0!w6>-=-g6$Q!I zg`u>0(6uSOcOPS{jy1;CCNNW0_cRxEW~s6+zw=R%TdTUKbi^jPhSQC&S02=>d7!<` z2=JAF4|m6!E5~_HVq+6o%sE^8&nc`9w|D**(4Y~~G3LL^=jL8}=YOl8t)jt#h&@MW z&gTvZj{sZQfZi7lbbRt@*sz^Co;l~*dY_s#rdIDFS$z!adX&AObeu8r#mh*rH@^m; z^~?DO+laS%5y|S8=BM;VVLW9dTkS*ogW6wdj%hz4<dlvCHCtG*UhNuoJ=SWumVVTSe>ZkxE zo62k*ZO?z5cfJY9km$2HmqII`CTKf!TtUV}b%lanjfXCVWOL+et%S6H%|Jf19pb;&YyAc*G@e_0gQAo#4g{Y_FLm}Z?Um1) zJY&kVigItllcm3l*xh~h^8i$1zVA7#_r%`~qJf(ktgi=c?dMr-{w#R^rvQf&r+D|- zmFnPqYk;$Ye7B-I$`=dbuMO(^N`R*Y_`M+gt>9hzZfsQ0g3`5^x< zgZ$bztNijH{{MpbYlHYlgZDFo^r=BTvx4-m1o&@3K2JI=1JhPedMhCu9Sx_`o(pC$ zk5PXlR}oLy;dfP-zJ{vI#%CWW)z0)>OWDH5`Jft_HKy0r=fADnrnjRVKa^)q=$Xf6 zuX%|lYW~X>FN12KFJk_OzV*_fUy(T98=$4m8_XKc$?B5oajWL@(Z#K+mL}^P*$@_c zqfNRUTKfTjv%E2(xUy;bXl(hE{Jas*UKWS*Mm(Fh3`c%gP;Zr)hxr$xu8d6!%1qCd z8I00Iy!^{YSH`9VWiHN@(K;9L@-O^c8JiZAnW1wF+vmrOEol29&6T(Lg7UFkdEIwK z+WPP!GI!-|zM%YS?P+ZLx_>g|Te+ZeWo@3IY&_Rr-QPsK(4|hOJ)36BXzV{vKxy!B za=+aq#n9eECR6(u`4aLCPxLQ`+3(BnrMWKiLuT&#b6tj^R==+nWnO4*w-)qU5ZW7P zEPI*xBb_>>!qHa#lR^+>b+SX&-so-=yPCZ)bvDMv2R4S&Cug4;jBnifWu+@?^8{tr zrgpsitCGf z!UDsO+dStE8(cd!PtZDvL8PgUlm{Dd5^2gOFeii55ZF+z2Rr_G}VzBM) z`ti})2)<7w{pg0^gzMY*?JoTjjyJB+aa~Fv?_U&euVrn_vK}8!KBF*Q>Rz5 zS5i27dxN~4f!yT_s=Y-EkI|=N`hTWbot3l*s$cO>w@9&VzefC3ZKO@1Fn1R%g6h=$ ztjbMY*0C!OUZ{&Xr88XBG+E?G@bvrMJb%t z1J3#z#v|yJ)hvCNL+iGJixU=jY!1oa6U)*AX*>UH8?pLO>YdOe%5|ut(eT-R4x-a} z2!9{E6PXDtmVOqZbGdN4NN3aXevqMSu;y0qbRKV>=YH!Xm?oMQHfU1V(2vEk_fLL~38?%pY%P8Rd3&26+Umg;MiccvX$*QEU{T$9osBr9ou8T!CO4GX{f1rGjlzDVoO|!Prgq~qltDz9r~?B;$Ix=|OT07mVmN>1Z}RE2drlP`Q)*5X zG<6uR8guNZqj#!d-Lh;?4GGnWTdHBHf%>4@X-9-MYENnj=gbf*dm1jLN#cftptQL=|aWNfvWlQP?*hWf2t+?Lo}%k$q{6hp9nL zgjRO$01v%$;r&I$YdXI8&)FG$2N&cn{PM~EIUlboSblZ6|HQ<{cD(w-H$Pi{GB!Q7 z|H6B@KUnhF)GHNJoBn(6mQTf)Ia@0-J4*9+&;GPbIdCa>RcoH#{Qln`m|0=hKQWNC z!#y@@!#j(1Un%|Q)aTD`kDfW+w4v>(rqa#M$bmyo{cgLmeRW{M$FpYm3da-W&f8x& z0nLKxvau(Eo?AGHIeD_NCo>0YuLwR+p^ze1#Ifrt(TcT2#Y;+-Fe_7rvIeo7wS(yA zX#bP}I_Nou6?Iv{Lq2$0&05=B9YEWMekRLTn0AN-P|#J@A{QJ}x~7y8++mAT5@Rw| z@Q22sG9U6Nxk<0GsfFs1h&|K+JVrkSo|br>`a#cB7|RvrMHFKBr(Uw zl5-@k@UiBtzD8d*9q>KoTQAp`O~3WAt@psmrLqha^n)4xjBMH^@f9F@n1~ujPf^Cu z1X8hoxc8RIqmNGBB-e08_V!a4+g72m#M~*saoB2`Xc84k`hJPumRK&aTH=EeACjm` zG$d}7*dy^#;3Rrn;NPL;}jK9&ZX=lbcdYSfRoToq2>!3ASPn#8u z^5_H5<0%vLR4N9}qQ$`Zh^$7XR0mux@nJd(I!OC~-=*IJ!;-UI&T=Kai#`PZNxBT& zOIH;?y#RZey+d~b$L>D*2U4BLHo7PZt&wf=(v$RGXdorBqSlVYO|go)+z#9IG|?@n z%JQ6^2HUVasx`un?b_|0)?&DE-3)s1h+%8%Ad2nU;Mif|y42~0ZO1f16zp+5(Mk28 zEh6lZ7WQn1YIVa(4rq;W%QHHKR%v&}3{yBk;dB{LLCFE;>z)xZOvCFb_i!dcaZe1+ z7VReV8n#8{t}8l2X3u)jvj&QWL{kF+Vd_0WBWeu|C7jb5g=@zhHd-g*o}-(Cj2hjF z#`S2LwxI3_6TXN_8!^$tUW;&C*dJ1wvR7@j+fFBZw=LZqR*HQcc5v8%N;}r$7|{;z zRXI0nx6BteC@kn? zx7}3wC`~t$^_JixeXZ}r;oYm_b%)++Tlw0>+HX%C`+@-Ake_bp%{*%iWKZ&%~jNE(TX9o*6g%-Rh7EHhP*OlHTd*KJ4?D*a4-;jvD#}$T zOIQn=@p>DHr7y*I8$Y743XSBB{D^C1B}AnPX@5AP4(=bd(sp9DBln=DmYb$353H*? z$g9&OB6vF%DKvX%LSbW(nz&Qd#HFe-r=+-e5z#jlnlL1prkZH9Lb+*IH9O7$Qj&K* zi1dqo@D0qF`iTGURq zl$y==AvIxC2iL{8P9EfJ^b+N0<`}+a;gbg`1N`W1H1*>kDp+;uS4JU@0csxjmC)CT zpTKMnR`9n2umfBdeGU9>R4z4m@TcTs(x)CoK$mlQycQmW;RnyOu?i1|k+nM%lbG(k zU)oNsIsglXDI;B4QqNAHkZxdK@%Jm&3M+mh+d;;>sRJgjdxC zjKDHcB4+hTNzOL=or(eXIE%yQ&!joDM74@5pgblnV%bN-JGR6=O_ohmcu4Tp%XjSM5Nh|8#A5K!MWx={dKuZ TBcLY!&!}P9UAq3eeA)j4ZC9R* literal 0 HcmV?d00001 diff --git a/Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/obj/Debug/SecuritySystem_CS.Form1.resources b/Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/obj/Debug/SecuritySystem_CS.Form1.resources new file mode 100644 index 0000000000000000000000000000000000000000..06c24d06c1cab750788146ce052b37770f3fa530 GIT binary patch literal 180 zcmX?i>is@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYis@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYNAP9a@@S9`x3BmQ5O07YYx#Uf$ zv`j7q&al_L0*lHN!-#anY;4i3CO`YMNM_1@TYhr{P z3vOcNezJ{`$>+j??J()cNI19VR!Oi8Ubs*npiaZZ_)6#!FbHb3Ad1?Js=H49aJ{I| zeDa9@=iAo@4OZ1^6E-7;n4rTMcNVkeXQXEi){#3mWSA*!3Yd^bcd;)X8=DXOcZZAp zM4FT|TLckjgKD!LyT40I-gzEoTR#|&n-9h=_(#~y2nvzI*3!Bb=+2B(nF9HAX%Frc vI*iHSwa|<7O>>9eH*P7_wxqeT@@tZ({NvUwChwk8`Z^9!L8(0R-}N literal 0 HcmV?d00001 diff --git a/Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/obj/Debug/SecuritySystem_CS.exe b/Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/obj/Debug/SecuritySystem_CS.exe new file mode 100644 index 0000000000000000000000000000000000000000..b02c86263eccb483147e51be622d16140f693a1a GIT binary patch literal 24576 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 literal 0 HcmV?d00001 diff --git a/Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/obj/Debug/SecuritySystem_CS.pdb b/Chapter06(ExternalDevices)/SecuritySystem_CS/SecuritySystem_CS/obj/Debug/SecuritySystem_CS.pdb new file mode 100644 index 0000000000000000000000000000000000000000..5191abeba46f1e619745c98272900c33f706cb0a GIT binary patch literal 28160 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 OJql9R9}m`m>hm&? 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 GN%0>~@msh6 literal 0 HcmV?d00001 diff --git a/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/obj/Debug/FingerPrintReader_CS.csproj.GenerateResource.Cache b/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/obj/Debug/FingerPrintReader_CS.csproj.GenerateResource.Cache new file mode 100644 index 0000000000000000000000000000000000000000..7ae94dda769093fb5f12585a4357a6ac6c23b967 GIT binary patch literal 893 zcma)4-D(p-6y7zv+ho&XdLgCMiy&SIjYDE7dJ_awqNOcVTS_l_Gub&?$4q9HnOSMX z2k@eABK8S<0Kr%B9rT<_sV+ zV8`4|U9Wor)=8s>PgtM6UUyU~Us@PyD81#X*F7vJN@ja7KQ>d)!%2TD-_D=rgMrxY z^DQ1znn$(l>!$q*emYddOlH5C5Z4&MDWj}OL!pNH(ZQ4 z6|wZYv(1s272JaD5b4MWIJD-y6kwaQa3nuKgw1uy30Eb!AZRp#IBqxVa_#=%dRU`* z_ZI(;*Uz4(q$+JAwqk+=p+gZ>mXPLk)Kh@<=*}4$W=flZW9ZRE(!}j_Z0u}M%{z3t z>PQQN7E#9(4eHIh?fxb%RnAj0+v?hQw{~spoF2kvj-dGrHWt(#eUVMvlI?JE>ec^@yof2sCX={UWPY+HqbSH(SevxNRwDnb!lsTQr)wzNI$CA&M@hGsV<$rkDp^f5g9 z6oMc=j2E9k6HzY~6ZmGB%zWQ`F*Xdt_)tejeYQ3gj61~VOt4U*vxLw94X~Jrl05`2 z2#cFlRMxj-I|-Euhh_|kSbKRX)S}+vZEdd zMi=0)s0Sf%h<$LdKLtIq9rCLm&ODv`mdla;d zoT(tC;osJ*YRF$R9JH`68P9&ZwA3bZ%z+m*slx*3a<(7=a7!2Zen$d>$)$pi&bACJOyW;B~YgJdsfKjL-Nxh=h(^A&9 UvG@M?j9*tOdq|!RJ1?ukC;5e}YXATM literal 0 HcmV?d00001 diff --git a/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/obj/Debug/FingerPrintReader_CS.exe b/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/obj/Debug/FingerPrintReader_CS.exe new file mode 100644 index 0000000000000000000000000000000000000000..1323081e5ffe6fe7cf429e3f71f96baa50494b30 GIT binary patch literal 45056 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 literal 0 HcmV?d00001 diff --git a/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/obj/Debug/FingerPrintReader_CS.pdb b/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/obj/Debug/FingerPrintReader_CS.pdb new file mode 100644 index 0000000000000000000000000000000000000000..b70cd120da955d79d0a9626627b6f788bfddd550 GIT binary patch literal 50688 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 D@t44! literal 0 HcmV?d00001 diff --git a/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/obj/Debug/Interop.GrFingerXLib.dll b/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/obj/Debug/Interop.GrFingerXLib.dll new file mode 100644 index 0000000000000000000000000000000000000000..66c46bc76b58213d7e45fd63a63e13618d7d9ed2 GIT binary patch literal 15360 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 Iw_FDP17OSVxc~qF literal 0 HcmV?d00001 diff --git a/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/obj/Debug/TempPE/Properties.Resources.Designer.cs.dll b/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/obj/Debug/TempPE/Properties.Resources.Designer.cs.dll new file mode 100644 index 0000000000000000000000000000000000000000..17e70491393f3dd38d46fb3e073360114e9affb6 GIT binary patch literal 4608 zcmeHKU2Ggz6+U-%y}Q}iCc7meRiktqH^_15)NPZdL9|`lYbS1P$MM>3fk@8m?A^^Y zvoq6~*(8ptV1$H(gisL@f(N9k52#2L6seFFgs8*=d8w#CeL_Nc=tExkdFVq`p@i?; znb}=$Dku_f<*w(<`Mc+ybMCq4j+egj5@m=ei|5WAqBrs8QBm;UgKdaM@Bh^(y|L?^ zu{XuyJ7a4X>`?auuN9bW-7;O*i}bqGgO01)u3kM;)7xG{8Y3gc2NKgOb3}_GLssi^ zz~XU}M#pxG0#OlkF6RC12;MrL3LXYJURvxoFy%kLX&VptJP;Sc+N1t@?}Ut1=w;Y_ zhVcqfffF$}&Jzs}@;(Wz!(N|W0rcrU+KA+p2=oWL03cJbCVqobLnk_K1Yux-QodDy z@J04Oc3>O|eL;+a-yKq#Sz=}l=sVIh+S}f+aSv#Jy`zYnv zmZ06R1#Q>@%odMQZt@Um+e}RIT4Ru73rjQsRxVhFb*1THB5X!Oa3!`zU3*9;>|s`H zZzF_*xrq@>h``jgSu%N0n-~RW682|mPtS-XJDlrFj~G+N@u?G!oB)CRIe;%=`SEK+ z|HRvef$>@t*lsIi4F}nI5%2N!8r=fUTQq)ZeW8l?hoG+@@bMYPtApkN6XMyuuLv#^ z`ba!V`{KRfc`&UWBu{w+ABpw2L@-ai5wnu9E<#8=&rv`ZL4Aj|aKNt9j{$GdpJ zS9|CoI*IHkO6;L8gW3h(b4dR0;YW!+z}h8xQOwec&hx&pKP$@6Kc}eg6^ddXs8o<|*QuVF7bT^Cge>|q z8K~POVbDFaf#{CXk7$*Oxq!xy!Wa%w9x#X8X1AfXW8B7uaJ1M6El zx+dJ9An_P66SioAeYGTIz8%e+)8?8DK)%I;i z1~nO6vavxFGgOSL(lM_nES!$eo$8%PQZkX%AgbGr9c}fbz5V+5Jx_BviyOY`wY$sH zDT$&mBiUd{&t94r+ibaB7}-{cKrP*&1AXEN_5%eU5;Id{2eg{%Z;WXatv*~wj29TyUxdr^9`17}hmi?!H zdG^Lv53RqoLWS#B&u!d$?B=&Jx$+2}QU*;I-KjjnpoHEo%B8~VPi=m!^j`6c%-fqS zuoR%gU@s;OGk=(=;jAu1VMy1+=x9aIqurfIyUCj8IiZ1@({o$S7VldlJ#jM~+d&h_ z^VN$VE;?>d=zrRQ1341q2TKoUbt)gvvGwxtd_GeiDUWE`JUj&Nz$o0!YX{1Ehu}l$ ziGoP_;&XzYS+cFb3%zD!Y}g@+sTOq_wr9jU2!E1J)$MgDqlUBW$a$Q%q&~eM|9ICw ztUQbx7APnV~$BH!6W2l+x=)Al_Zm_CYr?usRSF2gkx!R3&nx^YA)D)1M^^&Z`i zrQdNxo3ma}b(|&Bc1iV9DOEdW?K_7_uk=qFz=irA*-x~+QxMoxeC#1 zeOJkA8sAwPsLf5lIaFc|cikCU2E70{51hwuvVXtLH}K%#??xUdm>stk^Qw3RteU7^ zJ|PZjcL67(iAv}3fSR=isR?cfxrtL_L+UCy(d*e^_$uI2l$?Op$5^@rw**aff5&iR zA_w#ZcqF>|Rduc`WyjyKjt<=^>~v3e1G)h`>iIH-Q`&p*eMpC)&(TCm*M;v6@?}yR zG=1W8ZXip1_HA?zS6MR90k|hLV2{62i6&GWi;%X|DzmDCY^g|EbO9caDz`}abSB|* z4`QFv%ro`B_wAUVHcHg?Ow_pSaP=W#ARwL_2p PXZ#0$T>gK2>N4;zMZ&v? literal 0 HcmV?d00001 diff --git a/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/obj/FingerPrintReader_CS.csproj.FileList.txt b/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/obj/FingerPrintReader_CS.csproj.FileList.txt new file mode 100644 index 0000000..49ab7fc --- /dev/null +++ b/Chapter03(Fingerprint)/FingerPrintReader_CS/FingerPrintReader_CS/obj/FingerPrintReader_CS.csproj.FileList.txt @@ -0,0 +1,14 @@ +obj\Debug\ResolveAssemblyReference.cache +obj\Debug\Interop.GrFingerXLib.dll +obj\Debug\AxInterop.GrFingerXLib.dll +obj\Debug\FingerPrintReader_CS.csproj.ResolveComReference.cache +obj\Debug\FingerPrintReader_CS.Form1.resources +obj\Debug\FingerPrintReader_CS.Properties.Resources.resources +obj\Debug\FingerPrintReader_CS.csproj.GenerateResource.Cache +bin\Debug\FingerPrintReader_CS.exe +bin\Debug\FingerPrintReader_CS.pdb +bin\Debug\Interop.GrFingerXLib.dll +bin\Debug\AxInterop.GrFingerXLib.dll +obj\Debug\FingerPrintReader_CS.exe +obj\Debug\FingerPrintReader_CS.pdb +bin\Debug\GrFingerSample.mdb diff --git a/Chapter04(Infrared)/IRChat/IRChat.sln b/Chapter04(Infrared)/IRChat/IRChat.sln new file mode 100644 index 0000000..efffff6 --- /dev/null +++ b/Chapter04(Infrared)/IRChat/IRChat.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "IRChat", "IRChat\IRChat.vbproj", "{B5867A14-E45D-4CE6-93A9-995101CDBB98}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {B5867A14-E45D-4CE6-93A9-995101CDBB98}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B5867A14-E45D-4CE6-93A9-995101CDBB98}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B5867A14-E45D-4CE6-93A9-995101CDBB98}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {B5867A14-E45D-4CE6-93A9-995101CDBB98}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B5867A14-E45D-4CE6-93A9-995101CDBB98}.Release|Any CPU.Build.0 = Release|Any CPU + {B5867A14-E45D-4CE6-93A9-995101CDBB98}.Release|Any CPU.Deploy.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Chapter04(Infrared)/IRChat/IRChat.suo b/Chapter04(Infrared)/IRChat/IRChat.suo new file mode 100644 index 0000000000000000000000000000000000000000..d03d8d0b3ff0d33e84e3933f3fc36f682ae72b41 GIT binary patch literal 17408 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 _ +Partial Public Class Form1 + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + private mainMenu1 As System.Windows.Forms.MainMenu + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.mainMenu1 = New System.Windows.Forms.MainMenu + Me.mnuSend = New System.Windows.Forms.MenuItem + Me.txtMessage = New System.Windows.Forms.TextBox + Me.txtMessagesArchive = New System.Windows.Forms.TextBox + Me.StatusBar1 = New System.Windows.Forms.StatusBar + Me.SuspendLayout() + ' + 'mainMenu1 + ' + Me.mainMenu1.MenuItems.Add(Me.mnuSend) + ' + 'mnuSend + ' + Me.mnuSend.Text = "Send" + ' + 'txtMessage + ' + Me.txtMessage.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ + Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.txtMessage.Location = New System.Drawing.Point(3, 3) + Me.txtMessage.Name = "txtMessage" + Me.txtMessage.Size = New System.Drawing.Size(234, 21) + Me.txtMessage.TabIndex = 3 + ' + 'txtMessagesArchive + ' + Me.txtMessagesArchive.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ + Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.txtMessagesArchive.Location = New System.Drawing.Point(3, 30) + Me.txtMessagesArchive.Multiline = True + Me.txtMessagesArchive.Name = "txtMessagesArchive" + Me.txtMessagesArchive.ScrollBars = System.Windows.Forms.ScrollBars.Vertical + Me.txtMessagesArchive.Size = New System.Drawing.Size(234, 210) + Me.txtMessagesArchive.TabIndex = 4 + ' + 'StatusBar1 + ' + Me.StatusBar1.Location = New System.Drawing.Point(0, 246) + Me.StatusBar1.Name = "StatusBar1" + Me.StatusBar1.Size = New System.Drawing.Size(240, 22) + Me.StatusBar1.Text = "StatusBar1" + ' + 'Form1 + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.AutoScroll = True + Me.ClientSize = New System.Drawing.Size(240, 268) + Me.Controls.Add(Me.StatusBar1) + Me.Controls.Add(Me.txtMessage) + Me.Controls.Add(Me.txtMessagesArchive) + Me.Menu = Me.mainMenu1 + Me.Name = "Form1" + Me.Text = "Form1" + Me.ResumeLayout(False) + + End Sub + Friend WithEvents txtMessage As System.Windows.Forms.TextBox + Friend WithEvents txtMessagesArchive As System.Windows.Forms.TextBox + Friend WithEvents mnuSend As System.Windows.Forms.MenuItem + Friend WithEvents StatusBar1 As System.Windows.Forms.StatusBar + +End Class diff --git a/Chapter04(Infrared)/IRChat/IRChat/Form1.resx b/Chapter04(Infrared)/IRChat/IRChat/Form1.resx new file mode 100644 index 0000000..20d2efa --- /dev/null +++ b/Chapter04(Infrared)/IRChat/IRChat/Form1.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + Pocket_PC + + + True + + \ No newline at end of file diff --git a/Chapter04(Infrared)/IRChat/IRChat/Form1.vb b/Chapter04(Infrared)/IRChat/IRChat/Form1.vb new file mode 100644 index 0000000..0dd72a6 --- /dev/null +++ b/Chapter04(Infrared)/IRChat/IRChat/Form1.vb @@ -0,0 +1,129 @@ +Imports System.Net +Imports System.IO +Imports System.Net.Sockets + +Public Class Form1 + Inherits System.Windows.Forms.Form + + '---define the constants--- + Const MAX_MESSAGE_SIZE As Integer = 1024 + Const MAX_TRIES As Integer = 3 + + Private ServiceName As String = "default" + + '---SEND menu item--- + Private Sub mnuSend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuSend.Click + mnuSend.Enabled = False + sendMessage(MAX_TRIES, txtMessage.Text) + mnuSend.Enabled = True + txtMessage.Text = String.Empty + txtMessage.Focus() + End Sub + + Private Sub SendMessage(ByVal NumRetries As Integer, ByVal str As String) + + Dim client As IrDAClient = Nothing + Dim CurrentTries As Integer = 0 + + '---try to establish a connection--- + Do + Try + client = New IrDAClient(ServiceName) + Catch se As Exception + If (CurrentTries >= NumRetries) Then + Throw se + End If + End Try + CurrentTries = CurrentTries + 1 + Loop While client Is Nothing And CurrentTries < NumRetries + + '---timeout occurred--- + If (client Is Nothing) Then + StatusBar1.BeginInvoke( _ + New myDelegate(AddressOf UpdateStatus), New Object() _ + {"Error establishing contact"}) + Return + End If + + '---send the message over a stream object--- + Dim stream As System.IO.Stream = Nothing + Try + stream = client.GetStream() + stream.Write(System.Text.ASCIIEncoding.ASCII.GetBytes(str), 0, str.Length) + '---update the status bar--- + StatusBar1.BeginInvoke( _ + New myDelegate(AddressOf UpdateStatus), New Object() _ + {"Message sent!"}) + '---display the message that was sent--- + txtMessagesArchive.Text = str & vbCrLf & txtMessagesArchive.Text + Catch e As Exception + StatusBar1.BeginInvoke( _ + New myDelegate(AddressOf UpdateStatus), New Object() _ + {"Error sending message."}) + Finally + If (Not stream Is Nothing) Then stream.Close() + If (Not client Is Nothing) Then client.Close() + End Try + End Sub + + Private Function ReceiveMessage() As String + Dim bytesRead As Integer = 0 + Dim listener As IrDAListener = New IrDAListener(ServiceName) + Dim client As IrDAClient = Nothing + Dim stream As System.IO.Stream = Nothing + Dim Buffer(MAX_MESSAGE_SIZE - 1) As Byte + Dim str As String = String.Empty + Try + listener.Start() + client = listener.AcceptIrDAClient() '---blocking call--- + stream = client.GetStream() + bytesRead = stream.Read(Buffer, 0, Buffer.Length) + '---display the received message--- + str = ">" & System.Text.ASCIIEncoding.ASCII.GetString(Buffer, 0, bytesRead) + Catch ex As SocketException + '---ignore error--- + Catch e As Exception + StatusBar1.BeginInvoke( _ + New myDelegate(AddressOf UpdateStatus), New Object() _ + {e.ToString}) + Finally + If (Not stream Is Nothing) Then stream.Close() + If (Not client Is Nothing) Then client.Close() + listener.Stop() + End Try + Return str + End Function + + Public Sub ReceiveLoop() + Dim strReceived As String + strReceived = ReceiveMessage() + '---keep on listening for new message + While True + If strReceived <> String.Empty Then + txtMessagesArchive.BeginInvoke( _ + New myDelegate(AddressOf UpdateTextBox), New Object() {strReceived}) + End If + strReceived = ReceiveMessage() + End While + End Sub + + Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load + txtMessage.Focus() + '---receive incoming messages as a separate thread--- + Dim t1 As System.Threading.Thread + t1 = New Threading.Thread(AddressOf receiveLoop) + t1.Start() + End Sub + + Private Delegate Sub myDelegate(ByVal str As String) + Private Sub UpdateTextBox(ByVal str As String) + '---delegate to update the textbox control + txtMessagesArchive.Text = str & vbCrLf & txtMessagesArchive.Text + End Sub + + Private Sub UpdateStatus(ByVal str As String) + '---delegate to update the statusbar control + StatusBar1.Text = str + End Sub + +End Class diff --git a/Chapter04(Infrared)/IRChat/IRChat/IRChat.vbproj b/Chapter04(Infrared)/IRChat/IRChat/IRChat.vbproj new file mode 100644 index 0000000..75e5621 --- /dev/null +++ b/Chapter04(Infrared)/IRChat/IRChat/IRChat.vbproj @@ -0,0 +1,109 @@ + + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {B5867A14-E45D-4CE6-93A9-995101CDBB98} + WinExe + IRChat.Form1 + IRChat + IRChat + {68B1623D-7FB9-47D8-8664-7ECEA3297D4F};{F184B08F-C81C-45F6-A57F-5ABD9991F28F} + PocketPC + 4118C335-430C-497f-BE48-11C3316B135E + 5.01 + WindowsForms + IRChat + v2.0 + + + + + true + full + true + true + bin\Debug\ + $(PlatformFamilyName)=TRUE + IRChat.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + 512 + Off + true + true + + + pdbonly + false + true + true + bin\Release\ + $(PlatformFamilyName)=TRUE + IRChat.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + 512 + Off + true + true + + + + + + + + + + + + + + + + + + + Form + + + Form1.vb + Form + + + + True + True + Resources.resx + + + + + Designer + Form1.vb + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + + + + + + + + + \ No newline at end of file diff --git a/Chapter04(Infrared)/IRChat/IRChat/IRChat.vbproj.user b/Chapter04(Infrared)/IRChat/IRChat/IRChat.vbproj.user new file mode 100644 index 0000000..e248a3d --- /dev/null +++ b/Chapter04(Infrared)/IRChat/IRChat/IRChat.vbproj.user @@ -0,0 +1,6 @@ + + + 4118C335-430C-497f-BE48-11C3316B135Ed6518ffb-710f-11d3-99f2-00105a0df099 + ShowAllFiles + + \ No newline at end of file diff --git a/Chapter04(Infrared)/IRChat/IRChat/My Project/AssemblyInfo.vb b/Chapter04(Infrared)/IRChat/IRChat/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..9a97271 --- /dev/null +++ b/Chapter04(Infrared)/IRChat/IRChat/My Project/AssemblyInfo.vb @@ -0,0 +1,36 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + diff --git a/Chapter04(Infrared)/IRChat/IRChat/My Project/Resources.Designer.vb b/Chapter04(Infrared)/IRChat/IRChat/My Project/Resources.Designer.vb new file mode 100644 index 0000000..d64c496 --- /dev/null +++ b/Chapter04(Infrared)/IRChat/IRChat/My Project/Resources.Designer.vb @@ -0,0 +1,59 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.42 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict Off +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the Strongly Typed Resource Builder + 'class via a tool like ResGen or Visual Studio.NET. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + '''