살다

AJAX을 이용한 실시간 쪽지 본문

프로그래밍

AJAX을 이용한 실시간 쪽지

텅스텐필름 2007. 3. 2. 11:43
AJAX을 이용한 실시간 쪽지 구현..  엄준일 / umjunil  
 

http://ajax.schwarz-interactive.de/csharpsample/default.aspx
※ AJAX.DLL을 참조 하셔야 합니다.

 web.config에 다음을 추가합니다.
<httpHandlers>
    <add verb="POST,GET" path="ajax/*.ashx" type="Ajax.PageHandlerFactory, Ajax" />
    </httpHandlers>

다음의 스크립트를 추가합니다.
<script>
 setTimeout("memocheck()",3000);     //3초마다 쪽지함을 검색한다.
 
 function memocheck()
 {
   var c=Right.MemoCheck();     //AJAX으로 서버의 함수를 호출한다.
   if(c.value>0)                        // 내 쪽지함에 쪽지가 있다면..
   {                                        // 팝업창을 연다.
    open('/community/mail.aspx?id=<%=userid%       >','','width=300,height=320,location=no,status=no,scrollbar=no');
   }
   else setTimeout("memocheck()",3000);
 }
</script>

어떤분은 임의로 사용자가 mail.aspx?id=xxxx 로 접근 할 경우 어떻게 하냐고, 보안에 대해서 질타를 받을 것같네요

이부분은 여러분이 해결해 보세요 .. 어렵진 않을 것 같네영^^;;;
쪽지가 도착했을 경우 팝업을 하구, 그렇지 않으면 계속 타이머를 동작한다.

위 스크립트 코드 비하인드:
[Ajax.AjaxMethod]
  public int MemoCheck()
  {
    ... 디비 연결
   string strcmd=string.Format("select count(*) from Mail where ID='{0}' and Send=0",Context.User.Identity.Name);
   cn.Open();
   SqlCommand cmd=new SqlCommand(strcmd,cn);

   try {

       int cnt=(int)cmd.ExecuteScalar();

       return cnt;

   }

   catch ( Exception e) { throw e; }

   finaly { 디비 닫기 }
  }
위 코드는 자신의 ID로 내게 도착한 쪽지의 갯수를 리턴합니다.
Send가 0일 경우는 도착하지 않은 쪽지입니다. default값은 0 입니다.

private string userid;

private void Page_Load(object sender, System.EventArgs e)
  {

       userid=Context.User.Identity.Name;
       Ajax.Utility.RegisterTypeForAjax(typeof(Right));
  }
위 코드로 AJAX을 이용할 클래스를 페이지로드에서 등록해야 합니다. (저는 Right.ascx의 클래스이므로 Right를 등록했습니다)

쪽지함 팝업 스크립트:
<body MS_POSITIONING="FlowLayout" onunload="opener.setTimeout('memocheck()',3000);">
BODY에 다음과 같이 추가하여 쪽지함을 닫을경우 다시 부모창의 타이머를
동작 시킵니다.

도착한 쪽지가 있어 팝업창이 열릴경우 Send필드는 1(true)로 업데이트 필수~~


쪽지함 테이블입니다.
create table Mail

(

    Num int identity(1,1) primary key not null,

    ID varchar(20) not null,

    Title varchar(50) not null,

    Content text not null,

    PostDate datetime not null default getdate(),

    PostIP varchar(15) not null,

    FromID varchar(20) not null,

    MailRead bit default 0,

    Send bit default 0

)

go


출처 : http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=8&MAEULNo=5&no=586&ref=586

반응형

'프로그래밍' 카테고리의 다른 글

PTviewer-속성  (0) 2008.01.04
마이크로소프트 닷넷, 소스 공유한다  (0) 2007.10.08
iis6.0 에서 파일 업다운 제한  (2) 2007.05.02