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); }
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); }
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); }
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, ""); }
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, ""); }
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); }
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, ""); }