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());
    }
Exemplo n.º 2
0
    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();
    }
Exemplo n.º 3
0
    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);
    }
Exemplo n.º 4
0
    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));
    }
Exemplo n.º 6
0
    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);
    }
Exemplo n.º 8
0
    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);
        }
    }
Exemplo n.º 9
0
    // 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));
    }
Exemplo n.º 11
0
    // 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;
     }
 }
Exemplo n.º 15
0
        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));
        }
Exemplo n.º 16
0
    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;
    }
Exemplo n.º 17
0
 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());
    }
Exemplo n.º 19
0
 bool IsErrorStructRequest(StructRequest req)
 {
     return(req.uid == ErrorCode.Error.ToString());
 }