Beispiel #1
0
        public static byte[] Make <T>(PACKETID packetID, T packet)
            where T : class
        {
            byte[] bodyData     = JsonSerializer.Serialize(packet);
            byte   type         = 0;
            var    pktID        = (Int16)packetID;
            Int16  bodyDataSize = 0;

            if (bodyData != null && bodyData.Length > 2) // json 포맷이므로 클래스에 멤버가 없으면 {} 가 만들어져서 최소 2바이트 만들어진다
            {
                bodyDataSize = (Int16)bodyData.Length;
            }
            var packetSize = (Int16)(bodyDataSize + PacketDef.PACKET_HEADER_SIZE);

            var dataSource = new byte[packetSize];

            Buffer.BlockCopy(BitConverter.GetBytes(packetSize), 0, dataSource, 0, 2);
            Buffer.BlockCopy(BitConverter.GetBytes(pktID), 0, dataSource, 2, 2);
            dataSource[4] = type;

            if (bodyDataSize > 0 && bodyData != null)
            {
                Buffer.BlockCopy(bodyData, 0, dataSource, 5, bodyDataSize);
            }

            return(dataSource);
        }
        public static byte[] Make(PACKETID packetID, byte[] bodyData)
        {
            byte  type         = 0;
            var   pktID        = (Int16)packetID;
            Int16 bodyDataSize = 0;

            if (bodyData != null)
            {
                bodyDataSize = (Int16)bodyData.Length;
            }
            var packetSize = (Int16)(bodyDataSize + PacketDef.PACKET_HEADER_SIZE);

            var dataSource = new byte[packetSize];

            Buffer.BlockCopy(BitConverter.GetBytes(packetSize), 0, dataSource, 0, 2);
            Buffer.BlockCopy(BitConverter.GetBytes(pktID), 0, dataSource, 2, 2);
            dataSource[4] = type;

            if (bodyData != null)
            {
                Buffer.BlockCopy(bodyData, 0, dataSource, 5, bodyDataSize);
            }

            return(dataSource);
        }
Beispiel #3
0
    public static PacketHeader MakePacketHeader(PACKETID pID, int byteLength)
    {
        PacketHeader pHeader = new PacketHeader();

        pHeader.pID      = BitConverter.GetBytes((short)pID);
        pHeader.bodySize = BitConverter.GetBytes((short)byteLength);

        return(pHeader);
    }
Beispiel #4
0
        public void WriteHeaderInfo(PACKETID packetId, byte[] packetData)
        {
            var header = new MsgPackPacketHeadInfo();

            header.TotalSize = (UInt16)packetData.Length;
            header.Id        = (UInt16)packetId;
            header.Type      = 0;
            header.Write(packetData);
        }
        bool IsClientRequestCommonPacket(PACKETID packetId )
        {
            if ( packetId == PACKETID.REQ_LOGIN || packetId == PACKETID.REQ_ROOM_ENTER)
            {
                return true;
            }

            return false;
        }
        public async Task <(bool, string, List <ReceivePacket>)> ReceivePacketAsync(DateTime untilTime,
                                                                                    int untilCount,
                                                                                    PACKETID packetID)
        {
            var packetList = new List <ReceivePacket>();

            while (ClientSocket.IsConnected() || (DateTime.Now < untilTime))
            {
                await Task.Delay(1);

                // 지정 횟수 이상 패킷을 받았으면 중단한다
                if (untilCount > 0 && (packetList.Count >= untilCount))
                {
                    return(true, "", packetList);
                }

                // 지정 시간 이상 패킷을 받았으면 중단한다.
                if (DateTime.Now >= untilTime)
                {
                    if (packetList.Count == 0)
                    {
                        break;
                    }

                    return(true, "", packetList);
                }


                var(recvSize, recvError) = ClientSocket.Receive(RecvPacketInfo.BufferSize,
                                                                RecvPacketInfo.RecvBuffer);

                if (string.IsNullOrEmpty(recvError) == false)
                {
                    return(false, recvError, new List <ReceivePacket>());
                }


                var result = RecvProc(recvSize, recvError);
                if (result.Item1 == false)
                {
                    return(result.Item1, result.Item2, result.Item3);
                }

                foreach (var packet in result.Item3)
                {
                    packetList.Add(packet);

                    // 지정한 패킷을 받았으면 중단한다
                    if (packet.PktID == packetID)
                    {
                        return(true, "", packetList);
                    }
                }
            }

            return(false, "Failed to Complete Receive Packet", packetList);
        }
Beispiel #7
0
        public override (int, bool, string) CheckNtfRoomChat(Dummy dummy, PACKETID packetId, byte[] packetBuffer)
        {
            var body = MessagePackSerializer.Deserialize <PKTNtfRoomChat>(packetBuffer);

            if (body.ChatMessage != ChatMessage)
            {
                return(dummy.Index, false, $"메시지 다름({body.ChatMessage})");
            }

            return(dummy.Index, true, "");
        }
Beispiel #8
0
        private (int, bool, string) CheckResLogin(Dummy dummy, PACKETID packetId, byte[] packetBuffer)
        {
            var body = MessagePackSerializer.Deserialize <PKTResLogin>(packetBuffer);

            if ((ERROR_CODE)body.Result != ERROR_CODE.NONE)
            {
                return(dummy.Index, false, $"결과값 틀림({body.Result})");
            }

            return(dummy.Index, true, "");
        }
        private (int, bool, string) CheckNtfRoomLeaveUser(Dummy dummy, PACKETID packetId, byte[] packetBuffer)
        {
            var body = MessagePackSerializer.Deserialize <PKTNtfRoomLeaveUser>(packetBuffer);

            if (body.UserID == dummy.GetUserID())
            {
                return(dummy.Index, false, $"자신에게 노티됨({body.UserID})");
            }

            return(dummy.Index, true, "");
        }
        private (int, bool, string) CheckNtfRoomUserList(Dummy dummy, PACKETID packetId, byte[] packetBuffer)
        {
            var body = MessagePackSerializer.Deserialize <PKTNtfRoomUserList>(packetBuffer);

            if (!body.UserIDList.Contains(dummy.GetUserID()))
            {
                return(dummy.Index, false, "해당 유저의 아이디 부재");
            }

            return(dummy.Index, true, "");
        }
Beispiel #11
0
        public DBQueue MakeDBQueue(PACKETID packetID, string sessionID, int sessionIndex, byte[] jobDatas)
        {
            var dbQueue = new DBQueue()
            {
                PacketID     = packetID,
                SessionID    = sessionID,
                SessionIndex = sessionIndex,
                Datas        = jobDatas
            };

            return(dbQueue);
        }
        public RecvFunc GetRecvFunction(PACKETID packetId)
        {
            RecvFunc func = null;

            if (CheckPacketIDSet.Contains(packetId))
            {
                CheckPacketIDSet.Remove(packetId);
            }

            RecvFuncDic.TryGetValue(packetId, out func);
            return(func);
        }
        public void RegistRecvFunc(PACKETID packetId, RecvFunc func, bool isCheck)
        {
            if (func == null)
            {
                return;
            }

            RecvFuncDic.Add(packetId, func);
            if (isCheck)
            {
                CheckPacketIDSet.Add(packetId);
            }
        }
        static public byte[] Create(PACKETID packetId, byte[] bodyData)
        {
            var totalSize   = (UInt16)(PacketDef.PACKET_HEADER_SIZE + bodyData.Length);
            var packetIDbuf = BitConverter.GetBytes((UInt16)packetId);

            var packet = new byte[PacketDef.PACKET_HEADER_SIZE + bodyData.Length];

            Buffer.BlockCopy(BitConverter.GetBytes(totalSize), 0, packet, 0, 2);
            Buffer.BlockCopy(packetIDbuf, 0, packet, 2, 2);
            Buffer.BlockCopy(bodyData, 0, packet, 5, bodyData.Length);

            return(packet);
        }
        public (int, bool, string) CheckNtfRoomNewUser(Dummy dummy, PACKETID packetId, byte[] packetBuffer)
        {
            var body   = MessagePackSerializer.Deserialize <PKTNtfRoomNewUser>(packetBuffer);
            var sender = DummyManager.GetDummy(dummy.Index);

            if (sender == null)
            {
                return(dummy.Index, false, $"해당 sender가 존재하지 않음({dummy.Index})");
            }

            if (body.UserID == sender.GetUserID())
            {
                return(dummy.Index, false, $"자신에게 노티됨({body.UserID})");
            }

            return(dummy.Index, true, "");
        }
 public void RegistNfyRecvFunc(PACKETID packetId, RecvFunc func)
 {
     RegistRecvFunc(packetId, func, false);
 }
Beispiel #17
0
    void PacketProcess(RecvPacket rPkt)
    {
        PacketHeader pHeader = new PacketHeader();

        Buffer.BlockCopy(rPkt.buffer, 0, pHeader.pID, 0, 2);
        Buffer.BlockCopy(rPkt.buffer, 2, pHeader.bodySize, 0, 2);

        PACKETID pID = (PACKETID)BitConverter.ToInt16(pHeader.pID, 0);

        Debug.LogWarning("header ID : " + BitConverter.ToInt16(pHeader.pID, 0) + " | pID : " + pID);
        Debug.Log(rPkt.buffer[0]);
        Debug.Log(rPkt.buffer[1]);
        switch (pID)
        {
        case PACKETID.RES_LOGIN: {
            Debug.Log("RES_LOGIN");
            bool isExist = BitConverter.ToBoolean(rPkt.buffer, 4);
            Debug.Log(isExist);

            if (isExist == false)
            {
                pDataManager.SetPlayerState(SCENE_STATE.LOGIN_SCENE_FAILED);
                break;
            }

            string key = Encoding.Default.GetString(rPkt.buffer, 5, 10);
            pDataManager.SavePlayerKey(key);
            pDataManager.SetPlayerState(SCENE_STATE.MY_SCENE);
        }
        break;

        case PACKETID.RES_REGISTER_USER: {
            Debug.Log("RES_REGISTER");
            bool isExist = BitConverter.ToBoolean(rPkt.buffer, 4);
            Debug.Log(isExist);

            if (isExist == false)
            {
                pDataManager.SetPlayerState(SCENE_STATE.CREATE_USER_FAILED);
                break;
            }

            string key = Encoding.Default.GetString(rPkt.buffer, 5, 10);
            pDataManager.SavePlayerKey(key);
            Debug.Log("uID : " + key);
            pDataManager.SetPlayerState(SCENE_STATE.CREATE_USER_SUCCESS);
        }
        break;

        case PACKETID.RES_GET_DUNGEON_LIST: {
            byte[] dataNum = new byte[2];
            Buffer.BlockCopy(rPkt.buffer, 4, dataNum, 0, 2);
            short num = BitConverter.ToInt16(dataNum, 0);

            Debug.LogWarning("recved Tile Num : " + num);
            Debug.LogWarning("bytes : " + dataNum[0] + dataNum[1]);
            pDataManager.SaveTotalDTileNum(num);

            byte[] uID     = new byte[10];
            byte[] dID     = new byte[10];
            byte[] dName   = new byte[10];
            byte[] dInfo   = new byte[30];
            byte[] roomNum = new byte[2];

            for (int i = 0; i < num; ++i)
            {
                Buffer.BlockCopy(rPkt.buffer, 6 + 62 * i, uID, 0, 10);
                Buffer.BlockCopy(rPkt.buffer, 16 + 62 * i, dID, 0, 10);
                Buffer.BlockCopy(rPkt.buffer, 26 + 62 * i, dName, 0, 10);
                Buffer.BlockCopy(rPkt.buffer, 36 + 62 * i, dInfo, 0, 30);
                Buffer.BlockCopy(rPkt.buffer, 66 + 62 * i, roomNum, 0, 2);

                pDataManager.SaveSearchSceneMapData(
                    i,
                    Encoding.Default.GetString(uID),
                    Encoding.Default.GetString(dID),
                    Encoding.Default.GetString(dName),
                    Encoding.Default.GetString(dInfo),
                    BitConverter.ToInt16(roomNum, 0)
                    );
            }

            pDataManager.SetPlayerState(SCENE_STATE.SEARCH_SCENE_LOADED);
        }
        break;

        default:
            break;
        }
    }
 bool IsClientRequestPacket(PACKETID packetId)
 {
     return (PACKETID.CS_BEGIN < packetId && packetId < PACKETID.CS_END);
  }
 public delegate(int, bool, string) RecvFunc(Dummy dummy, PACKETID packetId, byte[] packetBuffer);
        virtual public (int, bool, string) CheckNtfRoomChat(Dummy dummy, PACKETID packetId, byte[] packetBuffer)
        {
            var body = MessagePackSerializer.Deserialize <PKTNtfRoomChat>(packetBuffer);

            return(dummy.Index, true, "");
        }