/// <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);
        }
Ejemplo n.º 2
0
        /// <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);
        }