public void ReciveData_Delegate(byte[] packet_Data) { RecieveBuffer = new ByteData(packet_Data); Recieved_NetKind = (NETKIND)RecieveBuffer.Getbyte(); if (IsOwnRecieveNetKind(Recieved_NetKind)) { lock (Lockobject) { RecieveBuffer.DataIndex--; Que_Bytedata.Enqueue(RecieveBuffer); } } else if (Recieved_NetKind == NETKIND.STC_CONNECTION_RETENTION) { lock (Lockobject) { RecieveBuffer.DataIndex--; Que_Bytedata.Enqueue(RecieveBuffer); } Link_Script.i.GamePlay_Receive_Data(packet_Data); } else { //나머지는 배틀 쪽 KIND다 그쪽으로 보내서 처리토록하자 Link_Script.i.GamePlay_Receive_Data(packet_Data); } }
void Chk_RecieveProcess() { while (Chk_readBuffer() == true) { RecieveBuffer = Read_ByteBuffer(); Recieved_NetKind = (NETKIND)RecieveBuffer.Getbyte(); switch (Recieved_NetKind) { case NETKIND.NONE: break; case NETKIND.STC_LOGIN: Recieve_STC_Login(); break; case NETKIND.STC_CONNECTION_RETENTION: Recieve_STC_Retention(); break; case NETKIND.STC_ROOM_MAKE: Recieve_STC_RoomMake(); break; case NETKIND.STC_OPEN_ROOM: Recieve_STC_OpenRoom(RecieveBuffer); break; case NETKIND.STC_INVITE_ROOM: Recieve_STC_InviteRoom(RecieveBuffer); break; case NETKIND.STC_READYROOM_INFO: Recieve_STC_RoomInfo(RecieveBuffer); break; case NETKIND.STC_FRIEND_ROOM_JOIN: Recieve_STC_FriendRoomjoin(RecieveBuffer); break; case NETKIND.STC_CHAT_MESSAGE: Recieve_STC_ChatMessage(RecieveBuffer); break; case NETKIND.STC_TOAST_MSG: Recieve_STC_ToastMsg(RecieveBuffer); break; case NETKIND.STC_POPUP_MSG: Recieve_STC_PopupMsg(RecieveBuffer); break; case NETKIND.STC_ERROR_CODE: Recieve_STC_ERROR(RecieveBuffer); break; } } }
//프로토콜 맞춰서 보내기 public void Send_Data(NETKIND _Protocol, byte[] _Data, bool _Sum_Check = false) { if (Socket_Client == null || IsConnected == false) { return; } if (_Data == null) { _Data = new byte[0]; } try { Send_Data_Buffer = new ByteData(HeaderData.Length + Buffer_Length + _Data.Length, 0); for (int i = 0; i < HeaderData.Length; i++) { Send_Data_Buffer.InPutByte(HeaderData[i]); } Send_Data_Buffer.InPutByte((short)(Buffer_Length + _Data.Length - sizeof(short)));//길이 ("길이" 데이터 제외한 크기) Send_Data_Buffer.InPutByte((byte)_Protocol); Array.Copy(_Data, 0, Send_Data_Buffer.data, HeaderData.Length + Buffer_Length, _Data.Length); Send_Data_Buffer.DataIndex += _Data.Length; if (_Sum_Check == false)//바로 패킷 보내기 { Send_Packet(Send_Data_Buffer.GetTrimByteData()); } else//패킷 모아서 보내기 { lock (Total_Send_Lock) { Array.Copy(Send_Data_Buffer.data, 0, Total_Send_Packet, Total_Send_Index, Send_Data_Buffer.DataIndex); Total_Send_Index += Send_Data_Buffer.DataIndex; } //일정양 이상 쌓였으면 꽉차기전에 미리 보내버린다. if (Total_Send_Index + 128 >= Total_Send_Packet_Length) { Now_Send_Packet(); } } } catch (Exception ex) { Error_DisConnect(ex); } }
bool IsOwnRecieveNetKind(NETKIND kind) { bool isUse = false; switch (kind) { case NETKIND.STC_LOGIN: case NETKIND.STC_ROOM_MAKE: case NETKIND.STC_OPEN_ROOM: case NETKIND.STC_INVITE_ROOM: case NETKIND.STC_READYROOM_INFO: case NETKIND.STC_CHAT_MESSAGE: case NETKIND.STC_FRIEND_ROOM_JOIN: case NETKIND.STC_ERROR_CODE: case NETKIND.STC_POPUP_MSG: case NETKIND.STC_TOAST_MSG: isUse = true; break; } return(isUse); }
///////////////////////===============================================================================================////////////////////////////////// ///////////////////////=========================== Related Sending ================================////////////////////////////////// ///////////////////////===============================================================================================////////////////////////////////// public void NetSendData(NETKIND _Protocol, byte[] _Data) { Net_Script.Send_Data(_Protocol, _Data); }
public void Receive_Delegate(byte[] Packet_Data) { try { Receive_Buffer = new ByteData(Packet_Data); Receive_Protocol = (NETKIND)Receive_Buffer.Getbyte(); switch (Receive_Protocol) { case NETKIND.STC_BATTLEROOM_INFO: Recv_Quick_Join(Receive_Buffer); break; case NETKIND.STC_BATTLEROOM_START_INFO: Recv_TeamPlay_Join(Receive_Buffer); break; case NETKIND.STC_KILL_WORDS: Recv_Killing_Message(Receive_Buffer); break; case NETKIND.STC_CONNECTION_RETENTION: Recv_HeartBeat(); break; case NETKIND.STC_CONNECT_TIMEOVER: Recv_Connect_TimeOver(); break; case NETKIND.STC_GAME_START: Recv_GamePlay_Start(); break; case NETKIND.STC_GAMEDATA_RELAY: Recv_PTP_Data(Receive_Buffer); break; case NETKIND.STC_SET_HP: Recv_Set_HP(Receive_Buffer); break; case NETKIND.STC_GAME_ROOM_TIME: Recv_GetServerTime(Receive_Buffer); break; case NETKIND.STC_REVIVAL: Recv_Respawn_Data(Receive_Buffer); break; case NETKIND.STC_INSTANT_REVIVAL: Recv_Now_Respawn_Data(Receive_Buffer); break; case NETKIND.STC_SET_USERKILL: Recv_UserKill(Receive_Buffer); break; case NETKIND.STC_ROOM_JOIN_NOTICE: Recv_RoomIn_User(Receive_Buffer); break; case NETKIND.STC_ROOM_OUT_USER: //플레이중에 나간 유저 체크 Recv_RoomOut_User(Receive_Buffer); break; case NETKIND.STC_GAME_SCORE: Recv_Now_Total_Score(Receive_Buffer); break; case NETKIND.STC_MAINBASE_HP: Recv_Base_HP(Receive_Buffer); break; case NETKIND.STC_GAME_TIMEOVER: Recv_TimerOver(Receive_Buffer); break; case NETKIND.STC_GAME_REWRDEND: Recv_RewardEnd(); break; //case NETKIND.STC_CHAT_MESSAGE: // //인게임중 채팅 메세지를 받습니다 (서버에서 받은 byteData ) // SendManager.Instance.RecieveChatMessage_BattleGame(Receive_Buffer); // break; //case NETKIND.STC_ERROR_CODE: // byte Error_Code = 0; // Receive_Buffer.OutPutVariable(ref Error_Code); // Debug.LogError("서버에서 정의한 에러값 넘어왔다 : " + (ErrorCode)Error_Code); // break; default: Disconnect("선언 되지 않은 프로토콜 : " + Receive_Protocol); break; } } catch (Exception ex) { Disconnect(ex.ToString()); } }
//================================================================================================================================================================================ //데이터 보내기 void Data_Send(NETKIND _Protocol, byte[] Send_Data) { SendManager.Instance.Send_NetData(_Protocol, Send_Data); }
//////================================================= 네트워크 부분 ================================================ // 소켓서버 데이터보내기 public void Send_NetData(NETKIND _Protocol, byte[] _Data) { Network_MainMenuSoketManager.Getsingleton.NetSendData(_Protocol, _Data); }