Commit 90014e71 by Tapio Haapala

Merge branch 'master' of gitlab.codecrew.fi:liv/moya-info-tools

Conflicts:
	PrintServer/moyaPrintServer/moyaPrintServer/obj/x86/Debug/DesignTimeResolveAssemblyReferencesInput.cache
	PrintServer/moyaPrintServer/moyaPrintServer/obj/x86/Debug/moyaPrintServer.csproj.FileListAbsolute.txt
2 parents 2cf09928 e442e589
Showing with 2073 additions and 103 deletions

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BarcodeScannerClient", "BarcodeScannerClient\BarcodeScannerClient.csproj", "{967BFEFE-7B3C-4EE9-80F1-EC6903E1ACB5}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x86 = Debug|x86
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{967BFEFE-7B3C-4EE9-80F1-EC6903E1ACB5}.Debug|x86.ActiveCfg = Debug|x86
{967BFEFE-7B3C-4EE9-80F1-EC6903E1ACB5}.Debug|x86.Build.0 = Debug|x86
{967BFEFE-7B3C-4EE9-80F1-EC6903E1ACB5}.Release|x86.ActiveCfg = Release|x86
{967BFEFE-7B3C-4EE9-80F1-EC6903E1ACB5}.Release|x86.Build.0 = Release|x86
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<ProductVersion>8.0.30703</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{967BFEFE-7B3C-4EE9-80F1-EC6903E1ACB5}</ProjectGuid>
<OutputType>WinExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>BarcodeScannerClient</RootNamespace>
<AssemblyName>BarcodeScannerClient</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<TargetFrameworkProfile>Client</TargetFrameworkProfile>
<FileAlignment>512</FileAlignment>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<PlatformTarget>x86</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
<PlatformTarget>x86</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Form1.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Form1.Designer.cs">
<DependentUpon>Form1.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="RestClient.cs" />
<Compile Include="Scanner.cs" />
<EmbeddedResource Include="Form1.resx">
<DependentUpon>Form1.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<None Include="app.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>
\ No newline at end of file
namespace BarcodeScannerClient
{
partial class Form1
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
this.label1 = new System.Windows.Forms.Label();
this.apiUrlTextBox = new System.Windows.Forms.TextBox();
this.label4 = new System.Windows.Forms.Label();
this.PortsComboBox = new System.Windows.Forms.ComboBox();
this.status = new System.Windows.Forms.TextBox();
this.SuspendLayout();
//
// 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(52, 13);
this.label1.TabIndex = 11;
this.label1.Text = "API URL:";
//
// apiUrlTextBox
//
this.apiUrlTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.apiUrlTextBox.Location = new System.Drawing.Point(15, 30);
this.apiUrlTextBox.Name = "apiUrlTextBox";
this.apiUrlTextBox.Size = new System.Drawing.Size(298, 20);
this.apiUrlTextBox.TabIndex = 10;
//
// label4
//
this.label4.AutoSize = true;
this.label4.Location = new System.Drawing.Point(12, 53);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(71, 13);
this.label4.TabIndex = 16;
this.label4.Text = "Scanner port:";
//
// PortsComboBox
//
this.PortsComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.PortsComboBox.FormattingEnabled = true;
this.PortsComboBox.Location = new System.Drawing.Point(15, 69);
this.PortsComboBox.Name = "PortsComboBox";
this.PortsComboBox.Size = new System.Drawing.Size(298, 21);
this.PortsComboBox.TabIndex = 15;
this.PortsComboBox.SelectedIndexChanged += new System.EventHandler(this.PortsComboBox_SelectedIndexChanged);
//
// status
//
this.status.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.status.Location = new System.Drawing.Point(15, 96);
this.status.Multiline = true;
this.status.Name = "status";
this.status.ReadOnly = true;
this.status.Size = new System.Drawing.Size(298, 183);
this.status.TabIndex = 17;
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(325, 291);
this.Controls.Add(this.status);
this.Controls.Add(this.label4);
this.Controls.Add(this.PortsComboBox);
this.Controls.Add(this.label1);
this.Controls.Add(this.apiUrlTextBox);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "Form1";
this.Text = "ScannerClient";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing);
this.Load += new System.EventHandler(this.Form1_Load);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Label label1;
private System.Windows.Forms.TextBox apiUrlTextBox;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.ComboBox PortsComboBox;
private System.Windows.Forms.TextBox status;
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;
using HttpUtils;
using System.Threading;
namespace BarcodeScannerClient
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
BarCodeScanner scanner = new BarCodeScanner();
private void Form1_Load(object sender, EventArgs e)
{
scanner.BarcodeReceived += new BarCodeScanner.Barcode(scanner_BarcodeReceived);
string[] ports = SerialPort.GetPortNames();
foreach (string port in ports)
{
PortsComboBox.Items.Add(port);
}
PortsComboBox.SelectedItem = Properties.Settings.Default.Port;
// apiKeyTextBox.Text = Properties.Settings.Default.ApiKey;
apiUrlTextBox.Text = Properties.Settings.Default.ApiURL;
}
string ret = "";
void scanner_BarcodeReceived(string data)
{
string url = apiUrlTextBox.Text.Replace("%", data);
RestClient client = new RestClient(url);
try
{
ret = client.MakeRequest();
}
catch (Exception e)
{
ret = e.Message;
}
setRet();
}
private void setRet()
{
if (this.InvokeRequired){
this.Invoke(new ThreadStart(setRet));
return;
}
status.Text = ret;
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
scanner.Close();
if (PortsComboBox.SelectedItem != null)
{
Properties.Settings.Default.Port = PortsComboBox.SelectedItem.ToString();
}
//Properties.Settings.Default.ApiKey = apiKeyTextBox.Text;
Properties.Settings.Default.ApiURL = apiUrlTextBox.Text;
Properties.Settings.Default.Save();
}
private void PortsComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
scanner.Close();
if (PortsComboBox.SelectedItem != null)
{
scanner.Port = PortsComboBox.SelectedItem.ToString();
}
scanner.Listen();
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAkAMDAQAAAAAABoBgAAlgAAACAgEAAAAAAA6AIAAP4GAAAQEBAAAAAAACgBAADmCQAAMDAAAAEA
CACoDgAADgsAACAgAAABAAgAqAgAALYZAAAQEAAAAQAIAGgFAABeIgAAMDAAAAEAIACoJQAAxicAACAg
AAABACAAqBAAAG5NAAAQEAAAAQAgAGgEAAAWXgAAKAAAADAAAABgAAAAAQAEAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAIAAAACAgACAAAAAgACAAICAAADAwMAAgICAAAAA/wAA/wAAAP//AP8A
AAD/AP8A//8AAP///wARERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER
EREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAEzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzA/t7e3t7e3t7e3t7e3t7e3t7e3t7e3
tzA/e3t7AAAAAAAAAAAAC3t7e3t7e3t7ezA/t7e4iIiIiIiIiIiIgLe3t7e3t7e3tzA/e3t493d3d3d3
d3d3gHt7e3t7e3t7ezA/t7e493d3d3d3AAB3gLe3t7e3t7e3tzA/e3t493d3d3d3d3d3gHt7e3t7e3t7
ezA/t7e4////////////gAAAAAAAB7e3tzA/e3t7gAAAAAAAAAAACIiIiIiIgHt7ezA/t7e3j3d3d3d3
d3d4B3d3d3d3gLe3tzA/e3t7j3iIiIiIiIh4B3d3AAB3gHt7ezA/t7e3j3Du7u7u7uh4B3d3d3d3gLe3
tzA/e3t7j3Du7u7u7uh4D///////gHt7ezA/t7e3j3Du7u7u7uh4AAAAAAAAB7e3tzA/e3t7j3Du7u7u
7uh4B3d3d3d4C3t7ezA/t7e3j3Dv/u7u7uh4CIiIiIh4B7e3tzA/e3t7j3Dv/u7u7uh4Du7u7uh4C3t7
ezA/t7e3j3Dv/u7u7uh4Du7u7uh4B7e3tzA/e3t7j3Du7u7u7uh4Du7u7uh4C3t7ezA/t7e3j3AAAAAA
AAh4Du7u7uh4B7e3tzA/e3t7j3d3d3d3d3d4D/7u7uh4C3t7ezA/t7e3j//////////4D/7u7uh4B7e3
tzA/e3t7eIiIiIiIiIiID/7u7uh4C3t7ezA/t7e3t7e3t7e3j3Du7u7u7uh4B7e3tzA/e3t7e3t7e3t7
j3AAAAAAAAh4C3t7ezA/t7e3t7e3t7e3j3d3d3d3d3d4B7e3tzA/e3t7e3t7e3t7j//////////4C3t7
ezA/t7e3t7e3t7e3uIiIiIiIiIiIt7e3tzA/e3t7e3t7e3t7e3t7e3t7e3t7e3t7ezA/t7e3t7e3t7e3
t7e3t7e3t7e3t7e3tzA//////////////////////////////wE3t7e3t7e3t7e3t7ezMzMzMzMzMzMz
MBE/e3t7e3t7e3t7e3swERERERERERERERET97e3t7e3t7e3t7MBERERERERERERERERP3t7e3t7e3t7
ezARERERERERERERERERE/e3t7e3t7e3swERERERERERERERERERET97e3t7e3t7MBERERERERERERER
ERERERP////////zAREREREREREREREREREREREzMzMzMzMwERERERERERERERERERERERERERERERER
ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER
ERERERERERERERERERERERERERERERERERH///////8AAP///////wAA////////AAD///////8AAAAA
AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAABAAAAAAAAAAMAAAAAAD///wAAgAAAf///AADAAAD///8AAOAAAf///wAA8AAD////
AAD4AAf///8AAPwAD////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAA
AAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAICAAIAAAACAAIAAgIAAAMDA
wACAgIAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////ABERERERERERERERERERERERERERERERERER
ERERERERERERERERERERERERERERERAAAAAAAAAAAAAAAAAAAAGDMzMzMzMzMzMzMzMzMzMwj7e3AAAA
AAAAt7e3t7e3MI97eIiIiIiIiAt7e3t7ezCPt7j3d3dwAHgHt7e3t7cwj3t4///////4C3t7e3t7MI+3
t4AAAAAACAAAAAC3tzCPe3uHd3d3d4CIiIiIC3swj7e3h4iIiIeAd3AAeAe3MI97e4cO7u7ngP////gL
ezCPt7eHDu7u54AAAAAIB7cwj3t7hw/u7ueAd3d3gHt7MI+3t4cP7u7ngIiIh4C3tzCPe3uHAAAAB4Du
7ueAe3swj7e3h3d3d3eA7u7ngLe3MI97e3iIiIiIj+7u54B7ezCPt7e3t7e3hw/u7ueAt7cwj3t7e3t7
e4cAAAAHgHt7MI+3t7e3t7eHd3d3d4C3tzCPe3t7e3t7eIiIiIiLe3swj7e3t7e3t7e3t7e3t7e3MI//
/////////////////zCHd3d3d3d3d4iIiIiIiIgBGPt7e3t7e3gRERERERERERGPt7e3t7eBERERERER
ERERGP/////4ERERERERERERERGIiIiIgRERERERERERERERERERERERERERERERERERERERERERERER
ERERERER////////////////gAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAP//wAH//+AD
///wB/////////////8oAAAAEAAAACAAAAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////ABER
EREREREREREREREREREQAAAAAAAAAYiIiIiIiIgBj4AAALe3uAGPiIiAe3t4AY+O7uAAALgBj47u4IiA
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
AxLhoi3L0XYc/5gxBf+aNAD/njgA/6I8AP+lPwD/qEIA/6pEAP+sRgD/rUcA/7FIAP+oSgD/IGIF/wtn
B/8LaAr/OV8I/65IAP+uRQD/qUIA/6c/AP/CeUz/1aF+/9mmgP/erof/47eO/+i8kv/xzqb//e3L///0
1P//8M3///DL///wyf//7sf//eW8//XUqf/xxpn/1KF7+igdFoAAAAAlAAAABAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAABMKRM3brmy3/nTcD/5s1AP+iPAD/pkAA/6lDAP+sRgD/rkgA/7FLAP+yTAD/tE4A/7ZP
AP+4TwD/OGEA/wBqAP8AaAD/AGgA/3FXAP/BTAD/rUcA/3MhAP+fXTn/2aSA/9mmgP/drIX/4rSL//HU
sP//9df/++7P//7x0P//9dL///DL///uxv//68P//+vB///uw//42q//xZZ04lQ8LkcAAAAMAAAAAQAA
AAAAAAAAAAAAAAAAAAAAAAAAYEgdGO+zQ+K4XBL/mzMA/6U/AP+pQwD/rUcA/7BKAP+yTAD/tU8A/7dR
AP+5UwD/u1UA/7xWAP/MVQD/TmYA/wBxAP8AbwD/AG4A/w1rAP9gXwD/uVEA/2MgAP94Qyf/1Z96/9ik
fP/fsIr/9eHC//743P/kwqL/4bWO/+rGof/rzar/++jD///txv//7sb//+zD/+rFnf+pfF+1TjgrLwAA
AAcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABz6NHb+eeOv+gOQD/pj8A/6tFAP+vSQD/skwA/7ZQ
AP+5UwD/vFYA/75YAP/BWwD/w1wA/8pdAP+SZAD/HHMA/wB2AP8AdQD/AHMA/wBzAP8DcAD/sV4A/3wv
AP9YKhP/0Jl0/+O7l//68db/9+zS/9uwjv/ovZP/9dOm/96vh//txZr/5buS/+jDnv/75L3/xJt49GFI
N6YAAAAqAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7L1YycVuH/+iOgD/rUcA/7FL
AP+1TwD/uFIA/7xWAP+/WQD/w10A/8ZgAP/JZAD/z2UA/8VoAP8ZegD/AH0A/wB7AP8AegD/AHkA/wB4
AP8AdwD/Zm8A/5E9AP88FAL/v45t//zqzf/448b/4bKL//XQo//wy6D/4bWN//XUp//rwpj/5r2Y/+rG
ov/DiGH/eTMJ5wAAAI4AAAAyAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACxkUou9b1Z+a9M
Bv+rRQD/skwA/7ZQAP+6VAD/vlgA/8NdAP/IYgD/zGYA/89pAP/RawD/3WwA/3B3AP8AgwD/AIIA/wCC
AP8AgQD/AH8A/wB+AP8AfAD/RHgA/6VQAP8xDwD/RiQR/29IMf+OX0P/wZVy/92wiP/ltIz//9ut/+i9
lf/sxKL/2raR/5h4Uv+NXjv/mz8G+hcIAKkAAABKAAAADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAHbuWRr5aRK/6tEAP+ySwD/t1EA/7xWAP/AWgD/xmAA/8xmAP/QagD/0mwA/9VvAP/XcQD/5HIA/5B7
AP8DiQD/AIgA/wCIAP8AhwD/AIYA/zKAAP92eQD/xXQA/71fAP8jDAD/FwUA/xoCAP8fBgD/Jw0B/z4f
D/9oRjH/j2RI/8KXd/+ynnD/ZGgx/2ViMf9+Z0L/oFEa/0UaAMQAAABfAAAAFQAAAAEAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAHqy3Sd1Ik2/61DAP+4UQD/vVcA/8JcAP/IYgD/zmgA/9FrAP/VbwD/2HIA/9t1
AP/feAD/53kA/9N8AP8oigD/AI8A/wCOAP8AjAD/RIYA/9R7AP/tdwD/43cA/9JvAP9aLQD/PhwA/yYQ
AP8XCgD/FwMA/xUAAP8PAAD/EwEA/yAQAv8xWRX/RGci/1xmLv9saDz/lVgi/2sqANgAAABvAAAAGwAA
AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHz0Xu/y3ko/7JJAP+9VwD/w10A/8ljAP/PaQD/020A/9dx
AP/bdQD/5ngA//J6AP/0fQD/kocA/1aOAP9XjgD/F5MA/z+PAP+GigD/8IIA/+yBAP/lfwD/4nwA/+B6
AP/idgD/0nAA/zZxAP8BYgD/BkwA/wkzAP8MGAD/DQUA/woAAP8dSAz/OGsc/0xmJv9eZzT/h10m/4M2
AOUAAAB5AAAAHwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH31IHVxm4c/7hQAP/BWwD/yWMA/89p
AP/TbQD/2HIA/+F2AP/qegD/toMA/3yNAv9TlAX/DJsE/7aNAP/WiwL/k5ED/6GQAv+gjwH//IgA/+2H
AP/rhQD/6YMA/+h/AP/QfgD/zHoA/xWDAP8AgQD/AIAA/wB6AP8AbwD/AVkA/wExAP8NSQf/KGoU/ztn
H/9aYCX/g1of/44+AewAAACBAAAAJAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH21YXaxWoW/75V
AP/HYQD/zmgA/9RuAP/YcwD/43cA/9Z+AP+bigL/DJ0K/xueCv95lgb/dJkJ/56XCf82oBD/W50L/76V
Av/mkgD/+I8A//SOAP/xiwD/7ogA/++FAP/HgwD/034A/0KCAP8AgwD/AH4A/wB5AP8AdgD/AHQA/wBw
AP8AZwH/FWYM/y5mF/9MYiH/c14g/59FAPIJBACGAAAAJQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAH22YzZyG4Y/8NaAP/NZwD/0mwA/9hyAP/gdgD/53sA/06VCP8IohH/AKcZ/2CeEf/8kAH/6ZUD/12k
F/99ohP/250K//+aBf//mgP//ZcA//uVAP/4kQD/9I4A//CLAP/xhgD/8oEA/8OAAP8ohAD/AIMA/wB+
AP8AeAD/AHQA/wZuAP8IaQD/EmQD/zNiD/8zZx7/aV8c/6VKAPMMBQCCAAAAIgAAAAEAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAH33pTYzXUc/8dfAP/RawD/1nAA/911AP/segD/fpAI/wCmGP8NqR7/Eask/xit
KP8nrSn/Ma4q/0ytKf/tpxz//6ke//+pH///qBz//6QV//+fC//+mQP/+5QA//eQAP/xiwD/7YcA//WB
AP+4gAD/C4UA/weBAP8CfAD/GnUA/41jAP+NXAD/ilUA/3JVA/8vZBb/YmQY/6FLAO4HAwB1AAAAHQAA
AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH35J7G1ocs/8tiAP/UbgD/23QA/+d4AP+SjQj/Cagb/w6r
I/8Vrir/GLEx/xm0Nv8Ytjr/GLg+/xS4Pv99tzz//7g8//+3PP//tjn//7Iy//+tJ///phn//54J//2W
AP/3kQD/8owA//OGAP/HgwD/AIkA/ySCAP9tdwD/VXMA/0VvAP8yagD/I2YA/wdlA/8cZhH/XWQU/5dI
AOUAAABmAAAAFwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD06amn4JxE/8xiAP/XcQD/4HcA/99+
AP8zohj/Ca0n/xewL/8btDb/Hrc9/yG6RP8jvUf/JL1K/yS/TP8pv03/tcNU//vGWv//xVf//8BO//+6
Qv//sjL//6of//+fC//9lgD/9pAA//aKAP/GhgD/J4sA/w6HAP8vfwD/HXsA/wB4AP8AdAD/AG0A/wBo
AP8KZgv/b2UM/4xBANgAAABSAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADy7LB47Lpo/9Bn
AP/ZcwD/4nkA/+eAAP9Koh3/D7Mx/x22Of8hukL/Jb5J/yfBT/8sw1T/LcVY/zLHW/8rxlr/KsZZ/3rK
Yv//1HX//89q///HXP//vUr//7Q2//+pHv//nQf/+pQA//OOAP/1hwD/yIQA/xyJAP8AhwD/AIAA/wB7
AP8AdQD/AHAA/wBqAP8BZgb/hmcG/281AL8AAAA7AAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAD277Q399uT/dVxA//bdAD/5nsA/+mCAP9WpSP/E7g7/yK7RP8mv03/KsRV/y7IXv84y2X/QM1p/zfO
a/87zmv/Ksxn/37VeP/w4I7//9yE///TdP//yWD//71I//+xMP//pRb//pkB//uQAP/ajAD/T44A/wCO
AP8JhwD/AIMA/wB+AP8AeAD/AHIA/wBsAP8DZgH/p2kC/kAfAJIAAAAlAAAAAgAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAADb1KIH+/K32+CPKf/dcQD/6nwA/2WfHf8Ttjn/IbtE/yfATv8rxVj/Mstk/zzP
bf9B03P/R9V4/2DXfP9O1nn/TdV3/0bTc/9N0XH/2+GR///gi///03L//8VZ//+4P///qyP//50I//+S
AP+kkgH/AJcA/ymNAP+ffgD/H4MA/yN8AP8JeQD/AHQA/wBtAP8zawD/t18A7AgEAFoAAAATAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9/fDhPHDcf/obwD/wYYH/xqyMv8cuUD/Jr9L/yvE
Vv8zzGX/QNFv/0vWef9n2YD/teCO/73mm/9k3of/XduC/0/Xe/+S5pv/9fO0///nm///2oL//81m//++
Sf//sC3//6IQ//2VAP/6jQD/dZEA/3eKAP/AfAD/GYQA/xp+AP9bcgD/BnYA/wBuAP+DcwD/ikYAvgAA
ADMAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+PXBIv7vs/KemiP/KaYh/xi2
Of8jvEb/KcJS/zDKYf8+0G//TtZ6/1/agf/Q3Ib//+mg/+Tysv935JX/f+Sa/5HopP/6/9r///7L///t
qP//3ov//9Fv///CUf//tDT//6QV//+VAP/+jgD/5IkA/++CAP90hAD/AIoA/wSCAP9RdAD/BnUA/xtz
AP/HdQD3MBoAbQAAABcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPr6
yo6v2YT/C60o/x23Pf8lvkv/LMZZ/zfNaP9K1Hb/W9qC/27fjP/N4I///uqk/9j1tv+P66X/zvbS//D8
6//+/+P////R/+btpv9n03P/u81o///DVP//tDb/1Kgc/6SfDf/RkwT/84gA//KBAP+2fwD/G4cA/wGE
AP8XewD/AHYA/4x+AP+hVgC/AAAALgAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAPTzwRf9+cbicMFW/xO1OP8nwE7/L8he/zzQbv9R13z/Zd6J/3jklv+K6aH/x+yn/7vz
s//e+sz/y/bL/5jsrf/l+9L///7P/5/ikv8ozmn/RMlg/8LBUP/qtDb/ObEw/wutJv9CoBL/6okA/+qC
AP/tegD/sHgA/wWEAP8AfQD/R34A/9h8AO8oFgBTAAAAEAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29stT7fGz/0W+TP8cv0z/Kstk/0TRcP9Y2H7/cN6J/4Xl
mP+S7an/pvS1/+D1uf///sz/x/e9/43spf/U97z//ve8/5jejP880XD/Kcph/yzCUf9KukL/k6oh/9yY
Bf/ekAL/74gA/+eBAP/hegD/53IA/1R5AP8TgQD/0o0A/X9HAIcAAAAbAAAAAwAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/vRhdrppf9Av1D/UrxJ/5+3
Pv98zmr/qc9s/6nchv+i6qT/wO+s/9nztf/W+cD/r/i9/73xsP//8rP//emf/3bagv9A0nL/Mspi/ybC
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
gP/owpv/9uPD//TgwP/87Mn///LN///zy///7sP/4LuU9G9RPmoAAAASAAAAAgAAAAAAAAAAAAAAAAAA
AACviToz35U0+KE6AP+qRAD/sUsA/7ZQAP+6VAD/v1kA/8haAP+WYgD/BXQA/wBzAP8AcgD/aGIA/3gp
AP+jb1H/8Myo//flx//qyKX/57yS/+jBmf/01rD/9ty1/7KOb+hINCh5AAAAGQAAAAIAAAAAAAAAAAAA
AAAAAAAAAAAAAeGzVoC8YBb/qkIA/7ROAP+7VQD/wlwA/8dhAP/PZgD/y2kA/yx6AP8AfwD/AH0A/wB8
AP8ueQD/gzoA/2E6J//RsJT/5r6Y//HFmf/40KT/8Maf/964lf+xckj+Rh0HxwAAAGkAAAAZAAAAAQAA
AAAAAAAAAAAAAAAAAAAAAAAB4axUr65JAf+1TwD/vVcA/8VfAP/NZwD/0mwA/9twAP/XcwD/HoUA/wCI
AP8AhgD/KYEA/5N6AP+ZTQD/GAQA/yoGAP9MJxr/bEY1/6N6Xv+zm3D/dHNB/4FcMP91LgDiAAAAewAA
ACEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAHdok/Rs0wA/79ZAP/IYgD/0WsA/9pxAP/qdQD/6HoA/6SD
AP9RiwD/Ho8A/2OJAP/RfwD/8HwA/8trAP+IRwD/GjwA/wcoAP8HDgD/DgAA/yRADv9CaSL/a2Uz/4pA
Ce4EAgCGAAAAJgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAd2eTeS6UAD/yWMA/9FsAP/fcwD/23sA/5iJ
Av9ukgT/V5YD/6KRBP+dkQL/2Y0A//mIAP/rhQD/54IA/8mCAP8ThgD/AH0A/wBxAP8AUAD/BkwE/ypq
GP9XYiX/kEoN9QoEAI0AAAAoAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAB3qBQ5sFXAP/RawD/4XMA/8WA
Af82mwz/C6QV/7SXBv+ZnQ3/eaMT/+ycB//+mAL/+5UA//aPAP/vigD/54QA/3qCAP8EgwD/AHwA/wJ2
AP8TagD/JGMJ/0BkHv+PTwz3DwcAigAAACYAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAHiq1vjyV8A/9lw
AP/iegD/WZgP/wCrIP8Urir/KrAu/yKyMv+wsCv//64p//+sI///phb//psG//iSAP/1igD/6IIA/zKE
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
Qf8AA0H/gAdE/+APQv8=
</value>
</data>
</root>
\ No newline at end of file
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace BarcodeScannerClient
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}
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("BarcodeScannerClient")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("BarcodeScannerClient")]
[assembly: AssemblyCopyright("Copyright © 2013")]
[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("a5b5081f-bd20-42cd-bfaf-0e6dc17f2aea")]
// 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:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.17929
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace BarcodeScannerClient.Properties
{
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// 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", "4.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()
{
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[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("BarcodeScannerClient.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture
{
get
{
return resourceCulture;
}
set
{
resourceCulture = value;
}
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
\ No newline at end of file
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.17929
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace BarcodeScannerClient.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.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.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string Port {
get {
return ((string)(this["Port"]));
}
set {
this["Port"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string ApiKey {
get {
return ((string)(this["ApiKey"]));
}
set {
this["ApiKey"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string ApiURL {
get {
return ((string)(this["ApiURL"]));
}
set {
this["ApiURL"] = value;
}
}
}
}
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="BarcodeScannerClient.Properties" GeneratedClassName="Settings">
<Profiles />
<Settings>
<Setting Name="Port" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="ApiKey" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="ApiURL" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
</Settings>
</SettingsFile>
\ No newline at end of file
using System;
using System.IO;
using System.Net;
using System.Text;
public enum HttpVerb
{
GET,
POST,
PUT,
DELETE
}
namespace HttpUtils
{
public class RestClient
{
public string EndPoint { get; set; }
public HttpVerb Method { get; set; }
public string ContentType { get; set; }
public string PostData { get; set; }
public RestClient()
{
EndPoint = "";
Method = HttpVerb.GET;
ContentType = "text/xml";
PostData = "";
}
public RestClient(string endpoint)
{
EndPoint = endpoint;
Method = HttpVerb.GET;
ContentType = "text/xml";
PostData = "";
}
public RestClient(string endpoint, HttpVerb method)
{
EndPoint = endpoint;
Method = method;
ContentType = "text/xml";
PostData = "";
}
public RestClient(string endpoint, HttpVerb method, string postData)
{
EndPoint = endpoint;
Method = method;
ContentType = "text/xml";
PostData = postData;
}
public string MakeRequest()
{
return MakeRequest("");
}
public string MakeRequest(string parameters)
{
var request = (HttpWebRequest)WebRequest.Create(EndPoint + parameters);
request.Method = Method.ToString();
request.ContentLength = 0;
request.ContentType = ContentType;
if (!string.IsNullOrEmpty(PostData) && Method == HttpVerb.POST)
{
var encoding = new UTF8Encoding();
var bytes = Encoding.GetEncoding("iso-8859-1").GetBytes(PostData);
request.ContentLength = bytes.Length;
using (var writeStream = request.GetRequestStream())
{
writeStream.Write(bytes, 0, bytes.Length);
}
}
using (var response = (HttpWebResponse)request.GetResponse())
{
var responseValue = string.Empty;
if (response.StatusCode != HttpStatusCode.OK)
{
var message = String.Format("Request failed. Received HTTP {0}", response.StatusCode);
throw new ApplicationException(message);
}
// grab the response
using (var responseStream = response.GetResponseStream())
{
if (responseStream != null)
using (var reader = new StreamReader(responseStream))
{
responseValue = reader.ReadToEnd();
}
}
return responseValue;
}
}
} // class
}
\ No newline at end of file
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO.Ports;
namespace BarcodeScannerClient
{
public class BarCodeScanner
{
private SerialPort serialport = new SerialPort();
private string port = "COM1";
public string Port
{
get
{
return this.port;
}
set
{
this.port = value;
}
}
public BarCodeScanner()
{
this.serialport.DataReceived += new SerialDataReceivedEventHandler(serialport_DataReceived);
}
public void Listen(string port)
{
this.port = port;
Listen();
}
public void Listen()
{
try
{
if (this.serialport.IsOpen)
this.serialport.Close();
this.serialport.PortName = this.port;
this.serialport.Open();
buffertimer.Elapsed += new System.Timers.ElapsedEventHandler(buffertimer_Elapsed);
}
catch
{
System.Windows.Forms.MessageBox.Show("Cannot open barcode scanner on port" + this.serialport);
}
}
void buffertimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
buffertimer.Enabled = false;
Console.WriteLine(this.buffer);
// If input is not regular card flush it!
/*
if (!buffer.StartsWith("C") && !buffer.StartsWith("R")) buffer = "";
// if input is ready send it
if (buffer.EndsWith("E") || buffer.EndsWith("E\r"))
{
// Trim white space away
if (buffer.EndsWith("E\r"))
buffer = buffer.Trim();
onBarcodeReceived(buffer);
buffer = "";
}
*/
onBarcodeReceived(buffer.Trim());
buffer = "";
}
public void Close()
{
try
{
this.serialport.Close();
}
catch (Exception e)
{
}
}
public enum BarcodeType { Card, Receipt };
private string buffer;
System.Timers.Timer buffertimer = new System.Timers.Timer(500);
void serialport_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
// Add new data to buffer
this.buffer += serialport.ReadExisting();
buffertimer.Start();
}
private void onBarcodeReceived(string text)
{
if (BarcodeReceived == null) return;
text = text.TrimStart(new char[]{'0'});
BarcodeReceived(text);
//int data = 0 ;
/*
try
{
data = Convert.ToInt32(text.Substring(1, text.Length - 2));
}
catch
{
Console.WriteLine("Error in barcode parser! :" + text + ":");
}
if (text.StartsWith("C"))
{
BarcodeReceived(data, BarcodeType.Card);
}
else if (text.StartsWith("R"))
{
BarcodeReceived(data, BarcodeType.Receipt);
}
else
{
System.Windows.Forms.MessageBox.Show("Unknown barcode!");
}
*/
}
//public delegate void Barcode (int data, BarcodeType type);
public delegate void Barcode(string data);
public event Barcode BarcodeReceived;
public static int CalculateEanChecksum(string code)
{
if (code == null || code.Length != 12)
throw new ArgumentException("Code length should be 12, i.e. excluding the checksum digit");
int sum = 0;
for (int i = 0; i < 12; i++)
{
int v;
if (!int.TryParse(code[i].ToString(), out v))
throw new ArgumentException("Invalid character encountered in specified code.");
sum += (i % 2 == 0 ? v : v * 3);
}
int check = 10 - (sum % 10);
return check % 10;
}
private bool CheckEanCode(string code)
{
if (code == null || code.Length != 13)
return false;
int res;
foreach (char c in code)
if (!int.TryParse(c.ToString(), out res))
return false;
char check = (char)('0' + CalculateEanChecksum(code.Substring(0, 12)));
return code[12] == check;
}
}
}
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="BarcodeScannerClient.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
</configSections>
<userSettings>
<BarcodeScannerClient.Properties.Settings>
<setting name="Port" serializeAs="String">
<value />
</setting>
<setting name="ApiKey" serializeAs="String">
<value />
</setting>
<setting name="ApiURL" serializeAs="String">
<value />
</setting>
</BarcodeScannerClient.Properties.Settings>
</userSettings>
</configuration>
\ No newline at end of file
No preview for this file type
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace CardDisplay
{
public class Card
{
public int cardId = 0;
public DateTime printTime;
public string state;
public string cardTemplate = "";
public string username = "";
public string wholeName = "";
}
}
......@@ -11,7 +11,8 @@
<RootNamespace>CardDisplay</RootNamespace>
<AssemblyName>CardDisplay</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<TargetFrameworkProfile>Client</TargetFrameworkProfile>
<TargetFrameworkProfile>
</TargetFrameworkProfile>
<FileAlignment>512</FileAlignment>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
......@@ -36,6 +37,8 @@
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Runtime.Serialization" />
<Reference Include="System.Web.Extensions" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
......@@ -46,6 +49,9 @@
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Card.cs" />
<Compile Include="CardList.cs" />
<Compile Include="Eventuser.cs" />
<Compile Include="Form1.cs">
<SubType>Form</SubType>
</Compile>
......@@ -54,6 +60,10 @@
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Reader.cs" />
<Compile Include="ReaderEvent.cs" />
<Compile Include="ReaderEventList.cs" />
<Compile Include="ReaderList.cs" />
<Compile Include="RestClient.cs" />
<EmbeddedResource Include="Form1.resx">
<DependentUpon>Form1.cs</DependentUpon>
......@@ -66,6 +76,7 @@
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<None Include="app.config" />
<None Include="Properties\Settings.settings">
......
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace CardDisplay
{
public class CardList
{
public List<Card> cards = new List<Card>();
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace CardDisplay
{
public class Eventuser
{
public int eventUserId = 0;
public string firstname = "";
public string lastname = "";
public string login = "";
public int userID = 0;
public string nick = "";
}
}
......@@ -32,14 +32,23 @@
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.pictureBox2 = new System.Windows.Forms.PictureBox();
this.pictureBox3 = new System.Windows.Forms.PictureBox();
this.comboBox1 = new System.Windows.Forms.ComboBox();
this.comboBox2 = new System.Windows.Forms.ComboBox();
this.comboBox3 = new System.Windows.Forms.ComboBox();
this.readersComboBox1 = new System.Windows.Forms.ComboBox();
this.readersComboBox2 = new System.Windows.Forms.ComboBox();
this.readersComboBox3 = new System.Windows.Forms.ComboBox();
this.apiUrlTextBox = new System.Windows.Forms.TextBox();
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.apiKeyTextBox = new System.Windows.Forms.TextBox();
this.timer1 = new System.Windows.Forms.Timer(this.components);
this.slot1Timer = new System.Windows.Forms.Timer(this.components);
this.slot2Timer = new System.Windows.Forms.Timer(this.components);
this.slot3Timer = new System.Windows.Forms.Timer(this.components);
this.prevSlot1Button = new System.Windows.Forms.Button();
this.prevSlot2Button = new System.Windows.Forms.Button();
this.prevSlot3Button = new System.Windows.Forms.Button();
this.forwardSlot1Button = new System.Windows.Forms.Button();
this.forwardSlot2Button = new System.Windows.Forms.Button();
this.forwardSlot3Button = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).BeginInit();
......@@ -51,50 +60,58 @@
this.pictureBox1.Location = new System.Drawing.Point(12, 59);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(159, 252);
this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.pictureBox1.TabIndex = 0;
this.pictureBox1.TabStop = false;
//
// pictureBox2
//
this.pictureBox2.Anchor = System.Windows.Forms.AnchorStyles.Top;
this.pictureBox2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.pictureBox2.Location = new System.Drawing.Point(177, 59);
this.pictureBox2.Name = "pictureBox2";
this.pictureBox2.Size = new System.Drawing.Size(159, 252);
this.pictureBox2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.pictureBox2.TabIndex = 1;
this.pictureBox2.TabStop = false;
//
// pictureBox3
//
this.pictureBox3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.pictureBox3.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.pictureBox3.Location = new System.Drawing.Point(342, 59);
this.pictureBox3.Name = "pictureBox3";
this.pictureBox3.Size = new System.Drawing.Size(159, 252);
this.pictureBox3.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.pictureBox3.TabIndex = 2;
this.pictureBox3.TabStop = false;
//
// comboBox1
// readersComboBox1
//
this.comboBox1.FormattingEnabled = true;
this.comboBox1.Location = new System.Drawing.Point(12, 32);
this.comboBox1.Name = "comboBox1";
this.comboBox1.Size = new System.Drawing.Size(159, 21);
this.comboBox1.TabIndex = 3;
this.readersComboBox1.FormattingEnabled = true;
this.readersComboBox1.Location = new System.Drawing.Point(12, 32);
this.readersComboBox1.Name = "readersComboBox1";
this.readersComboBox1.Size = new System.Drawing.Size(159, 21);
this.readersComboBox1.TabIndex = 3;
this.readersComboBox1.SelectedIndexChanged += new System.EventHandler(this.readersComboBox1_SelectedIndexChanged);
//
// comboBox2
// readersComboBox2
//
this.comboBox2.FormattingEnabled = true;
this.comboBox2.Location = new System.Drawing.Point(177, 32);
this.comboBox2.Name = "comboBox2";
this.comboBox2.Size = new System.Drawing.Size(159, 21);
this.comboBox2.TabIndex = 4;
this.readersComboBox2.FormattingEnabled = true;
this.readersComboBox2.Location = new System.Drawing.Point(177, 32);
this.readersComboBox2.Name = "readersComboBox2";
this.readersComboBox2.Size = new System.Drawing.Size(159, 21);
this.readersComboBox2.TabIndex = 4;
this.readersComboBox2.SelectedIndexChanged += new System.EventHandler(this.readersComboBox2_SelectedIndexChanged);
//
// comboBox3
// readersComboBox3
//
this.comboBox3.FormattingEnabled = true;
this.comboBox3.Location = new System.Drawing.Point(342, 32);
this.comboBox3.Name = "comboBox3";
this.comboBox3.Size = new System.Drawing.Size(159, 21);
this.comboBox3.TabIndex = 5;
this.readersComboBox3.FormattingEnabled = true;
this.readersComboBox3.Location = new System.Drawing.Point(342, 32);
this.readersComboBox3.Name = "readersComboBox3";
this.readersComboBox3.Size = new System.Drawing.Size(159, 21);
this.readersComboBox3.TabIndex = 5;
this.readersComboBox3.SelectedIndexChanged += new System.EventHandler(this.readersComboBox3_SelectedIndexChanged);
//
// apiUrlTextBox
//
......@@ -102,6 +119,7 @@
this.apiUrlTextBox.Name = "apiUrlTextBox";
this.apiUrlTextBox.Size = new System.Drawing.Size(159, 20);
this.apiUrlTextBox.TabIndex = 6;
this.apiUrlTextBox.TextChanged += new System.EventHandler(this.apiUrlTextBox_TextChanged);
//
// label1
//
......@@ -130,21 +148,108 @@
//
// timer1
//
this.timer1.Interval = 1000;
this.timer1.Interval = 4000;
this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
//
// slot1Timer
//
this.slot1Timer.Interval = 1000;
this.slot1Timer.Tick += new System.EventHandler(this.slot1Timer_Tick);
//
// slot2Timer
//
this.slot2Timer.Interval = 1000;
this.slot2Timer.Tick += new System.EventHandler(this.slot2Timer_Tick);
//
// slot3Timer
//
this.slot3Timer.Interval = 1000;
this.slot3Timer.Tick += new System.EventHandler(this.slot3Timer_Tick);
//
// prevSlot1Button
//
this.prevSlot1Button.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.prevSlot1Button.Location = new System.Drawing.Point(12, 317);
this.prevSlot1Button.Name = "prevSlot1Button";
this.prevSlot1Button.Size = new System.Drawing.Size(28, 23);
this.prevSlot1Button.TabIndex = 10;
this.prevSlot1Button.Text = "<<";
this.prevSlot1Button.UseVisualStyleBackColor = true;
this.prevSlot1Button.Click += new System.EventHandler(this.prevSlot1Button_Click);
//
// prevSlot2Button
//
this.prevSlot2Button.Anchor = System.Windows.Forms.AnchorStyles.Bottom;
this.prevSlot2Button.Location = new System.Drawing.Point(177, 317);
this.prevSlot2Button.Name = "prevSlot2Button";
this.prevSlot2Button.Size = new System.Drawing.Size(28, 23);
this.prevSlot2Button.TabIndex = 11;
this.prevSlot2Button.Text = "<<";
this.prevSlot2Button.UseVisualStyleBackColor = true;
this.prevSlot2Button.Click += new System.EventHandler(this.prevSlot2Button_Click);
//
// prevSlot3Button
//
this.prevSlot3Button.Anchor = System.Windows.Forms.AnchorStyles.Bottom;
this.prevSlot3Button.Location = new System.Drawing.Point(342, 318);
this.prevSlot3Button.Name = "prevSlot3Button";
this.prevSlot3Button.Size = new System.Drawing.Size(28, 23);
this.prevSlot3Button.TabIndex = 12;
this.prevSlot3Button.Text = "<<";
this.prevSlot3Button.UseVisualStyleBackColor = true;
this.prevSlot3Button.Click += new System.EventHandler(this.prevSlot3Button_Click);
//
// forwardSlot1Button
//
this.forwardSlot1Button.Anchor = System.Windows.Forms.AnchorStyles.Bottom;
this.forwardSlot1Button.Location = new System.Drawing.Point(143, 317);
this.forwardSlot1Button.Name = "forwardSlot1Button";
this.forwardSlot1Button.Size = new System.Drawing.Size(28, 23);
this.forwardSlot1Button.TabIndex = 13;
this.forwardSlot1Button.Text = ">>";
this.forwardSlot1Button.UseVisualStyleBackColor = true;
this.forwardSlot1Button.Click += new System.EventHandler(this.forwardSlot1Button_Click);
//
// forwardSlot2Button
//
this.forwardSlot2Button.Anchor = System.Windows.Forms.AnchorStyles.Bottom;
this.forwardSlot2Button.Location = new System.Drawing.Point(308, 318);
this.forwardSlot2Button.Name = "forwardSlot2Button";
this.forwardSlot2Button.Size = new System.Drawing.Size(28, 23);
this.forwardSlot2Button.TabIndex = 14;
this.forwardSlot2Button.Text = ">>";
this.forwardSlot2Button.UseVisualStyleBackColor = true;
this.forwardSlot2Button.Click += new System.EventHandler(this.forwardSlot2Button_Click);
//
// forwardSlot3Button
//
this.forwardSlot3Button.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.forwardSlot3Button.Location = new System.Drawing.Point(473, 317);
this.forwardSlot3Button.Name = "forwardSlot3Button";
this.forwardSlot3Button.Size = new System.Drawing.Size(28, 23);
this.forwardSlot3Button.TabIndex = 15;
this.forwardSlot3Button.Text = ">>";
this.forwardSlot3Button.UseVisualStyleBackColor = true;
this.forwardSlot3Button.Click += new System.EventHandler(this.forwardSlot3Button_Click);
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(508, 345);
this.Controls.Add(this.forwardSlot3Button);
this.Controls.Add(this.forwardSlot2Button);
this.Controls.Add(this.forwardSlot1Button);
this.Controls.Add(this.prevSlot3Button);
this.Controls.Add(this.prevSlot2Button);
this.Controls.Add(this.prevSlot1Button);
this.Controls.Add(this.label2);
this.Controls.Add(this.apiKeyTextBox);
this.Controls.Add(this.label1);
this.Controls.Add(this.apiUrlTextBox);
this.Controls.Add(this.comboBox3);
this.Controls.Add(this.comboBox2);
this.Controls.Add(this.comboBox1);
this.Controls.Add(this.readersComboBox3);
this.Controls.Add(this.readersComboBox2);
this.Controls.Add(this.readersComboBox1);
this.Controls.Add(this.pictureBox3);
this.Controls.Add(this.pictureBox2);
this.Controls.Add(this.pictureBox1);
......@@ -166,14 +271,23 @@
private System.Windows.Forms.PictureBox pictureBox1;
private System.Windows.Forms.PictureBox pictureBox2;
private System.Windows.Forms.PictureBox pictureBox3;
private System.Windows.Forms.ComboBox comboBox1;
private System.Windows.Forms.ComboBox comboBox2;
private System.Windows.Forms.ComboBox comboBox3;
private System.Windows.Forms.ComboBox readersComboBox1;
private System.Windows.Forms.ComboBox readersComboBox2;
private System.Windows.Forms.ComboBox readersComboBox3;
private System.Windows.Forms.TextBox apiUrlTextBox;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.TextBox apiKeyTextBox;
private System.Windows.Forms.Timer timer1;
private System.Windows.Forms.Timer slot1Timer;
private System.Windows.Forms.Timer slot2Timer;
private System.Windows.Forms.Timer slot3Timer;
private System.Windows.Forms.Button prevSlot1Button;
private System.Windows.Forms.Button prevSlot2Button;
private System.Windows.Forms.Button prevSlot3Button;
private System.Windows.Forms.Button forwardSlot1Button;
private System.Windows.Forms.Button forwardSlot2Button;
private System.Windows.Forms.Button forwardSlot3Button;
}
}
using System;
using HttpUtils;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Web.Script.Serialization;
using System.Windows.Forms;
namespace CardDisplay
......@@ -16,8 +18,53 @@ namespace CardDisplay
InitializeComponent();
}
string readerApiUrl = "http://vectorama.moya.fi/MoyaWeb/rest/reader/List";
string statePrinted = "PRINTED";
List<Card> slot1Cards = new List<Card>();
List<Card> slot2Cards = new List<Card>();
List<Card> slot3Cards = new List<Card>();
Card slot1SelectedCard = null;
Card slot2SelectedCard = null;
Card slot3SelectedCard = null;
int slot1ReaderEventId = 0;
int slot2ReaderEventId = 0;
int slot3ReaderEventId = 0;
string ret = "";
private void timer1_Tick(object sender, EventArgs e)
{
timer1.Stop();
RestClient client = new RestClient(readerApiUrl);
try
{
ret = client.MakeRequest();
var ser = new JavaScriptSerializer();
ReaderList readers = ser.Deserialize<ReaderList>(ret);
readersComboBox1.Items.Clear();
readersComboBox2.Items.Clear();
readersComboBox3.Items.Clear();
foreach (Reader reader in readers.readers)
{
readersComboBox1.Items.Add(reader);
readersComboBox2.Items.Add(reader);
readersComboBox3.Items.Add(reader);
}
}catch(Exception ex) {
ret = ex.Message;
}
}
......@@ -44,21 +91,241 @@ namespace CardDisplay
int newWidth = Convert.ToInt32(Convert.ToDouble(this.Width - spaces) / Xfactor);
pictureBox1.Size = new System.Drawing.Size(newWidth, Convert.ToInt32(newWidth * ratio));
comboBox1.Size = new System.Drawing.Size(newWidth, 21);
readersComboBox1.Size = new System.Drawing.Size(newWidth, 21);
forwardSlot1Button.Top = pictureBox1.Top + pictureBox1.Size.Height + 5;
forwardSlot1Button.Left = pictureBox1.Size.Width + pictureBox1.Left - forwardSlot1Button.Size.Width;
pictureBox2.Size = new System.Drawing.Size(newWidth, Convert.ToInt32(newWidth * ratio));
pictureBox2.Location = new Point(pictureBox1.Size.Width + 18, 59);
comboBox2.Size = new System.Drawing.Size(newWidth, 21);
comboBox2.Location = new Point(pictureBox2.Location.X, comboBox2.Location.Y);
prevSlot2Button.Left = pictureBox2.Left;
prevSlot2Button.Top = pictureBox2.Top + pictureBox2.Size.Height + 5;
forwardSlot2Button.Left = pictureBox2.Size.Width + pictureBox2.Left - forwardSlot2Button.Size.Width;
forwardSlot2Button.Top = pictureBox2.Top + pictureBox2.Size.Height + 5;
readersComboBox2.Size = new System.Drawing.Size(newWidth, 21);
readersComboBox2.Location = new Point(pictureBox2.Location.X, readersComboBox2.Location.Y);
pictureBox3.Size = new System.Drawing.Size(newWidth, Convert.ToInt32(newWidth * ratio));
pictureBox3.Location = new Point(pictureBox1.Size.Width * 2 + 25, 59);
comboBox3.Size = new System.Drawing.Size(newWidth, 21);
comboBox3.Location = new Point(pictureBox3.Location.X, comboBox3.Location.Y);
prevSlot3Button.Left = pictureBox3.Left;
prevSlot3Button.Top = pictureBox3.Top + pictureBox3.Size.Height + 5;
forwardSlot3Button.Left = pictureBox3.Size.Width + pictureBox3.Left - forwardSlot3Button.Size.Width;
forwardSlot3Button.Top = pictureBox3.Top + pictureBox3.Size.Height + 5;
readersComboBox3.Size = new System.Drawing.Size(newWidth, 21);
readersComboBox3.Location = new Point(pictureBox3.Location.X, readersComboBox3.Location.Y);
}
private void apiUrlTextBox_TextChanged(object sender, EventArgs e)
{
timer1.Enabled = true;
}
private void readersComboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
slot1Timer.Enabled = true;
}
private void readersComboBox2_SelectedIndexChanged(object sender, EventArgs e)
{
slot2Timer.Enabled = true;
}
private void readersComboBox3_SelectedIndexChanged(object sender, EventArgs e)
{
slot3Timer.Enabled = true;
}
private void slot1Timer_Tick(object sender, EventArgs e)
{
if (readersComboBox1.SelectedItem != null)
{
Reader reader = (Reader)readersComboBox1.SelectedItem;
RestClient client = new RestClient(apiUrlTextBox.Text + "/reader/readerevents/" + reader.readerId + "/" + slot1ReaderEventId);
try
{
ret = client.MakeRequest();
var ser = new JavaScriptSerializer();
ReaderEventList events = ser.Deserialize<ReaderEventList>(ret);
foreach (ReaderEvent re in events.readerEvents)
{
client = new RestClient(apiUrlTextBox.Text + "/card/ListAll");
ret = client.MakeRequest();
CardList cards = ser.Deserialize<CardList>(ret);
cards.cards = cards.cards.OrderBy(c => c.printTime).ToList();
foreach (Card card in cards.cards)
{
if (card.state == statePrinted)
{
slot1Cards.Add(card);
pictureBox1.ImageLocation = apiUrlTextBox.Text + "/card/GetImage/" + card.cardId;
slot1SelectedCard = card;
}
}
}
}
catch (Exception ex)
{
}
}
}
private void slot2Timer_Tick(object sender, EventArgs e)
{
if (readersComboBox2.SelectedItem != null)
{
Reader reader = (Reader)readersComboBox2.SelectedItem;
RestClient client = new RestClient(apiUrlTextBox.Text + "/reader/readerevents/" + reader.readerId + "/" + slot2ReaderEventId);
try
{
ret = client.MakeRequest();
var ser = new JavaScriptSerializer();
ReaderEventList events = ser.Deserialize<ReaderEventList>(ret);
foreach (ReaderEvent re in events.readerEvents)
{
client = new RestClient(apiUrlTextBox.Text + "/card/ListAll");
ret = client.MakeRequest();
CardList cards = ser.Deserialize<CardList>(ret);
cards.cards = cards.cards.OrderBy(c => c.printTime).ToList();
foreach (Card card in cards.cards)
{
if (card.state == statePrinted)
{
slot2Cards.Add(card);
pictureBox2.ImageLocation = apiUrlTextBox.Text + "/rest/card/GetImage/" + card.cardId;
slot2SelectedCard = card;
}
}
}
}
catch (Exception ex)
{
}
}
}
private void slot3Timer_Tick(object sender, EventArgs e)
{
if (readersComboBox3.SelectedItem != null)
{
Reader reader = (Reader)readersComboBox3.SelectedItem;
RestClient client = new RestClient(apiUrlTextBox.Text + "/reader/readerevents/" + reader.readerId + "/" + slot3ReaderEventId);
try
{
ret = client.MakeRequest();
var ser = new JavaScriptSerializer();
ReaderEventList events = ser.Deserialize<ReaderEventList>(ret);
foreach (ReaderEvent re in events.readerEvents)
{
client = new RestClient(apiUrlTextBox.Text + "/card/ListAll");
ret = client.MakeRequest();
CardList cards = ser.Deserialize<CardList>(ret);
cards.cards = cards.cards.OrderBy(c => c.printTime).ToList();
foreach (Card card in cards.cards)
{
if (card.state == statePrinted)
{
slot3Cards.Add(card);
pictureBox3.ImageLocation = apiUrlTextBox.Text + "/rest/card/GetImage/" + card.cardId;
slot3SelectedCard = card;
}
}
}
}
catch (Exception ex)
{
}
}
}
private void prevSlot1Button_Click(object sender, EventArgs e)
{
if (slot1SelectedCard != null &&slot1Cards.Count > 1)
{
int i = slot1Cards.IndexOf(slot1SelectedCard) - 1;
if (i >= 0)
{
slot1SelectedCard = slot1Cards[i];
pictureBox1.ImageLocation = apiUrlTextBox.Text + "/rest/card/GetImage/" + slot1SelectedCard.cardId;
}
}
}
private void prevSlot2Button_Click(object sender, EventArgs e)
{
if (slot2SelectedCard != null && slot2Cards.Count > 1)
{
int i = slot2Cards.IndexOf(slot2SelectedCard) - 1;
if (i >= 0)
{
slot2SelectedCard = slot2Cards[i];
pictureBox2.ImageLocation = apiUrlTextBox.Text + "/rest/card/GetImage/" + slot2SelectedCard.cardId;
}
}
}
private void prevSlot3Button_Click(object sender, EventArgs e)
{
if (slot3SelectedCard != null && slot3Cards.Count > 1)
{
int i = slot3Cards.IndexOf(slot3SelectedCard) - 1;
if (i >= 0)
{
slot3SelectedCard = slot1Cards[i];
pictureBox3.ImageLocation = apiUrlTextBox.Text + "/rest/card/GetImage/" + slot3SelectedCard.cardId;
}
}
}
private void forwardSlot1Button_Click(object sender, EventArgs e)
{
if (slot1SelectedCard != null && slot1Cards.Count > 1)
{
int i = slot1Cards.IndexOf(slot1SelectedCard);
if (i <= (slot1Cards.Count - 1))
{
slot1SelectedCard = slot1Cards[i];
pictureBox1.ImageLocation = apiUrlTextBox.Text + "/rest/card/GetImage/" + slot1SelectedCard.cardId;
}
}
}
private void forwardSlot2Button_Click(object sender, EventArgs e)
{
if (slot2SelectedCard != null && slot2Cards.Count > 1)
{
int i = slot2Cards.IndexOf(slot2SelectedCard);
if (i <= (slot2Cards.Count - 1))
{
slot2SelectedCard = slot2Cards[i];
pictureBox2.ImageLocation = apiUrlTextBox.Text + "/rest/card/GetImage/" + slot2SelectedCard.cardId;
}
}
}
private void forwardSlot3Button_Click(object sender, EventArgs e)
{
if (slot3SelectedCard != null && slot3Cards.Count > 1)
{
int i = slot3Cards.IndexOf(slot3SelectedCard);
if (i <= (slot3Cards.Count - 1))
{
slot3SelectedCard = slot2Cards[i];
pictureBox3.ImageLocation = apiUrlTextBox.Text + "/rest/card/GetImage/" + slot3SelectedCard.cardId;
}
}
}
}
}
......@@ -120,4 +120,13 @@
<metadata name="timer1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="slot1Timer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>104, 17</value>
</metadata>
<metadata name="slot2Timer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>213, 17</value>
</metadata>
<metadata name="slot3Timer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>322, 17</value>
</metadata>
</root>
\ No newline at end of file
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.17929
// Runtime Version:4.0.30319.18449
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace CardDisplay.Properties
{
namespace CardDisplay.Properties {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
......@@ -22,48 +22,40 @@ namespace CardDisplay.Properties
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources
{
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()
{
internal Resources() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager
{
get
{
if ((resourceMan == null))
{
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("CardDisplay.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture
{
get
{
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set
{
set {
resourceCulture = value;
}
}
......
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.17929
// Runtime Version:4.0.30319.18449
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
......@@ -12,7 +12,7 @@ namespace CardDisplay.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
......
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace CardDisplay
{
public class Reader
{
public string description;
public int readerId;
public string identification;
public string readerType;
public override string ToString()
{
string name = identification;
if (description != "")
name += ":" + description;
return name;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace CardDisplay
{
public class ReaderEvent
{
public int readerEventId = 0;
public int readerId = 0;
public Eventuser eventuser;
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace CardDisplay
{
public class ReaderEventList
{
public List<ReaderEvent> readerEvents = new List<ReaderEvent>();
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace CardDisplay
{
public class ReaderList
{
public List<Reader> readers = new List<Reader>();
}
}
<?xml version="1.0" encoding="utf-8" ?>
<?xml version="1.0"?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="CardDisplay.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="CardDisplay.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false"/>
</sectionGroup>
</configSections>
<userSettings>
<CardDisplay.Properties.Settings>
<setting name="ApiKey" serializeAs="String">
<value />
<value/>
</setting>
<setting name="ApiURL" serializeAs="String">
<value />
<value/>
</setting>
</CardDisplay.Properties.Settings>
</userSettings>
</configuration>
\ No newline at end of file
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
<?xml version="1.0" encoding="utf-8" ?>
<?xml version="1.0"?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="CardDisplay.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="CardDisplay.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false"/>
</sectionGroup>
</configSections>
<userSettings>
<CardDisplay.Properties.Settings>
<setting name="ApiKey" serializeAs="String">
<value />
<value/>
</setting>
<setting name="ApiURL" serializeAs="String">
<value />
<value/>
</setting>
</CardDisplay.Properties.Settings>
</userSettings>
</configuration>
\ No newline at end of file
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
<?xml version="1.0" encoding="utf-8" ?>
<?xml version="1.0"?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="CardDisplay.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="CardDisplay.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false"/>
</sectionGroup>
</configSections>
<userSettings>
<CardDisplay.Properties.Settings>
<setting name="ApiKey" serializeAs="String">
<value />
<value/>
</setting>
<setting name="ApiURL" serializeAs="String">
<value />
<value/>
</setting>
</CardDisplay.Properties.Settings>
</userSettings>
</configuration>
\ No newline at end of file
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
......@@ -6,3 +6,12 @@ C:\devel\proj\moya\CardDisplay\CardDisplay\CardDisplay\obj\x86\Debug\CardDisplay
C:\devel\proj\moya\CardDisplay\CardDisplay\CardDisplay\obj\x86\Debug\CardDisplay.csproj.GenerateResource.Cache
C:\devel\proj\moya\CardDisplay\CardDisplay\CardDisplay\obj\x86\Debug\CardDisplay.exe
C:\devel\proj\moya\CardDisplay\CardDisplay\CardDisplay\obj\x86\Debug\CardDisplay.pdb
C:\devel\proj\moya-info-tools\CardDisplay\CardDisplay\CardDisplay\bin\Debug\CardDisplay.exe.config
C:\devel\proj\moya-info-tools\CardDisplay\CardDisplay\CardDisplay\obj\x86\Debug\CardDisplay.exe
C:\devel\proj\moya-info-tools\CardDisplay\CardDisplay\CardDisplay\obj\x86\Debug\CardDisplay.pdb
C:\devel\proj\moya-info-tools\CardDisplay\CardDisplay\CardDisplay\bin\Debug\CardDisplay.exe
C:\devel\proj\moya-info-tools\CardDisplay\CardDisplay\CardDisplay\bin\Debug\CardDisplay.pdb
C:\devel\proj\moya-info-tools\CardDisplay\CardDisplay\CardDisplay\obj\x86\Debug\CardDisplay.csprojResolveAssemblyReference.cache
C:\devel\proj\moya-info-tools\CardDisplay\CardDisplay\CardDisplay\obj\x86\Debug\CardDisplay.Form1.resources
C:\devel\proj\moya-info-tools\CardDisplay\CardDisplay\CardDisplay\obj\x86\Debug\CardDisplay.Properties.Resources.resources
C:\devel\proj\moya-info-tools\CardDisplay\CardDisplay\CardDisplay\obj\x86\Debug\CardDisplay.csproj.GenerateResource.Cache
C:\devel\proj\PrintServer\moyaPrintServer\moyaPrintServer\bin\Debug\moyaPrintServer.exe
C:\devel\proj\PrintServer\moyaPrintServer\moyaPrintServer\bin\Debug\moyaPrintServer.pdb
C:\devel\proj\PrintServer\moyaPrintServer\moyaPrintServer\obj\x86\Debug\moyaPrintServer.Form1.resources
C:\devel\proj\PrintServer\moyaPrintServer\moyaPrintServer\obj\x86\Debug\moyaPrintServer.Properties.Resources.resources
C:\devel\proj\PrintServer\moyaPrintServer\moyaPrintServer\obj\x86\Debug\moyaPrintServer.csproj.GenerateResource.Cache
C:\devel\proj\PrintServer\moyaPrintServer\moyaPrintServer\obj\x86\Debug\moyaPrintServer.exe
C:\devel\proj\PrintServer\moyaPrintServer\moyaPrintServer\obj\x86\Debug\moyaPrintServer.pdb
C:\devel\proj\PrintServer\moyaPrintServer\moyaPrintServer\bin\Debug\moyaPrintServer.exe.config
C:\devel\proj\moya\PrintServer\moyaPrintServer\moyaPrintServer\bin\Debug\moyaPrintServer.exe.config
C:\devel\proj\moya\PrintServer\moyaPrintServer\moyaPrintServer\obj\x86\Debug\moyaPrintServer.exe
C:\devel\proj\moya\PrintServer\moyaPrintServer\moyaPrintServer\obj\x86\Debug\moyaPrintServer.pdb
D:\Devel\proj\moya-info-tools\PrintServer\moyaPrintServer\moyaPrintServer\bin\Debug\moyaPrintServer.exe.config
D:\Devel\proj\moya-info-tools\PrintServer\moyaPrintServer\moyaPrintServer\obj\x86\Debug\moyaPrintServer.exe
D:\Devel\proj\moya-info-tools\PrintServer\moyaPrintServer\moyaPrintServer\obj\x86\Debug\moyaPrintServer.pdb
D:\Devel\proj\moya-info-tools\PrintServer\moyaPrintServer\moyaPrintServer\bin\Debug\moyaPrintServer.exe
D:\Devel\proj\moya-info-tools\PrintServer\moyaPrintServer\moyaPrintServer\bin\Debug\moyaPrintServer.pdb
D:\Devel\proj\moya-info-tools\PrintServer\moyaPrintServer\moyaPrintServer\obj\x86\Debug\moyaPrintServer.Form1.resources
D:\Devel\proj\moya-info-tools\PrintServer\moyaPrintServer\moyaPrintServer\obj\x86\Debug\moyaPrintServer.Properties.Resources.resources
D:\Devel\proj\moya-info-tools\PrintServer\moyaPrintServer\moyaPrintServer\obj\x86\Debug\moyaPrintServer.csproj.GenerateResource.Cache
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!