메시지를 수신하는 서버에서는 수신한 버퍼의 내용을 분석하는 부분이 필요합니다. 여기에서는 Meta 클래스를 정의하여 분석한 정보를 표현합시다.
public class Meta {
수신한 메시지 종류를 속성으로 제공합시다.
public MsgType Mt { get; private set; }
누르거나 뗀 키를 속성으로 제공합시다.
public int Key { get; private set; }
마우스 좌표를 속성으로 제공합시다.
public Point Now { get; private set; }
생성자는 수신한 버퍼를 입력 인자로 받습니다.
public Meta(byte[] data) {
메시지 종류를 설정하세요.
Mt = (MsgType)data[0];//메시지 종류 설정
메시지 종류에 따라 수신한 버퍼를 변환합니다. 키를 누르거나 뗀 이벤트일 때는 수신한 버퍼의 내용을 키로 변환하고 마우스 이동 이벤트일 때는 좌표로 변환하세요.
switch (Mt)//메시지 종류에 따라 { case MsgType.MT_KDOWN: case MsgType.MT_KEYUP: MakingKey(data); break;//데이터를 키로 변환 case MsgType.MT_M_MOVE: MakingPoint(data); break;//데이터를 좌표로 변환 } }
마우스 이동 이벤트일 때 좌표로 변환하는 MakingPoint 메서드를 정의합시다.
private void MakingPoint(byte[] data) {
data를 좌표로 변환하세요.
//data를 좌표로 변환 Point now = new Point(0, 0);
인덱스 1~4까지 4바이트는 x좌표, 5~8까지 4바이트에는 y 좌표값으로 변환합니다.
now.X = (data[4] << 24) + (data[3] << 16) + (data[2] << 8) + (data[1]); now.Y = (data[8] << 24) + (data[7] << 16) + (data[6] << 8) + (data[5]); Now = now; }
수신한 데이터를 키로 변환하는 MakingKey 메서드를 정의하세요.
private void MakingKey(byte[] data) {
data를 키로 변환하세요.
//data를 키로 변환 Key = (data[4] << 24) + (data[3] << 16) + (data[2] << 8) + (data[1]); } }
다음은 이번 실습에서 작성한 소스 코드입니다.
//Meta.cs using System.Drawing; namespace 원격제어기 { /// <summary> /// 원격 제어 이벤트 수신 정보를 변환한 클래스 /// </summary> public class Meta { /// <summary> /// 원격 제어 이벤트 종류 - 가져오기 /// </summary> public MsgType Mt { get; private set; } /// <summary> /// 누르거나 뗀 키 - 가져오기 /// </summary> public int Key { get; private set; } /// <summary> /// 마우스 좌표 - 가져오기 /// </summary> public Point Now { get; private set; } /// <summary> /// 생성자 /// </summary> /// <param name="data">수신한 원격 제어 이벤트 </param> public Meta(byte[] data) { Mt = (MsgType)data[0];//메시지 종류 설정 switch (Mt)//메시지 종류에 따라 { case MsgType.MT_KDOWN: case MsgType.MT_KEYUP: MakingKey(data); break;//데이터를 키로 변환 case MsgType.MT_M_MOVE: MakingPoint(data); break;//데이터를 좌표로 변환 } } private void MakingPoint(byte[] data) { //data를 좌표로 변환 Point now = new Point(0, 0); now.X = (data[4] << 24) + (data[3] << 16) + (data[2] << 8) + (data[1]); now.Y = (data[8] << 24) + (data[7] << 16) + (data[6] << 8) + (data[5]); Now = now; } private void MakingKey(byte[] data) { //data를 키로 변환 Key = (data[4] << 24) + (data[3] << 16) + (data[2] << 8) + (data[1]); } } }