コード例 #1
0
        /// <summary>
        /// 패킷을 추가한다.
        /// </summary>
        /// <param name="packetCreator">패킷 팩토리</param>
        //public void Add(IPacketCreator packetCreator)
        //{
        //    if (true == PacketCreator.ContainsKey(packetCreator.GetPacketId()))
        //    {
        //        throw new Exception(String.Format("a packet id already exists (packet_id: {0})", packetCreator.GetPacketId()));
        //    }

        //    PacketCreator.Add(packetCreator.GetPacketId(), packetCreator);
        //}
        public void Add(IPacket packetCreator)
        {
            if (true == PacketCreator.ContainsKey(packetCreator.GetPacketId()))
            {
                throw new Exception(String.Format("a packet id already exists (packet_id: {0})", packetCreator.GetPacketId()));
            }

            PacketCreator.Add(packetCreator.GetPacketId(), packetCreator);
        }
        public bool Execute(IPeer peer, IPacket packet)
        {
            if (false == PacketHandlerMap.ContainsKey(packet.GetPacketId()))
            {
                return(false);
            }

            IPacketHandler packetHandler = PacketHandlerMap[packet.GetPacketId()];

            packetHandler.Execute(peer, packet);
            return(true);
        }
コード例 #3
0
    // 데이터를 서버로 전송(TCP)
    public int SendReliable <T>(IPacket <T> packet)
    {
        int sendSize = 0;

        if (transportTCP != null)
        {
            // 모듈에서 사용할 헤더 정보를 생성합니다.
            PacketHeader     header     = new PacketHeader();
            HeaderSerializer serializer = new HeaderSerializer();

            //packetid = skill, moving 등등   moving은 2
            header.packetId = (int)packet.GetPacketId();

            byte[] headerData = null;
            if (serializer.Serialize(header) == true)
            {
                headerData = serializer.GetSerializedData();
            }

            byte[] packetData = packet.GetData();   //움직임 정보 들은 데이터
            byte[] data       = new byte[headerData.Length + packetData.Length];

            int headerSize = Marshal.SizeOf(typeof(PacketHeader));
            Buffer.BlockCopy(headerData, 0, data, 0, headerSize);
            Buffer.BlockCopy(packetData, 0, data, headerSize, packetData.Length);

            string str = "Send reliable packet[" + header.packetId + "]";

            sendSize = transportTCP.Send(data, data.Length);
        }

        return(sendSize);
    }
コード例 #4
0
    private byte[] CreatePacket <T>(IPacket <T> packet) // 패킷 만드는 메서드
    {
        byte[] packetData = packet.GetPacketData();     // 패킷의 데이터를 바이트화

        // 헤더 생성
        PacketHeader     header     = new PacketHeader();
        HeaderSerializer serializer = new HeaderSerializer();

        header.length = (short)packetData.Length;   // 패킷 데이터의 길이를 헤더에 입력
        header.id     = (byte)packet.GetPacketId(); // 패킷 데이터에서 ID를 가져와 헤더에 입력
        //Debug.Log("패킷 전송 - id : " + header.id.ToString() + " length :" + header.length);
        byte[] headerData = null;
        if (serializer.Serialize(header) == false)
        {
            return(null);
        }

        headerData = serializer.GetSerializedData(); // 헤더 데이터를 패킷 바이트로 변환


        byte[] data = new byte[headerData.Length + header.length]; // 최종 패킷의 길이 = 헤더패킷길이+내용패킷길이

        // 헤더와 내용을 하나의 배열로 복사
        int headerSize = Marshal.SizeOf(header.id) + Marshal.SizeOf(header.length);

        Buffer.BlockCopy(headerData, 0, data, 0, headerSize);
        Buffer.BlockCopy(packetData, 0, data, headerSize, packetData.Length);
        return(data);
    }
コード例 #5
0
ファイル: NetworkManager.cs プロジェクト: CJW23/camp4_sercle
    // 데이터를 서버로 전송(UDP)
    public int SendUnreliable <T>(IPacket <T> packet)
    {
        int sendSize = 0;

        if (transportUDP != null)
        {
            // 헤더 정보 생성
            PacketHeader     header     = new PacketHeader();
            HeaderSerializer serializer = new HeaderSerializer();

            // FIX THIS : 명시적 형변환 해줌. 소스코드와 다름
            header.packetId = (int)packet.GetPacketId();

            byte[] headerData = null;
            if (serializer.Serialize(header) == true)
            {
                headerData = serializer.GetSerializedData();
            }
            byte[] packetData = packet.GetData();

            byte[] data = new byte[headerData.Length + packetData.Length];

            int headerSize = Marshal.SizeOf(typeof(PacketHeader));
            Buffer.BlockCopy(headerData, 0, data, 0, headerSize);
            Buffer.BlockCopy(packetData, 0, data, headerSize, packetData.Length);

            sendSize = transportUDP.Send(data, data.Length);
        }
        return(sendSize);
    }
コード例 #6
0
ファイル: Network.cs プロジェクト: wyuurla/006772
    public int SendReliable <T>(int node, IPacket <T> packet)
    {
        int sendSize = 0;

        if (m_sessionTcp != null)
        {
            // 모듈에서 사용할 헤더 정보를 생성합니다.
            PacketHeader     header     = new PacketHeader();
            HeaderSerializer serializer = new HeaderSerializer();

            header.packetId = packet.GetPacketId();

            byte[] headerData = null;
            if (serializer.Serialize(header) == true)
            {
                headerData = serializer.GetSerializedData();
            }
            byte[] packetData = packet.GetData();

            byte[] data = new byte[headerData.Length + packetData.Length];

            int headerSize = Marshal.SizeOf(typeof(PacketHeader));
            Buffer.BlockCopy(headerData, 0, data, 0, headerSize);
            Buffer.BlockCopy(packetData, 0, data, headerSize, packetData.Length);

            string str = "Send reliable packet[" + header.packetId + "]";

            sendSize = m_sessionTcp.Send(node, data, data.Length);
        }

        return(sendSize);
    }
コード例 #7
0
        public string MarshalDataNoEnc(IPacket packet)
        {
            return(String.Format("{0},{1}",
                                 Convert.ToString((int)packet.GetPacketId()),
                                 packet.MarshalDataNoEnc()));

            //데이타를 암호화 하지 말고 시리얼 라이징 해라.
        }
コード例 #8
0
    public int SendToAllGuest <T>(IPacket <T> packet) // 패킷에 헤더를 부여하고 송신하는 메서드
    {
        int sendSize = 0;

        byte[] data = CreatePacket(packet);
        if (data == null)
        {
            Debug.Log("SendToAllGuest() - 잘못된 패킷" + packet.GetPacketId().ToString());
            return(0);
        }

        //전송
        m_host.SendAll(data, data.Length);
        return(sendSize);
    }
コード例 #9
0
    public int SendReliable <T>(int node, IPacket <T> packet)
    {
        int sendSize = 0;

        if (m_sessionTcp != null)
        {
            // 모듈에서 사용하는 헤더 정보를 생성.
            PacketHeader     header     = new PacketHeader();
            HeaderSerializer serializer = new HeaderSerializer();

            header.packetId = packet.GetPacketId();

            byte[] headerData = null;
            if (serializer.Serialize(header) == true)
            {
                headerData = serializer.GetSerializedData();
            }

            byte[] packetData = packet.GetData();
            byte[] data       = new byte[headerData.Length + packetData.Length];

            int headerSize = Marshal.SizeOf(typeof(PacketHeader));
            Buffer.BlockCopy(headerData, 0, data, 0, headerSize);
            Buffer.BlockCopy(packetData, 0, data, headerSize, packetData.Length);

            //string str = "Send reliable packet[" +  header.packetId  + "]";

            sendSize = m_sessionTcp.Send(node, data, data.Length);
            if (sendSize < 0 && m_eventQueue != null)
            {
                // 송신 오류.
                NetEventState state = new NetEventState();
                state.node   = node;
                state.type   = NetEventType.SendError;
                state.result = NetEventResult.Failure;
                m_eventQueue.Add(state);
            }
        }

        return(sendSize);
    }
コード例 #10
0
 public string Marshal(IPacket packet)
 {
     return(String.Format("{0},{1}",
                          Convert.ToString((int)packet.GetPacketId()),
                          packet.Marshal()));
 }