markus / MarkusLogview / TEST_WPF_MARKUS / MainWindow.xaml.cs @ 84578b97
이력 | 보기 | 이력해설 | 다운로드 (4.82 KB)
1 |
using IKCOM; |
---|---|
2 |
using Microsoft.AspNet.SignalR.Client; |
3 |
using System; |
4 |
using System.Collections.Generic; |
5 |
using System.Linq; |
6 |
using System.Net.Http; |
7 |
using System.Text; |
8 |
using System.Threading.Tasks; |
9 |
using System.Windows; |
10 |
using System.Windows.Controls; |
11 |
using System.Windows.Data; |
12 |
using System.Windows.Documents; |
13 |
using System.Windows.Input; |
14 |
using System.Windows.Media; |
15 |
using System.Windows.Media.Imaging; |
16 |
using System.Windows.Navigation; |
17 |
using System.Windows.Shapes; |
18 |
|
19 |
namespace TEST_WPF_MARKUS |
20 |
{ |
21 |
/// <summary> |
22 |
/// MainWindow.xaml에 대한 상호 작용 논리 |
23 |
/// </summary> |
24 |
public partial class MainWindow : Window |
25 |
{ |
26 |
public String UserName { get; set; } |
27 |
public IHubProxy HubProxy { get; set; } |
28 |
public HubConnection Connection { get; set; } |
29 |
|
30 |
//const string ServerURI = "http://localhost:8089/signalr"; // local test url |
31 |
const string ServerURI = LogviewHubBaseURI.Url + LogviewHubBaseURI.Port + LogviewHubBaseURI.SignalrPath; |
32 |
|
33 |
public MainWindow() |
34 |
{ |
35 |
InitializeComponent(); |
36 |
HubConnectionAsync(); |
37 |
} |
38 |
|
39 |
private async void HubConnectionAsync() |
40 |
{ |
41 |
|
42 |
Connection = new HubConnection(ServerURI); |
43 |
HubProxy = Connection.CreateHubProxy("MarkusLicenseHub"); |
44 |
|
45 |
|
46 |
// 강제종료 응답을 받는 메서드 |
47 |
HubProxy.On<bool>("ForceTerminate", IsTerminate => |
48 |
{ |
49 |
// 반환값 : true, false |
50 |
// true 이면 강제 종료 |
51 |
// false 이면 서버에서 로그를 찾을 수 없다거나 문제가 있으면 false 를 반환한다. |
52 |
if (IsTerminate) |
53 |
{ |
54 |
// 저장을 하고 종료 |
55 |
// ... code |
56 |
|
57 |
// SignalR Disconnection |
58 |
Connection.Stop(); |
59 |
// Program Kill |
60 |
System.Diagnostics.Process.GetCurrentProcess().Kill(); |
61 |
} |
62 |
|
63 |
}); |
64 |
|
65 |
try |
66 |
{ |
67 |
await Connection.Start(); |
68 |
|
69 |
await HubProxy.Invoke<int>("ConnectionMarkus", "hyosung008").ContinueWith(task => |
70 |
{ |
71 |
if (task.IsFaulted) |
72 |
{ |
73 |
// SignalR Error |
74 |
} |
75 |
else |
76 |
{ |
77 |
|
78 |
// 반환값 |
79 |
// -1 : 다른 기기에서 접속중 |
80 |
// 1 : 정상 실행 |
81 |
// 2 : 라이센스 없는 사용자 |
82 |
// 500 : 서버 에러 |
83 |
int status = task.Result; |
84 |
|
85 |
if (status == -1) |
86 |
{ |
87 |
MessageBoxResult messageBoxResult = System.Windows.MessageBox.Show("다른 기기에서 로그인 중입니다. 강제 로그아웃 하고 현재 기기에서 로그인 하시겠습니까? ", "알림", System.Windows.MessageBoxButton.YesNo); |
88 |
|
89 |
if (messageBoxResult == MessageBoxResult.Yes) |
90 |
{ |
91 |
|
92 |
HubProxy.Invoke<bool>("ForceConnectionMarkus", "admin", "DOFTECH").ContinueWith(ret => |
93 |
{ |
94 |
|
95 |
if (ret.IsFaulted) |
96 |
{ |
97 |
// SignalR Error |
98 |
} |
99 |
else |
100 |
{ |
101 |
|
102 |
// 반환값 ( true , false ) |
103 |
if (ret.Result) |
104 |
{ |
105 |
// 다른 기기 프로그램에게 종료 메세지 전송 성공 |
106 |
} |
107 |
else |
108 |
{ |
109 |
// 실패 |
110 |
} |
111 |
|
112 |
} |
113 |
|
114 |
}); |
115 |
|
116 |
} |
117 |
else |
118 |
{ |
119 |
|
120 |
} |
121 |
} |
122 |
else if (status == 1) |
123 |
{ |
124 |
// 정상 실행 |
125 |
} |
126 |
else if (status == 2) |
127 |
{ |
128 |
// 라이센스 없는 사용자가 실행 |
129 |
} |
130 |
else if ( status == 500) |
131 |
{ |
132 |
// 서버 에러 |
133 |
} |
134 |
|
135 |
} |
136 |
|
137 |
}); |
138 |
|
139 |
} |
140 |
catch (HttpRequestException ex ) |
141 |
{ |
142 |
Console.WriteLine(ex); |
143 |
throw; |
144 |
} |
145 |
|
146 |
} |
147 |
|
148 |
|
149 |
} |
150 |
} |