root / HAgent / Horizon(TCP, HTTP) / Horizon / Updater.xaml.cs
이력 | 보기 | 이력해설 | 다운로드 (6.86 KB)
1 |
using Newtonsoft.Json.Linq; |
---|---|
2 |
using System; |
3 |
using System.Collections.Generic; |
4 |
using System.IO; |
5 |
using System.Linq; |
6 |
using System.Net; |
7 |
using System.Text; |
8 |
using System.Threading; |
9 |
using System.Threading.Tasks; |
10 |
using System.Windows; |
11 |
using System.Windows.Controls; |
12 |
using System.Windows.Data; |
13 |
using System.Windows.Documents; |
14 |
using System.Windows.Input; |
15 |
using System.Windows.Media; |
16 |
using System.Windows.Media.Imaging; |
17 |
using System.Windows.Shapes; |
18 |
using System.Windows.Threading; |
19 |
|
20 |
namespace Horizon |
21 |
{ |
22 |
public partial class Updater : Window |
23 |
{ |
24 |
private delegate void CSafeSetText(string text); |
25 |
private delegate void CSafeSetMaximum(Int32 value); |
26 |
private delegate void CSafeSetValue(Int32 value); |
27 |
|
28 |
private CSafeSetText csst; |
29 |
private CSafeSetMaximum cssm; |
30 |
private CSafeSetValue cssv; |
31 |
private WebClient wc; |
32 |
private Boolean setBaseSize; |
33 |
private Boolean nowDownloading; |
34 |
|
35 |
Thread thread; |
36 |
Communicator com = new Communicator(); |
37 |
|
38 |
int FileNum; |
39 |
public Updater() |
40 |
{ |
41 |
// 대리자를 초기화한다. |
42 |
//csst = new CSafeSetText(CrossSafeSetTextMethod); |
43 |
//cssm = new CSafeSetMaximum(CrossSafeSetMaximumMethod); |
44 |
//cssv = new CSafeSetValue(CrossSafeSetValueMethod); |
45 |
|
46 |
// 웹 클라이언트 개체를 초기화하고, |
47 |
|
48 |
//com.TCPConnect(); |
49 |
wc = new WebClient(); |
50 |
//thread = new Thread(new ThreadStart(com.TCPConnect)); // http 로 바꾸기 |
51 |
//thread.Start(); |
52 |
//com.HttpConnect(); |
53 |
//thread = new Thread(new ThreadStart(com.HttpConnect)); // http 로 바꾸기 |
54 |
//thread.Start(); |
55 |
|
56 |
InitializeComponent(); |
57 |
Communicator.state = "update"; |
58 |
|
59 |
// MessageBox.Show("업데이트 내역"); |
60 |
|
61 |
} |
62 |
|
63 |
public void DownLoad() |
64 |
{ |
65 |
|
66 |
try |
67 |
{ |
68 |
string file = com.filelist; |
69 |
JObject filelist = JObject.Parse(file); |
70 |
int value = filelist["files"].Count(); |
71 |
Console.WriteLine(value); |
72 |
foreach (var fileinfo in filelist["files"]) |
73 |
{ |
74 |
// 파일이 저장될 위치를 저장한다. |
75 |
var downloadFileName = fileinfo.Value<string>("path"); |
76 |
Console.WriteLine(downloadFileName); |
77 |
|
78 |
|
79 |
string foldername = downloadFileName.Substring(0, downloadFileName.LastIndexOf("/")); |
80 |
DirectoryInfo folder = new DirectoryInfo(foldername); |
81 |
if (!folder.Exists) |
82 |
{ |
83 |
Directory.CreateDirectory("Program/"+folder.ToString()); |
84 |
} |
85 |
|
86 |
|
87 |
String fileName = String.Format("Program", System.IO.Path.GetFileName("http://192.168.0.32:3000/Uploads/")); |
88 |
|
89 |
// 폴더가 존재하지 않는다면 폴더를 생성한다. |
90 |
if (!System.IO.Directory.Exists("Program")) |
91 |
System.IO.Directory.CreateDirectory("Program"); |
92 |
|
93 |
wc.DownloadFile(new Uri("http://192.168.0.32:3000/Uploads/" + downloadFileName), "Program/"+ downloadFileName ); // 프로젝트네임 추가 |
94 |
|
95 |
Console.WriteLine(FileNum++); |
96 |
//Dispatcher.Invoke(DispatcherPriority.Normal, new Action(delegate |
97 |
//{ |
98 |
// this.entire.Value = 100 * (FileNum / value); |
99 |
//})); |
100 |
|
101 |
} |
102 |
// C 드라이브 밑의 downloadFiles 폴더에 파일 이름대로 저장한다. |
103 |
|
104 |
// 다운로드 중이라는걸 알리기 위한 값을 설정하고, |
105 |
// 프로그레스바의 크기를 0으로 만든다. |
106 |
//entire.Value = 0; |
107 |
setBaseSize = false; |
108 |
nowDownloading = true; |
109 |
//btnStart.Enabled = false; |
110 |
//txtAddress.Enabled = false; |
111 |
|
112 |
} |
113 |
catch (Exception ex) |
114 |
{ |
115 |
MessageBox.Show(ex.Message); |
116 |
} |
117 |
} |
118 |
|
119 |
|
120 |
//void CrossSafeSetValueMethod(Int32 value) |
121 |
//{ |
122 |
// if (entire.InvokeRequired) |
123 |
// entire.Invoke(cssm, value); |
124 |
// else |
125 |
// entire.Value = value; |
126 |
//} |
127 |
//void CrossSafeSetMaximumMethod(Int32 value) |
128 |
//{ |
129 |
// if (prgDownload.InvokeRequired) |
130 |
// prgDownload.Invoke(cssm, value); |
131 |
// else |
132 |
// prgDownload.Maximum = value; |
133 |
//} |
134 |
//void CrossSafeSetTextMethod(String text) |
135 |
//{ |
136 |
// if (this.InvokeRequired) |
137 |
// this.Invoke(csst, text); |
138 |
// else |
139 |
// this.Text = text; |
140 |
//} |
141 |
|
142 |
private void ExitButton(object sender, MouseButtonEventArgs e) |
143 |
{ |
144 |
Close(); |
145 |
} |
146 |
|
147 |
private void Minimization(object sender, MouseButtonEventArgs e) |
148 |
{ |
149 |
this.WindowState = WindowState.Minimized; |
150 |
} |
151 |
|
152 |
private void Window_Loaded(object sender, RoutedEventArgs e) |
153 |
{ |
154 |
// updater.StartUpdate(callbackFunc); |
155 |
} |
156 |
private void callbackFunc(int entireProgress, int partProgress) |
157 |
{ |
158 |
entire.Value = entireProgress; |
159 |
part.Value = partProgress; |
160 |
if (entireProgress == 100 && partProgress == 100) //업데이트가 끝나면 |
161 |
{ |
162 |
Close(); |
163 |
} |
164 |
} |
165 |
|
166 |
private void Button_Click(object sender, RoutedEventArgs e) |
167 |
{ |
168 |
Thread Down = new Thread(new ThreadStart(DownLoad)); |
169 |
Down.Start(); |
170 |
//DownLoad(); |
171 |
} |
172 |
|
173 |
// UpdateClient updater; |
174 |
|
175 |
//public Updater() |
176 |
//{ |
177 |
// InitializeComponent(); |
178 |
// MessageBox.Show("업데이트 내역"); |
179 |
// //updater = new UpdateClient(); |
180 |
// //updater.GetUpdateList("http://" + url, project); |
181 |
//} |
182 |
|
183 |
//private void ExitButton(object sender, MouseButtonEventArgs e) |
184 |
//{ |
185 |
// Close(); |
186 |
//} |
187 |
|
188 |
//private void Minimization(object sender, MouseButtonEventArgs e) |
189 |
//{ |
190 |
// this.WindowState = WindowState.Minimized; |
191 |
//} |
192 |
|
193 |
//private void Window_Loaded(object sender, RoutedEventArgs e) |
194 |
//{ |
195 |
// // updater.StartUpdate(callbackFunc); |
196 |
//} |
197 |
//private void callbackFunc(int entireProgress, int partProgress) |
198 |
//{ |
199 |
// entire.Value = entireProgress; |
200 |
// part.Value = partProgress; |
201 |
// if (entireProgress == 100 && partProgress == 100) //업데이트가 끝나면 |
202 |
// { |
203 |
// Close(); |
204 |
// } |
205 |
//} |
206 |
} |
207 |
} |