/// <summary> /// 받은 데이터를 처리한다.(주로 서버에서 사용) /// </summary> /// <param name="packetManager">패킷 매니저</param> /// <param name="packetHandlerManager">패킷 핸들러 매니저</param> /// <param name="receiveBuffer">데이터가 저장되어 있는 버퍼</param> /// <param name="receiveBufferLength">데이터가 저장되어 있는 버퍼의 길이(데이터의 길이)</param> /// <returns>성공 유무</returns> public override bool Receive( IPacketManager packetManager, cPacketHandlerManager packetHandlerManager, ArraySegment <Byte> receiveBuffer, int receiveBufferSize) { cLogger.Information("encode a received data\r\n"); string data = Encoding.UTF8.GetString(receiveBuffer.Array, 0, receiveBufferSize); data = data.Replace("\0", ""); data = data.Replace("\\", ""); cLogger.Information("unmarshal a received data\r\n"); IPacket packet = Marshaller.Unmarshal(data, packetManager); //AccountID 세팅을 해야 한다 하고라? if (null == packet) { cLogger.Error( "packet is not allocated (account_id: {0}, peer_id: {1}, data: {2}\r\n", PeerId, data); return(false); } cLogger.Information("execute a packet handler\r\n"); packetHandlerManager.Execute(this, packet); cLogger.Information("completed that a received data is executed\r\n"); return(true); }
/// <summary> /// 받은 데이터를 처리한다.(주로 서버에서 사용) /// </summary> /// <param name="packetManager">패킷 매니저</param> /// <param name="packetHandlerManager">패킷 핸들러 매니저</param> /// <param name="receiveBuffer">데이터가 저장되어 있는 버퍼</param> /// <param name="receiveBufferLength">데이터가 저장되어 있는 버퍼의 길이(데이터의 길이)</param> /// <returns>성공 유무</returns> public override bool Receive( IPacketManager packetManager, cPacketHandlerManager packetHandlerManager, ArraySegment <Byte> receiveBuffer, int receiveBufferLength) { return(false); }
/// <summary> /// 패킷을 추출한다. /// </summary> /// <param name="packetManager">패킷 매니저</param> /// <param name="packetHandlerManager">패킷 핸들러 매니저</param> /// <param name="data">추출할 데이터</param> /// <returns>성공 유무</returns> public bool ExtractPacket(IPacketManager packetManager, cPacketHandlerManager packetHandlerManager, string data) { //딸랑 packet 가 하는짓은 어떤 패킷 핸들러의 ResultCode 의 값이 success 인지 디시리얼된 값을 가져오는 짓이다. IPacket packet = Marshaller.Unmarshal(data, packetManager); if (null == packet) { return(false); } //그럼 다시 이걸 핸들 메니저의 실행으로 가면 packetHandlerManager.Execute(this, packet); return(true); }
/// <summary> /// 버퍼에 저장되어 있는 내용을 처리한다.(주로 클라이언트에서 사용) /// </summary> /// <param name="packetManager">패킷 매니저</param> /// <param name="packetHandlerManager">패킷 핸들러 매니저</param> /// <returns>성공 유무</returns> public override void Receive(IPacketManager packetManager, cPacketHandlerManager packetHandlerManager) { lock (ReceivedDataQueueLock) { for (int loop1 = 0; ReceivedDataQueue.Count > loop1; ++loop1) { cHTTPData httpData = ReceivedDataQueue.Dequeue(); if (false == ExtractPacket(packetManager, packetHandlerManager, httpData.Data)) { //cLogger.Warning("cannot extract packet (data: {0})\r\n", httpData.Data); continue; } } } }
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { //Peer = new cChatPeer(new cJSONMarshaller(), "ws://localhost:61455/WebSocketDataNoEnc/WebPacketReceiver/Game"); //Peer = new cChatPeer(new cJSONMarshaller(), "ws://localhost:61455/api/WebPacketReceiver/Chat"); //Peer = new cChatPeer(new cJSONMarshaller(), "ws://localhost:54427/WebSocketChatNoEnc/WebPacketReceiver"); Peer = new cChatPeer(new cJSONMarshaller(), "ws://localhost:54427/WebSocketChatNoEnc/PacketReceiver"); PacketManager = new cPacketManager(); PacketManager.Add(new cPKTChatLogin()); PacketManager.Add(new cPKTChatLoginResult()); PacketManager.Add(new cPKTChatRoomChange()); PacketManager.Add(new cPKTChatRoomChangeResult()); PacketManager.Add(new cPKTSay()); PacketManager.Add(new cPKTSayResult()); PacketManager.Add(new cPKTSayNotify()); PacketManager.Add(new cPKTGameLogin()); PacketManager.Add(new cPKTGameLoginResult()); PacketManager.Add(new cPKTIdentify()); PacketManager.Add(new cPKTIdentifyResult()); PacketManager.Add(new cPKTAccountLoad()); PacketManager.Add(new cPKTAccountLoadResult()); PacketManager.Add(new cPKTInit()); PacketManager.Add(new cPKTInitResult()); PacketHandlerManager = new cPacketHandlerManager(); PacketHandlerManager.Add(ePacketId.cPKTChatLoginResult, new cPKTChatLoginResultHandler()); PacketHandlerManager.Add(ePacketId.cPKTChatRoomChangeResult, new cPKTChatRoomChangeResultHandler()); PacketHandlerManager.Add(ePacketId.cPKTSayResult, new cPKTSayResultHandler()); PacketHandlerManager.Add(ePacketId.cPKTSayNotify, new cPKTSayNotifyHandler()); ReceivedDataQueueTimer = new System.Timers.Timer(100); ReceivedDataQueueTimer.Elapsed += new ElapsedEventHandler(OnReceivedDataQueueTimer); ReceivedDataQueueTimer.Enabled = true; ReceivedDataQueueTimer.Start(); SocketChatLogin_Click(); } }
/// <summary> /// 버퍼에 저장되어 있는 내용을 처리한다.(주로 클라이언트에서 사용) /// </summary> /// <param name="packetHandlerManager">패킷 핸들러 매니저</param> /// <returns>성공 유무</returns> public override void Receive(IPacketManager packetManager, cPacketHandlerManager packetHandlerManager) { }
/// <summary> /// 버퍼에 저장되어 있는 내용을 처리한다.(주로 클라이언트에서 사용) /// </summary> /// <param name="packetManager">패킷 매니저</param> /// <param name="packetHandlerManager">패킷 핸들러 매니저</param> /// <returns>성공 유무</returns> public abstract void Receive(IPacketManager packetManager, cPacketHandlerManager packetHandlerManager);
/// <summary> /// 받은 데이터를 처리한다.(주로 서버에서 사용) /// </summary> /// <param name="packetManager">패킷 매니저</param> /// <param name="packetHandlerManager">패킷 핸들러 매니저</param> /// <param name="receiveBuffer">데이터가 저장되어 있는 버퍼</param> /// <param name="receiveBufferLength">데이터가 저장되어 있는 버퍼의 길이(데이터의 길이)</param> /// <returns>성공 유무</returns> public abstract bool Receive( IPacketManager packetManager, cPacketHandlerManager packetHandlerManager, ArraySegment <Byte> receiveBuffer, int receiveBufferLength);