コード例 #1
0
        private void OnServerAcceptMsg (IAsyncResult _ar) {
            Socket servSock = (Socket) _ar.AsyncState;
            int receivedLength = servSock.EndReceive (_ar);

            byte[] receivedData = new byte[receivedLength];
            Array.Copy (mServerBuffer, receivedData, receivedLength);

            string jsString = Encoding.ASCII.GetString (receivedData);
            IBroadcastPacket mPack = JsonUtility.FromJson<IBroadcastPacket> (jsString);

            switch ((BroadCastType) mPack.packType) {
                case BroadCastType.JOIN_REQUEST_WITH_CLIENT:
                    Log ("NEW JOIN REQUEST RECEIVED BY SERVER::" + jsString);
                    JoinReqPacket joinnPack = JsonUtility.FromJson<JoinReqPacket> (jsString);
                    if (sendToServerCallback != null) {
                        Debug.Log ("inside send to server callback :: ");
                        sendToServerCallback (joinnPack);
                    }
                    break;
                default:
                    //Debug.Log("UNRECOGNIZED PACKET!!");
                    break;
            }

            //be ready for other connections
            mUDPServer.BeginReceive (mServerBuffer, 0, BUFF_SIZE, SocketFlags.None, new AsyncCallback (OnServerAcceptMsg), servSock);
        }
コード例 #2
0
 private void Server_OnJoinReqReceived (IBroadcastPacket _imp) {
     switch ((BroadCastType) _imp.packType) {
         case BroadCastType.JOIN_REQUEST_WITH_CLIENT:
             {
                 Debug.Log ("successfully received joined request ");
                 JoinReqPacket _joinReq = (JoinReqPacket) _imp;
                 if (onHostFound != null) onHostFound (_joinReq);
             }
             break;
         default:
             break;
     }
 }
コード例 #3
0
        // private void StartChat () {
        //     //Debug.Log("starting chat..");
        //     m_ChatBox.gameObject.SetActive (true);
        //     m_LobbyBox.gameObject.SetActive (false);
        // }
        #endregion

        #region  BEFORE_CONNECTION i.e. network discovery stuff
        private void AddNewHost()
        {
            RoomBroadcastPacket serverInfo = mCacheRoomPacket;
            GameObject          go         = Instantiate(m_JoinBtnPrefab, m_HostListHolder);

            Button          goBtn       = go.GetComponent <Button> ();
            TextMeshProUGUI goText      = go.GetComponentInChildren <TextMeshProUGUI> ();
            JoinReqPacket   joinReqPack = new JoinReqPacket();

            //Debug.Log("Adding new host");
            // if i am the host, i dont need to add myself, just showing button to explicitly say that we are online searching for other players/users.
            if (string.Equals(HOST_IP, serverInfo.ip))
            {
                goBtn.interactable = false;
                goText.text        = "(YOU) " + HOST_NAME;

                joinReqPack.clientIP   = HOST_IP;
                joinReqPack.clientName = HOST_NAME;
                OnRoomJoinReq(joinReqPack);        //to update the ui
                StartAsPlayer(HOST_IP, GAME_PORT); // If i am the server, i can also start as player as well.
            }
            else
            {
                goBtn.onClick.AddListener(() => {
                    Debug.Log("sending join request to ::" + serverInfo.ip + " : " + serverInfo.port);
                    try {
                        //TODO check if we need local end point here
                        Socket sock            = m_NetworkDiscovery.GetNetworkSocket();
                        joinReqPack.clientIP   = (sock.LocalEndPoint as IPEndPoint).Address.ToString();
                        joinReqPack.clientName = HOST_NAME;

                        IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Parse(serverInfo.ip), serverInfo.port);
                        sock.SendTo(NetworkUtil.GetBytes(JsonUtility.ToJson(joinReqPack)), (EndPoint)remoteEndPoint);
                        //TODO, improvement :: ACKNOWLEDGEMENT
                        StartAsPlayer(serverInfo.ip, GAME_PORT);
                        goBtn.interactable = false;
                        goText.text        = "Joining...";
                    } catch (Exception _exc) {
                        Debug.Log("EXC: " + _exc.Message);
                        goBtn.interactable = true;
                    }
                });
                goText.text = serverInfo.serverName + "'s Room";
            }
            m_HostListHolder.gameObject.SetActive(true);
        }
コード例 #4
0
 //ONLY FOR SERVER
 public void OnRoomJoinReq(JoinReqPacket _imp)
 {
     // TODO
     // UI UPDATE
     // SEND ACK
     if (mPlayerPackIPS.Contains(_imp.clientIP) == false)
     {
         mPlayerPackIPS.Add(_imp.clientIP);
         if (PLAYER_MAX_COUNT > mPlayerPackIPS.Count)
         {
             Debug.Log("TOTAL JOINED::  " + mPlayerPackIPS.Count);
         }
         else
         {
             Debug.Log("Closing network discovery");
             m_NetworkDiscovery.CloseServer();
         }
     }
 }