public StructRequest HandleRequest(StructRequest request, ref Socket socket) { string url = request.request_url; StructRequest response; if (url == URL.InitUser.ToString()) { return(response = InitUserID(request)); } else if (url == URL.SyncMovement.ToString()) { return(response = SyncMovement(request)); } else if (url == URL.AttackBomb.ToString()) { AttackBomb(request); } else if (url == URL.GetOpponentData.ToString()) { return(response = GetOpponentData(request)); } else if (url == URL.SetBombSocket.ToString()) { SetBombSocket(request, ref socket); } return(new StructRequest()); }
void OnReceving() { while (true) { byte[] data = new byte[1024 * 3]; if (!mIsUdp) { mSocket.Receive(data); } else { mSocket.ReceiveFrom(data, ref mRemoteIpPoint); } String msg = Encoding.Default.GetString(data); StructRequest request = NetFormatHelper.StringToStructRequest(msg); Debug.Log("수신 : " + msg); mResponse = request; mIsResponsing = true; mIsReceiving = false; } mSocket.Close(); }
void SetSocket() { // 소켓 설치 gameObject.AddComponent <ClientNet>(); mNet = GetComponent <ClientNet>(); // @request UID 발급 신청 StructRequest request = new StructRequest(); request.uid = ""; request.request_url = URL.InitUser.ToString(); void CallBack(StructRequest response) { if (response.uid != null) { mUserData = new StructUserData(); mUserData.uid = response.uid; mUserData.isPVPMode = true; string map_data = response.parameter["mapData"]; string item_data = response.parameter["itemData"]; // 맵 데이터에 저장 JsonFactory.WriteString(Const.MapDataName, map_data); mUserData.itemData = item_data; } } mNet.SetCallBack(CallBack); mNet.RequestMsg(request); }
void RunClient(ref Socket socket) { Console.WriteLine("Client Connect"); String msg = ""; while (true) { // 1. 통신을 받는다 string recieve_msg = Receive(ref socket); if (recieve_msg == ErrorCode.Error.ToString()) { continue; } // 2. request에 알맞는 response를 만든다 StructRequest response = MakeResponse(ref socket, recieve_msg); if (IsErrorStructRequest(response)) { continue; } // 3. response 전달 bool is_success = Send(ref socket, response); if (!is_success) { continue; } } socket.Close(); }
/* @ url : SyncMovement * @ request : * posX * posY * opponentUid * @ response : * opponentPosX * opponentPosY */ StructRequest SyncMovement(StructRequest request) { string user_id = request.uid; // 유저가 없을 때 if (!mUserData.ContainsKey(user_id)) { return(ServerNet.ErrorStructRequest()); } StructUserData user_data = mUserData[user_id]; // 파라매터가 오지 않았을 경우 if (request.parameter == null) { return(ServerNet.ErrorStructRequest()); } // 유저 위치 기록 if (request.parameter.ContainsKey("posX")) { user_data.posX = request.parameter["posX"]; } if (request.parameter.ContainsKey("posY")) { user_data.posY = request.parameter["posY"]; } if (request.parameter.ContainsKey("opponentUid")) { user_data.opponentUid = request.parameter["opponentUid"]; } mUserData[user_id] = user_data; // 상대방 정보 if (!request.parameter.ContainsKey("opponentUid")) { return(ServerNet.ErrorStructRequest()); } string opponentUid = request.parameter["opponentUid"]; // 상대방 정보 없을 경우 if (!mUserData.ContainsKey(opponentUid)) { return(ServerNet.ErrorStructRequest()); } StructUserData opponent_data = mUserData[opponentUid]; // 상대방 위치를 response로 전달 Dictionary <string, string> dic_param = new Dictionary <string, string>(); dic_param["opponentPosX"] = opponent_data.posX == null ? "0" : opponent_data.posX; dic_param["opponentPosY"] = opponent_data.posY == null ? "0" : opponent_data.posY; return(MakeResponse(request, dic_param)); }
public static StructRequest ErrorStructRequest() { StructRequest req = new StructRequest(); req.uid = ErrorCode.Error.ToString(); return(req); }
private void Update() { // @request 위치 전달/수신 Vector3 player1_pos = player1.transform.position; StructRequest request = new StructRequest(); request.uid = Const.UserData.uid; request.request_url = URL.SyncMovement.ToString(); request.parameter = new Dictionary <string, string>(); request.parameter["posX"] = player1.gameObject.transform.position.x.ToString(); request.parameter["posY"] = player1.gameObject.transform.position.y.ToString(); request.parameter["opponentUid"] = Const.UserData.opponentUid; void CallBack(StructRequest response) { if (!response.parameter.ContainsKey("opponentPosX")) { return; } // 받은 player2 위치 적용 float x = float.Parse(response.parameter["opponentPosX"]); float y = float.Parse(response.parameter["opponentPosY"]); Vector3 next_pos = new Vector3(x, y, player2.transform.position.z); EDirection dir = JUtils.GetDir(next_pos, player2.transform.position); player2.Move(dir); player2.transform.position = next_pos; } mNEt.SetCallBack(CallBack); mNEt.RequestMsg(request); }
bool Send(ref Socket socket, StructRequest response) { string send = NetFormatHelper.StructRequestToString(response); byte[] _data = new Byte[BYTESIZE]; _data = NetFormatHelper.StringToByte(send); try { Console.WriteLine("송신 : " + send); if (!mIsUdp) { socket.Send(_data); } else { socket.SendTo(_data, mRemoteEndPoint); } return(true); } catch (Exception err) { Console.WriteLine("Send error : Soket Close"); SocektClose(socket); return(false); } }
// PVP public void GotoPVPGame() { // @request 상대 UID 요청 StructRequest request = new StructRequest(); request.uid = mUserData.uid; request.request_url = URL.GetOpponentData.ToString(); void mCallBack(StructRequest response) { if (response.parameter != null) { if (response.parameter["opponentUid"] != null) { StructUserData user_data = mUserData; user_data.opponentUid = response.parameter["opponentUid"]; // 발급받은 UID는 로컬 데이터에 저장 JsonFactory.Write(Const.UserDataName, user_data); // 상대 클라이언트가 준비되었다면 게임 실행 SceneManager.LoadScene("GameScene"); } } } mNet.SetCallBack(mCallBack); mNet.RequestMsg(request); }
/* @ url : InitUser * @ request : * @ response : * uid * mapData */ StructRequest InitUserID(StructRequest request) { int user_id = mUIDIndex % 2; // uid는 0 과 1 만 발급 mUIDIndex += 1; if (mUserData == null) { mUserData = new Dictionary <string, StructUserData>(); } // 유저 데이터 생성 StructUserData user_data = new StructUserData(); user_data.uid = user_id.ToString(); // 파라매터 생성 Dictionary <string, string> dic_param = new Dictionary <string, string>(); dic_param["mapData"] = mMapData; dic_param["itemData"] = mItemList; // 유저 데이터에 저장 request.uid = user_data.uid; mUserData[user_id.ToString()] = user_data; return(MakeResponse(request, dic_param)); }
// Update is called once per frame void Update() { StructRequest request = new StructRequest(); request.uid = "2"; request.request_url = "character/getClientMove"; mNet.RequestMsg(request); }
StructRequest MakeResponse(StructRequest request, Dictionary <string, string> dic) { StructRequest response = new StructRequest(); response.uid = request.uid; response.request_url = request.request_url; response.parameter = dic; return(response); }
/* @ url : AttackBomb * @ request : * @ response : * bombIndex */ // @Send 함수가 별도로 있음 주의할 것 void AttackBomb(StructRequest request) { string user_id = request.uid; // 유저가 없을 경우 if (!mUserData.ContainsKey(user_id)) { return; } // 물풍선 위치 저장 StructUserData user_data = mUserData[user_id]; if (request.parameter.ContainsKey("bombIndex")) { user_data.bombIndex = request.parameter["bombIndex"]; } // 바로 쏴주기 떄문에 사실 필요는 없다. mUserData[user_id] = user_data; // 파라매터 Dictionary <string, string> dic_param = new Dictionary <string, string>(); dic_param["bombIndex"] = user_data.bombIndex; StructRequest res = MakeResponse(request, dic_param); // 상대 클라이언트 소켓에 물풍선 통신 Socket socket; if (request.uid == "0") { socket = mBombSocket1; } else { socket = mBombSocket2; } string send = NetFormatHelper.StructRequestToString(res); byte[] _data = new Byte[ServerNet.BYTESIZE]; _data = NetFormatHelper.StringToByte(send); try { Console.WriteLine("수신 : " + send); socket.Send(_data); } catch (Exception err) { Console.WriteLine("Send error"); return; } }
void SetBombSocket(StructRequest request, ref Socket socket) { if (request.uid == "0") { mBombSocket2 = socket; } else { mBombSocket1 = socket; } }
public async Task <IHttpActionResult> GetStruct(StructRequest request) { StructResponse response = await request.GetResponse(); if (response.Struct == null) { HttpResponseMessage respMess = new HttpResponseMessage(response.StatusCode) { ReasonPhrase = response.ErrorMessage }; return(ResponseMessage(respMess)); } return(Ok(response.Struct)); }
public void RequestMsg(StructRequest request) { if (mIsReceiving) { return; } string msg = NetFormatHelper.StructRequestToString(request); Debug.Log("송신 : " + msg); byte[] data = NetFormatHelper.StringToByte(msg); mSocket.Send(data); mIsReceiving = true; }
StructRequest MakeResponse(ref Socket socket, string rec_msg) { try { StructRequest request = NetFormatHelper.StringToStructRequest(rec_msg); StructRequest response = mRequestHandler.HandleRequest(request, ref socket); return(response); } catch { SocektClose(socket); Console.WriteLine("null error msg :" + rec_msg); Console.WriteLine("null error : Soket Close"); return(ErrorStructRequest()); } }
/* @ url : GetOpponentData * @ request : * @ response : * opponentUid */ StructRequest GetOpponentData(StructRequest request) { string user_uid = request.uid; string opponent_uid = ErrorCode.Error.ToString(); if (user_uid == "1") { opponent_uid = "0"; } else { opponent_uid = "1"; } if (mUserData.ContainsKey(opponent_uid)) { StructUserData opponent_data = mUserData[opponent_uid]; Dictionary <string, string> dic_param = new Dictionary <string, string>(); dic_param["opponentUid"] = opponent_data.uid; return(MakeResponse(request, dic_param)); } return(ServerNet.ErrorStructRequest()); }
bool IsErrorStructRequest(StructRequest req) { return(req.uid == ErrorCode.Error.ToString()); }