프로젝트

일반

사용자정보

통계
| 브랜치(Branch): | 개정판:

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
}
클립보드 이미지 추가 (최대 크기: 500 MB)