using SkiaSharp ;
using SunlightCentralizedControlManagement_SCCM_.UserClass ;
using SunlightCentralizedControlManagement_SCCM_.ViewModel ;
using System ;
using System.Collections ;
using System.Collections.Generic ;
using System.Data ;
using System.IO ;
using System.Linq ;
using System.Net ;
using System.Net.NetworkInformation ;
using System.Net.Sockets ;
using System.Text ;
using System.Threading.Tasks ;
using System.Windows ;
using System.Windows.Controls ;
using System.Windows.Data ;
using System.Windows.Documents ;
using System.Windows.Input ;
using System.Windows.Media ;
using System.Windows.Media.Imaging ;
using System.Windows.Navigation ;
using System.Windows.Shapes ;
using static SunlightCentralizedControlManagement_SCCM_ . UserClass . SqliteHelper ;
namespace SunlightCentralizedControlManagement_SCCM_.View
{
/// <summary>
/// MachinesSet.xaml 的交互逻辑
/// </summary>
public partial class DispenseMachinesSet : UserControl
{
int type_ ;
public DispenseMachinesSet ( )
{
InitializeComponent ( ) ;
//
string [ ] Machine_ = { "252" , "252RB" , "252-2T" , "252RDRM" , "242W" , "302" , "303" , "303PDW" } ;
TextMachineGroup . ItemsSource = Machine_ ;
}
private readonly UserClass . IniFile . IniFiles Configini = new UserClass . IniFile . IniFiles ( Convert . ToString ( System . AppDomain . CurrentDomain . BaseDirectory ) + "SCCM.ini" ) ;
//private string SYS_machines = null;
private void UserControl_Loaded ( object sender , RoutedEventArgs e )
{
DataTable dataTable = MainWindowViewModel . SQLiteHelpers . ExecuteDataSet ( "select * from MachinesDispense Order by id" , null ) . Tables [ 0 ] ;
Griddata . ItemsSource = dataTable . DefaultView ;
}
private void Griddata_MouseDoubleClick ( object sender , MouseButtonEventArgs e )
{
int rownum = Griddata . SelectedIndex ; //获取鼠标选中行并定义变量
if ( rownum ! = - 1 ) //判断鼠标定位是否有效
{
comboBoxMachine . Text = ( Griddata . Columns [ 1 ] . GetCellContent ( Griddata . Items [ rownum ] ) as TextBlock ) . Text ; //定位第1列,
TextMachineGroup . Text = ( Griddata . Columns [ 2 ] . GetCellContent ( Griddata . Items [ rownum ] ) as TextBlock ) . Text ; //定位第列,
IP . Text = ( Griddata . Columns [ 3 ] . GetCellContent ( Griddata . Items [ rownum ] ) as TextBlock ) . Text ; //定位第列,
PORT . Text = ( Griddata . Columns [ 4 ] . GetCellContent ( Griddata . Items [ rownum ] ) as TextBlock ) . Text ; //定位第列,
User . Text = ( Griddata . Columns [ 5 ] . GetCellContent ( Griddata . Items [ rownum ] ) as TextBlock ) . Text ; //定位第列,
Password . Text = ( Griddata . Columns [ 6 ] . GetCellContent ( Griddata . Items [ rownum ] ) as TextBlock ) . Text ; //定位第列,
string TYR = ( Griddata . Columns [ 7 ] . GetCellContent ( Griddata . Items [ rownum ] ) as TextBlock ) . Text ;
dLICK . IsChecked = Convert . ToBoolean ( ( Griddata . Columns [ 7 ] . GetCellContent ( Griddata . Items [ rownum ] ) as TextBlock ) . Text ) ; //定位第列,
}
}
private void Save_Click ( object sender , RoutedEventArgs e )
{
if ( ! string . IsNullOrEmpty ( comboBoxMachine . Text ) & & ! string . IsNullOrEmpty ( TextMachineGroup . Text ) & & ! string . IsNullOrEmpty ( IP . Text ) )
{
WriteableBitmap wb = new WriteableBitmap ( ( BitmapSource ) IMAGE . Source ) ;
byte [ ] imageData = SourceToArray ( wb ) ;
Dictionary < string , object > dr_new = new Dictionary < string , object > ( ) ; //缓存函数
dr_new . Add ( "Name" , comboBoxMachine . Text ) ;
dr_new . Add ( "Groups" , TextMachineGroup . Text ) ;
dr_new . Add ( "IP" , IP . Text ) ;
dr_new . Add ( "PORT" , PORT . Text ) ;
dr_new . Add ( "type" , type_ ) ;
dr_new . Add ( "State" , "899" ) ;
dr_new . Add ( "User" , User . Text ) ;
dr_new . Add ( "Password" , Password . Text ) ;
dr_new . Add ( "LOCK" , dLICK . IsChecked . ToString ( ) ) ;
dr_new . Add ( "DATA" , imageData ) ;
if ( MainWindowViewModel . SQLiteHelpers . ExecuteDataSet ( "select * from MachinesDispense where name ='" + comboBoxMachine . Text + "'" , null ) . Tables [ 0 ] . Rows . Count = = 0 )
{
MainWindowViewModel . SQLiteHelpers . InsertData ( "MachinesDispense" , dr_new ) ;
}
else
{
MainWindowViewModel . SQLiteHelpers . Update ( "MachinesDispense" , dr_new , "name='" + comboBoxMachine . Text + "'" , null ) ;
}
Griddata . ItemsSource = MainWindowViewModel . SQLiteHelpers . ExecuteDataSet ( "select Name,Groups,IP,PORT,DATA from MachinesDispense Order by id" , null ) . Tables [ 0 ] . DefaultView ;
MessageBox . Show ( Properties . Resources . Save + comboBoxMachine . Text , "SCCM" , MessageBoxButton . OK , MessageBoxImage . Information ) ;
}
else
{
MessageBox . Show ( Properties . Resources . ERR , "SCCM" , MessageBoxButton . OK , MessageBoxImage . Error ) ;
}
}
private void Delete_Click ( object sender , RoutedEventArgs e )
{
if ( ! string . IsNullOrEmpty ( comboBoxMachine . Text ) )
{
MessageBoxResult vr = System . Windows . MessageBox . Show ( Properties . Resources . Delete + comboBoxMachine . Text , "SCCM" , MessageBoxButton . OKCancel , MessageBoxImage . Question ) ;
if ( vr = = MessageBoxResult . OK ) // 如果是确定,就执行下面代码
{
MainWindowViewModel . SQLiteHelpers . Delete ( "MachinesDispense" , "Name='" + comboBoxMachine . Text + "'" , null ) ;
Griddata . ItemsSource = MainWindowViewModel . SQLiteHelpers . ExecuteDataSet ( "select Name,Groups,IP,PORT,DATA from MachinesDispense Order by id" , null ) . Tables [ 0 ] . DefaultView ;
comboBoxMachine . Text = null ;
}
}
else
{
textlog . Text = "Invalid" ;
textlog . Foreground = new SolidColorBrush ( Color . FromRgb ( 2 5 5 , 0 , 0 ) ) ;
}
}
private void Test_Click ( object sender , RoutedEventArgs e ) //测试按钮
{
if ( ! string . IsNullOrEmpty ( IP . Text ) & & ! string . IsNullOrEmpty ( PORT . Text ) )
{
textlog . Text = "TEST" ;
textlog . Foreground = new SolidColorBrush ( Color . FromRgb ( 0 , 0 , 2 5 5 ) ) ;
//------------使用ping类------
string host = IP . Text ;
Ping p1 = new Ping ( ) ;
PingReply reply = p1 . Send ( host ) ; //发送主机名或Ip地址
//StringBuilder sbuilder;
if ( reply . Status = = IPStatus . Success )
{
Socket socket = new Socket ( AddressFamily . InterNetwork , SocketType . Stream , ProtocolType . Tcp ) ;
//连接服务器,绑定IP 与 端口
IPEndPoint iPEndPoint = new IPEndPoint ( IPAddress . Parse ( IP . Text ) , int . Parse ( PORT . Text ) ) ;
try
{
socket . Connect ( iPEndPoint ) ;
socket . Close ( ) ; //离线
textlog . Text = "Link succeed" ;
textlog . Foreground = new SolidColorBrush ( Color . FromRgb ( 0 , 2 5 5 , 0 ) ) ;
}
catch ( Exception )
{
textlog . Text = "Link failed" ;
textlog . Foreground = new SolidColorBrush ( Color . FromRgb ( 2 5 5 , 2 5 5 , 0 ) ) ;
}
}
else if ( reply . Status = = IPStatus . TimedOut )
{
textlog . Text = "Link timeout" ;
textlog . Foreground = new SolidColorBrush ( Color . FromRgb ( 2 5 5 , 0 , 0 ) ) ;
}
else
{
textlog . Text = "No links" ;
textlog . Foreground = new SolidColorBrush ( Color . FromRgb ( 2 5 5 , 0 , 0 ) ) ;
}
}
else
{
textlog . Text = "Invalid" ;
textlog . Foreground = new SolidColorBrush ( Color . FromRgb ( 2 5 5 , 0 , 0 ) ) ;
}
}
private void TextMachineGroup_DropDownClosed ( object sender , EventArgs e )
{
Uri uri ;
BitmapImage bitmapImage ;
switch ( TextMachineGroup . Text ) //步骤用时计算
{
case "252" :
uri = new Uri ( "pack://application:,,,/LOGO/252-2t.png" ) ;
bitmapImage = new BitmapImage ( uri ) ;
IMAGE . Source = bitmapImage ;
type_ = 1 ;
break ;
case "252-2T" :
uri = new Uri ( "pack://application:,,,/LOGO/252-2t.png" ) ;
bitmapImage = new BitmapImage ( uri ) ;
IMAGE . Source = bitmapImage ;
type_ = 1 ;
break ;
case "252RB" :
uri = new Uri ( "pack://application:,,,/LOGO/252RB.png" ) ;
bitmapImage = new BitmapImage ( uri ) ;
IMAGE . Source = bitmapImage ;
type_ = 1 ;
break ;
case "252RDRM" :
uri = new Uri ( "pack://application:,,,/LOGO/252RMRD.png" ) ;
bitmapImage = new BitmapImage ( uri ) ;
IMAGE . Source = bitmapImage ;
type_ = 1 ;
break ;
case "242W" :
uri = new Uri ( "pack://application:,,,/LOGO/242w.png" ) ;
bitmapImage = new BitmapImage ( uri ) ;
IMAGE . Source = bitmapImage ;
type_ = 1 ;
break ;
case "302" :
uri = new Uri ( "pack://application:,,,/LOGO/302.png" ) ;
bitmapImage = new BitmapImage ( uri ) ;
IMAGE . Source = bitmapImage ;
type_ = 2 ;
break ;
case "303" :
uri = new Uri ( "pack://application:,,,/LOGO/303.png" ) ;
bitmapImage = new BitmapImage ( uri ) ;
IMAGE . Source = bitmapImage ;
type_ = 3 ;
break ;
case "302PDW" :
uri = new Uri ( "pack://application:,,,/LOGO/303pdw.png" ) ;
bitmapImage = new BitmapImage ( uri ) ;
IMAGE . Source = bitmapImage ;
type_ = 3 ;
break ;
default :
break ;
}
}
public static byte [ ] BitmapImageToByteArray ( BitmapImage bmp )
{
byte [ ] byteArray = null ;
try
{
Stream sMarket = bmp . StreamSource ;
if ( sMarket ! = null & & sMarket . Length > 0 )
{
//很重要,因为Position经常位于Stream的末尾,导致下面读取到的长度为0。
sMarket . Position = 0 ;
using ( BinaryReader br = new BinaryReader ( sMarket ) )
{
byteArray = br . ReadBytes ( ( int ) sMarket . Length ) ;
}
}
}
catch
{
//other exception handling
}
return byteArray ;
}
public static byte [ ] SourceToArray ( WriteableBitmap source )
{
byte [ ] byteArray = null ;
try
{
using ( MemoryStream ms = new MemoryStream ( ) )
{
JpegBitmapEncoder coder = new JpegBitmapEncoder ( ) ;
coder . QualityLevel = 1 0 0 ;
coder . Frames . Add ( BitmapFrame . Create ( source ) ) ;
coder . Save ( ms ) ;
byteArray = ms . ToArray ( ) ;
}
}
catch ( Exception ex )
{
Console . WriteLine ( ex . Message . ToString ( ) ) ;
}
return byteArray ;
}
}
}