/// <summary> /// 네트워크로부터 받는 메시지 처리 /// 프로토콜을 분석한 후 IClientEventListener 로 전달한다. /// 처리흐름 : [ClientIoHandler] -> IClientEventListener -> ClientEventAbstract /// </summary> /// <param name="buffer"></param> public void MessageReceived(IoBuffer buffer) { Protocol protocol = Protocol.GetCode(buffer.getShort()); Log.game.Debug("handler.MessageReceived.protocol : " + protocol.Value); //EvnetListener로 넘긴다 listener.EventReceive(protocol, buffer); }
/// <summary> /// IClieventListener.EventReceive /// 처리흐름 : ClientIoHandler -> [IClientEventListener] -> ClientEventAbstract -> IUIEventListener /// </summary> /// <param name="protocol"></param> /// <param name="buffer"></param> public void EventReceive(Protocol protocol, IoBuffer buffer) { Log.game.Debug("controller.EventReceived : " + protocol.Desc); //프로토콜에 해당하는 ClientEvent 반환 ClientEventAbstract clientEvent = ClientEventFactory.getEvent(protocol); if( clientEvent == null ) return; try{ //이벤트 처리 clientEvent.Set(buffer); }catch{ }finally{ //UIEventListener에 전달하기 위해 등록 AddClientEvent(clientEvent); } }
/// <summary> /// IClieventListener.EventReceive /// 처리흐름 : ClientIoHandler -> [IClientEventListener] -> ClientEventAbstract -> IUIEventListener /// </summary> /// <param name="protocol"></param> /// <param name="buffer"></param> public void EventReceive(Protocol protocol, IoBuffer buffer) { Log.game.Debug("controller.EventReceived : " + protocol.Desc); //프로토콜에 해당하는 ClientEvent 반환 ClientEventAbstract clientEvent = ClientEventFactory.getEvent(protocol); if (clientEvent == null) { return; } try{ //이벤트 처리 clientEvent.Set(buffer); }catch { }finally{ //UIEventListener에 전달하기 위해 등록 AddClientEvent(clientEvent); } }
/// <summary> /// 수신된 패킷 처리 /// </summary> /// <param name="buffer"></param> protected override void ReceivePacket(IoBuffer buffer) { hResult = RCode.GetCode(buffer); }
//수신된 packet 처리 protected abstract void ReceivePacket(IoBuffer buffer);
/// <summary> /// 메시지 수신 /// </summary> /// <param name="ar"></param> public void MessageReceived(IAsyncResult ar) { int bytesRead; try { bytesRead = client.GetStream().EndRead(ar); if(Log.game.IsDebugEnabled) Log.game.Debug("receive bytes: " + bytesRead); //Server disconnected if( bytesRead < 1 ) { Disconnect(); return; } IoBuffer buffer = new IoBuffer(readBuffer); handler.MessageReceived(buffer); buffer.dispose(); // start a new asynchronous read client.GetStream().BeginRead(readBuffer, 0, RECEIVE_BUFFER_SIZE, new AsyncCallback(MessageReceived), null); } catch { Disconnect(); } }
/// <summary> /// ClientEvent를 처리하는곳 /// 처리흐름 : ClientIoHandler -> IClientEventListener -> [ClientEventAbstract] -> ClientEvent /// </summary> /// <param name="buffer"></param> public void Set(IoBuffer buffer) { ReceivePacket(buffer); EventProcess(); }
public static String getString(IoBuffer buffer) { int len = buffer.getInt(); if( len == 0 ) { return ""; }else { return encoding.GetString(buffer.get(len)); } }
public static bool getBoolean(IoBuffer buffer) { byte b = buffer.get(); return b == 0 ? false : true; }
protected override void ReceivePacket(IoBuffer buffer) { }
public static bool getBoolean(IoBuffer buffer) { byte b = buffer.get(); return(b == 0 ? false : true); }
public static RCode GetCode(IoBuffer buffer) { return GetCode(buffer.getShort()); }