본문 바로가기

개발이야기

실버라이트로 SMS

예전부터 저의 전용 SMS을 만들기 위해 많은 생각을 해왔습니다. 순수하게 SMS을 보내는게 아니라 좀 더 획기적이길 바랬던것이기에 생각을 많이 해본 모양입니다.
일단 정식 버젼인 아닌 맛보기 형태로 제작하기로 결심하였으며 WPF/E 시절에 다뤄봤다가 실버라이트로 명칭이 바뀐 후 못만져보았던 참에 손에 익힐겸 만들어 보았습니다.
개발 플랫폼 : 실버라이트 1.1 ALPHA REFRESH
툴 : 비주얼스튜디오 2008, 블랜드2
http://Jeongzugo.com/sms

<결과이미지>

1

초기 화면이며 우편봉투 위를 클릭하면 SMS내용을 적을 수 있는 페이지가 나오게 됩니다.

3

페이지가 나오면 내용을 작성 후 엔터를 누르면 문자가 발송되게 됩니다.

이 Application의 흐름단위는 사용자에게 직접 보여주는 HTML과 HTML을 동적으로 나타내는 자바스크립트 실버라이트의 표현을 담당하는 XAML과 동적으로 처리하는 XAML.CS가 있으며 사용자의 입력에 반응을 하게 됩니다.

letter

위 다이어그램은 개체로 표현하여 사용자의 입력에 대한 반응입니다.

여기서 내용입력은 아직 실버라이트에서 한글은 물론 영어 이외에 언어들을 지원하지 않아 복잡한 편법을 사용하여야 합니다. 편법은 사용자입력을 HTML의 INPUT 컨트롤이 담당하며 사용자가 입력시에 INPUT은 이벤트가 발생하여 입력된 글을 XAML에 표시하라는 복잡한 절차를 거치게 됩니다.

<CSS>
#inputBox{position:absolute;border:1px;border-style:solid;width: 0px; height: 0px;top:100px;left:100px}
#inputControl{width: 0px; height: 0px;}

<HTML>
<div id="inputBox"><input id="inputControl" type="text" style="top:-100px" onkeydown="inputKeyDown()" onkeyup="inputKeyUp()" /></div>

<JS>
function inputKeyDown()
{
if (event.keyCode == 13) 

SendSMS(); 

inputKey();
}

function inputKeyUp()

inputKey();
}
function inputKey()
{

var elinput = document.getElementById("inputControl"); 
var control = document.getElementById("SilverlightControl");

if(elinput.value.length == 0) 

inputstr = ''; 
control.Content.basic.InputString(''); 

else if(inputstr != elinput.value) 

inputstr = elinput.value;
control.Content.basic.InputString(inputstr);
}
}
function inputMode()
{
document.getElementById("inputControl").focus();
}

위 코드를 보시면 입력 컨트롤은 교묘하게 실버라이트 오브젝트 뒤에 숨어 있으면서 사용자의 입력을 모두 받는 것이죠.
여기서 또 의문이 되는건 숨어 있으면 어떻게 포커스를 맞추냐 하겠지만 눈치 채신 분도 있겠지만 그건 focus()함수만 실행하면 말끔이 해결이 됩니다. 이젠 한글입력은 간단히 해결 되었으며 XAML은 이 입력의 값을 받아와 표현해 주면 끝나게 됩니다.
쉬운 방법이지만 한편으론 왜 이렇게 까지 해야하나 하기도 합니다. 추가로 이벤트를 onkeydown="inputKeyDown()" onkeyup="inputKeyUp()" 이렇게 두개를 하였는데 이는 키보드를 누루고 있는 것도 포함시키기 위해서 입니다.

여기서 또 살펴봐야할 문제는 자바스크립트와 관리된코드(C#)와의 통신입니다.
이 방법은 실버라이트의 퀵스타트How to: Call Managed Code from JavaScript를 보시거나 공도소프트[Silverlight] 키보드 입력과 마우스 휠 이벤트 지원을 보시면 됩니다.

만들어본 소감

C#과 WPF에 대해 지식이 있는 저에게는 아주 쉬운 작업이었으며 디자인과 코드의 분별됨 또한 확실해진듯 하였습니다. 기술의 간결함으로 처음 사용자에 대한 좀더 쉬운 접근이 예상되고 무엇보다 툴의 인텔리센스와 같은 강력한 기능을 활용하며 개발할 수 있다는 것이었습니다. 하지만 안타까운 것은 아직 정식버젼이 아니라는 것에 있습니다. 한글과 같은 여러가지 문제점은 있지만 그것은 베타도 아닌 알파이므로 지적할 사항은 아닌듯 싶습니다.

무엇보다 정식버젼이 무척 기대가 됩니다.
비록 테스트겸 마구잡이식 소스이지만 혹시나 공개를 해봅니다.

SMS.zip

-정주에게 문자 보내보기-