Exemplo n.º 1
0
    private int ConnectToPC()
    {
        //소켓 설정
        sck = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Parse(ip), 8080);

        //Connect
        try
        {
            sck.Connect(localEndPoint);
        }
        catch
        {
            Debug.Log("Unable to connect to remote end point!\r\n");
            return(0);
        }
        Debug.Log("Perfect!!");
        //Buffer = new byte[NetworkController.MAXBUFFERSIZE];//sck.socketbuffersize 에서 변경

        //시그널 수신
        //char s;
        NetFunc.net_recv_signal(sck);

        //플레이어 정보 수신

        SC_CONNECT_PACKET SCpack = new SC_CONNECT_PACKET();
        object            obj;

        obj = NetFunc.net_recv(sck, NetworkController.SC_CONNECT);
        if (obj == null)
        {
            return(0);            //error
        }
        SCpack = (SC_CONNECT_PACKET)obj;

        // Debug.Log((int)SCpack.id + " " + SCpack.color);
        My_Info = SCpack;
        //시그널 전송
        NetFunc.net_send_signal(NetworkController.CS_CONNECT, sck);



        //닉네임 전송
        CS_CONNECT_PACKET CSpacket = new CS_CONNECT_PACKET();

        CSpacket.nickname = name;
        CSpacket.id       = SCpack.id;


        buffer = NetFunc.ObjToByte(CSpacket);
        NetFunc.net_send(CSpacket, sck, NetworkController.CS_CONNECT);

        //비동기 시작
        IAsyncClient sync_obj = new IAsyncClient();

        sync_obj.sck = sck;

        buffer = new byte[NetworkController.MAXBUFFERSIZE];
        sck.BeginReceive(sync_obj.recvbuf, 0, NetworkController.MAXBUFFERSIZE, 0, new AsyncCallback(ReciveCallBack), sync_obj);

        return(1);
    }
Exemplo n.º 2
0
    public void AcceptCallback(IAsyncResult ar)
    {
        Socket listener = (Socket)ar.AsyncState;
        Socket handler  = listener.EndAccept(ar);
        // 받는 방식의 변화 재접속...
        int id = 0;

        for (int i = 0; i < 4; ++i)
        {
            if (false == connected[i])
            {
                id = i;
                break;
            }
        }
        if (client_sock.Count >= NetworkController.MAX_CONNECT)
        {
            handler.Disconnect(false);
        }
        client_sock.Add(handler);

        if (false == isgamescene)
        {
            CC.connected(id);
        }
        else
        {
            GS.reconnected(id);
        }

        NC.net_send_signal(NetworkController.SC_CONNECT, handler);
        SC_CONNECT_PACKET packet = new SC_CONNECT_PACKET();

        packet.id = (char)id;
        switch (id)
        {
        case 0:
            packet.color = 'b';
            break;

        case 1:
            packet.color = 'y';
            break;

        case 2:
            packet.color = 'r';
            break;

        case 3:
            packet.color = 'g';
            break;

        default:
            //error
            break;
        }
        Debug.Log("Player Color : " + packet.color);
        NC.net_send(packet, handler, NetworkController.SC_CONNECT);

        connected[id] = true;

        IAsyncClient iaclient = new IAsyncClient();

        iaclient.s        = handler;
        iaclient.id       = id;
        iaclient.recvbyte = 0;
        clients.Add(iaclient);
        handler.BeginReceive(iaclient.recvbuf, 0, NetworkController.MAXBUFFERSIZE, 0, new AsyncCallback(DataReceive), iaclient);
        sck.BeginAccept(new AsyncCallback(AcceptCallback), listener);


        s_arr[id] = handler;//5.15 홍승준 추가
    }