NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • NGM 5
  • 매뉴얼

    NGM 5의 매뉴얼입니다.

    NGM 5

    NGM 5의 매뉴얼입니다.

    본 사이트의 컨텐츠는 저작권법의 보호를 받으므로 무단 복사, 게재, 배포 등을 금합니다.

    커스텀 [2부] 커스텀 스케줄러 만들기. (입력한 시간에 특정 위치 클릭하기)

    페이지 정보

    본문

    안녕하세요. 소심비형입니다. 1부에 이어 2부를 진행합니다. 1부에서 개발하기 위한 환경을 모두 갖추었습니다. 그래서, 오늘은 NGM 프레임워크를 사용하여 스케줄러를 등록하고 활용하는 방법에 대해 알아보도록 하겠습니다. 물론, 제목과 같이 마우스 클릭이어도 되고 앞에서 배운 이미지 체크를 통해 카카오톡이나 기타 다른 메신저로 결과를 전송할 수도 있습니다. 커스텀이니 내가 원하는 기능을 마음대로 구현할 수 있죠^^;

     

    비주얼 스튜디오에서 이전 시간에 만든 CustomScheduler 프로젝트를 엽니다. 그리고, 이전 글의 참조 추가하는 방법을 참고하여 아래와 같이 System.Drawing을 추가하세요. 마우스의 좌표를 나타내는 Point 형식이 들어있는 라이브러리입니다. 

    img.png

     

     

    아래는 전체 코드입니다. 이번에는 친절하게(?) 설명도 추가해봤습니다-_-;

    SchedulerModel.cs
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    using NGM.Models.TypeEditor;
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Drawing;
    using System.Drawing.Design;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
     
    namespace CustomScheduler
    {
        public class SchedulerModel : NGM.Models.Interface.BaseCustomToolModel
        {
            /// <summary>
            /// 커스텀 액션 목록의 카테고리 표시 이름입니다.
            /// </summary>
            public override string DisplayCategory { get { return "스케줄러"; } }
     
            /// <summary>
            /// 커스텀 액션 카테고리에 포함되는 액션의 이름입니다.
            /// </summary>
            public override string DisplayName { get { return "스케줄러 클릭"; } }
     
            /// <summary>
            /// 시작 날짜를 선택합니다. 이 값을 설정하지 않으면 시간만 사용합니다.
            /// </summary>
            public DateTime StartDate { get; set; }
     
            /// <summary>
            /// 시작 시간을 선택합니다. 이 값은 필 수 입력 값입니다.
            /// </summary>
            public DateTime StartTime { get; set; }
     
            /// <summary>
            /// 스케줄러가 동작할 때 마우스가 클릭할 좌표입니다.
            /// </summary>
            public Point Mouse { get; set; }
     
            /// <summary>
            /// 스크립트가 실행될 때 이 메소드가 자동으로 호출됩니다.
            /// </summary>
            public override void Execute()
            {
                throw new NotImplementedException();
            }
        }
    }
    cs
     

     

    딱히 조건을 분기해야 하는 예제가 아니라서 BaseCustomToolModel을 상속 받아서 구현했습니다. 물론, BaseCustomConditionToolModel을 사용해도 상관없습니다. 분기에 따라서 처리 로직이 달라져야 한다면 컨디션 툴 모델을 사용해야 합니다. 이 프로젝트를 빌드하고 NGM에 추가하세요. 아래 그림처럼 솔루션 또는 프로젝트에서 우클릭 후 빌드하세요.

    img.png

     

     

    NGM을 실행하세요. 메뉴의 관리자에서 모듈을 추가합니다.

    1. 도구 모듈 설치 클릭
    2. CustomScheduler > bin > Debug 폴더로 이동
    3. CustomScheduler.dll 선택
    4. 열기 클릭
    img.png
     

     

    아래 그림처럼 ①스케줄러가 추가된 것을 볼 수 있습니다.

    img.png

     

     

    아래 영상처럼 스크립트를 생성하고 커스텀 액션을 추가하세요. 여기까지 잘 동작하나요? .NET에서 제공하는 DateTime을 프로퍼티로 변환하면 날짜만 선택할 수 있습니다. 그래서 시간을 선택하기 위한 기능이 필요하죠. 

    영상이 짤리면 클릭해서 보세요!

    img.gif

     

     

    우리는 날짜와 시간을 각각 설정할 수 있도록 속성을 2개 추가했습니다. 하지만, 날짜만 선택할 수 있는 컨트롤이 표시되죠? 시간을 선택할 수 있도록 코드를 약간 변경해야 합니다.

    SchedulerModel.cs
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    using NGM.Models.TypeEditor;
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Drawing;
    using System.Drawing.Design;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
     
    namespace CustomScheduler
    {
        public class SchedulerModel : NGM.Models.Interface.BaseCustomToolModel
        {
            /// <summary>
            /// 커스텀 액션 목록의 카테고리 표시 이름입니다.
            /// </summary>
            public override string DisplayCategory { get { return "스케줄러"; } }
     
            /// <summary>
            /// 커스텀 액션 카테고리에 포함되는 액션의 이름입니다.
            /// </summary>
            public override string DisplayName { get { return "스케줄러 클릭"; } }
     
            /// <summary>
            /// 시작 날짜를 선택합니다. 이 값을 설정하지 않으면 시간만 사용합니다.
            /// </summary>
            public DateTime StartDate { get; set; }
     
            /// <summary>
            /// 시작 시간을 선택합니다. 이 값은 필 수 입력 값입니다.
            /// </summary>
            [Editor(typeof(TimePickerEditor), typeof(UITypeEditor))]
            public string StartTime { get; set; }
     
            /// <summary>
            /// 스케줄러가 동작할 때 마우스가 클릭할 좌표입니다.
            /// </summary>
            public Point Mouse { get; set; }
     
            /// <summary>
            /// 스크립트가 실행될 때 이 메소드가 자동으로 호출됩니다.
            /// </summary>
            public override void Execute()
            {
                throw new NotImplementedException();
            }
        }
    }
    cs
     

     

    위 코드에서 34~35라인이 변경되었습니다. 우선 34라인에서 NGM 프레임워크가 제공하는 특성을 달아줬습니다. 그리고, 어떤 날짜 포맷을 사용할지 알 수 없기 때문에 반환 값의 형식이 String으로 변경되었죠. 이 부분은 여러 가지 비주얼 스튜디오의 기능도 설명해야 해서 유튜브로 진행하도록 하겠습니다.

     

     

     

    위 동영상을 잘 보셨나요? 동영상에서 사용된 전체 코드는 아래와 같습니다. 내가 만든 커스텀 액션 또는 에디터, 플레이어들은 모두 암호화가 가능합니다. 영상에서 설명하지 못했지만... 차근 차근 하나씩 진행해 나가면서 어떻게 암호화하고 인증해야 하는지에 대해서 알아보는 시간도 가지면 좋겠군요. 아직 먼 이야기지만요^^; 한 가지 팁은 추가로 override 할 수 있는 BeforeProcess와 AfterProcess를 구현하는 것입니다. 이 두 가지 메서드에서 인증 관련 모듈을 추가하면 되는 거죠. 물론, 자신만의 인증 프로세스를 가지고 있어야 한다는 전제 조건이 붙긴 합니다.

    SchedulerModel.cs
    img.png
     
     

    이번 예제에서는 문자열로 비교했지만, DateTime끼리 Operator(연산자)를 이용할 수도 있습니다. 사실 A 보다 B가 크다는 A < B와 같이 "<" 연산자를 사용해도 됩니다. "=<"와 같이 같거나 크다도 되죠. 하지만 특정 시간에 주기적으로 반복하려면 정확하게 일치해야 합니다. 만약 "<"를 사용한다면 작을 때는 문제가 없지만, 해당 시간이 지난 시점부터는 계속 True 결과만 나오기 때문에 한번 실행하고 싶었던 액션이 계속 실행되는 문제를 발생시킵니다. 개발은 여러 가지 방법으로 다양하게 문제를 해결할 수 있습니다. 하지만, 가장 좋은 방법을 찾는 것은 상황과 여건에 따라 달라질 수 있으므로 정답이 없습니다. 최적의 코드를 만드는 건 전적으로 여러분의 몫인 거죠^^;

     

    개발자에게 후원하기

    img.jpg

     

     

    추천, 구독, 홍보 꼭~ 부탁드립니다.

    여러분의 후원이 빠른 귀농을 가능하게 해 줍니다~ 답답한 도시를 벗어나 귀농하고 싶은 개발자~

    감사합니다~

     
    • 네이버 공유하기
    • 페이스북 공유하기
    • 트위터 공유하기
    • 카카오스토리 공유하기
    추천0 비추천0

    댓글목록

    등록된 댓글이 없습니다.