Пример #1
0
 private void CheckBroadcastUpdate()
 {
     if (mCacheRoomPacket != null)
     {
         AddNewHost();
         mCacheRoomPacket = null;
     }
 }
Пример #2
0
 private bool IsHostAdded (RoomBroadcastPacket _mp) {
     foreach (var item in mAllHosts) {
         if (item.ip == _mp.ip && string.Equals (item.serverName, _mp.serverName)) {
             return true;
         }
     }
     return false;
 }
Пример #3
0
        private void AddBtnListeners()
        {
            m_CreateBtn.onClick.AddListener(() => {
                HOST_NAME = string.IsNullOrEmpty(m_RoomInputField.text.Trim()) ? NetworkUtil.GetRandomRoomName() : m_RoomInputField.text;
                m_NetworkDiscovery.StartBroadCastPing(HOST_NAME);

                m_JoinRoomPanel.gameObject.SetActive(true);
                m_Joinbtn.gameObject.SetActive(false);
                m_CreateBtn.gameObject.SetActive(false);
                m_NormalMsgText.text = "Waiting for other players to join!!\n";

                RoomBroadcastPacket roomPack = new RoomBroadcastPacket();
                roomPack.ip         = HOST_IP;
                roomPack.serverName = HOST_NAME;

                mCacheRoomPacket = roomPack;

                // JoinReqPacket _joinReqPack = new JoinReqPacket();
                // _joinReqPack.clientIP = HOST_IP;
                // _joinReqPack.clientName = HOST_NAME;
                // OnBroadcastJoinReq(_joinReqPack);
                //mNetworkDiscovery.StartLocalClient(); // dont need broadcast client for the host itself.
                StartMainServer();
            });

            m_Joinbtn.onClick.AddListener(() => {
                HOST_NAME = string.IsNullOrEmpty(m_JoinRoomInputField.text.Trim()) ? NetworkUtil.GetRandomRoomName() : m_JoinRoomInputField.text;

                m_JoinRoomPanel.gameObject.SetActive(true);
                m_Joinbtn.gameObject.SetActive(false);
                m_CreateBtn.gameObject.SetActive(false);

                m_NormalMsgText.text = "Please wait...Finding Game Servers to join. \n";
                m_NetworkDiscovery.StartLocalClient();
            });

            m_RefreshNetBtn.onClick.AddListener(() => {
                if (m_NetworkDiscovery.IsConnectionValid())
                {
                    HOST_IP = m_NetworkDiscovery.GetIP();
                    m_RefreshNetBtn.gameObject.SetActive(false);
                    SetupLobby();
                }
                else
                {
                    ConveyMessage("Please Make sure your internet is on & connect to same wifi/hotspot.");
                }
            });
        }
Пример #4
0
        public void StartBroadCastPing (string _name) {
            if (string.IsNullOrEmpty (mBroadcastManager.GetLocalIP ())) {
                isServerOn = false;
            } else {
                myIP = mBroadcastManager.GetLocalIP ();
                mBroadcastManager.StartUDPServer (_name, Server_OnJoinReqReceived);

                smp = new RoomBroadcastPacket ();
                smp.serverName = _name;
                smp.ip = (mBroadcastManager.GetServer ().LocalEndPoint as IPEndPoint).Address.ToString ();
                smp.port = (mBroadcastManager.GetServer ().LocalEndPoint as IPEndPoint).Port;
                pingData = NetworkUtil.GetBytes (JsonUtility.ToJson (smp));

                isServerOn = true;
            }
        }
Пример #5
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);
        }
Пример #6
0
        private void Client_OnReceiveFromServer (IBroadcastPacket _imp) {
            switch ((BroadCastType) _imp.packType) {
                case BroadCastType.SERVER_BROADCAST:
                    {
                        RoomBroadcastPacket _smp = (RoomBroadcastPacket) _imp;
                        Debug.Log ("SERVER FOUND ON MONO: " + _smp.ip + " , " + _smp.serverName);
                        if (onRoomFound == null) {
                            Debug.Log ("no server found function added");
                        } else {
                            onRoomFound (_smp);
                        }

                    }
                    break;
                default:
                    break;
            }
        }
Пример #7
0
        private void OnClientReceive (IAsyncResult _ar) {
            try {
                Socket clientSock = (Socket) _ar.AsyncState;
                int receivedLength = clientSock.EndReceive (_ar);

                byte[] receivedData = new byte[receivedLength];
                Array.Copy (mClientBuffer, receivedData, receivedLength);
                string jsString = Encoding.UTF8.GetString (receivedData);
                //Debug.Log(jsString);

                IBroadcastPacket imp = JsonUtility.FromJson<IBroadcastPacket> (jsString);

                switch ((BroadCastType) imp.packType) {
                    case BroadCastType.SERVER_BROADCAST:
                        {
                            RoomBroadcastPacket servBroadPack = JsonUtility.FromJson<RoomBroadcastPacket> (jsString);
                            if (IsHostAdded (servBroadPack) == false) {
                                Log ("FOUND A NEW SERVER:: " + jsString);
                                //we found a new game server
                                mAllHosts.Add (servBroadPack);
                                if (sendToClientCallback != null) {
                                    sendToClientCallback (servBroadPack);
                                }

                                // IPEndPoint iep = new IPEndPoint(IPAddress.Parse(mPacket.ip), mPacket.port);
                                // byte[] data = Encoding.ASCII.GetBytes("JOIN_REQ_IM");
                                // clientSock.SendTo(data, (EndPoint)iep);
                            }
                        }
                        break;
                }

                //KEEP THE CONNECTION ALIVE FOR OTHER INCOMING MESSAGES
                mPrivateClient.BeginReceive (mClientBuffer, 0, BUFF_SIZE, SocketFlags.None, new AsyncCallback (OnClientReceive), mPrivateClient);
            } catch (Exception ex) {
                Log ("ERR: Client REceive:: " + ex.Message);
            }
        }
Пример #8
0
        // this section is used only for broadcasting i.e. when players trying to discover each other...

        //ONLY FOR CLIENTS
        public void OnBroadcastHostFound(RoomBroadcastPacket _smp)
        {
            //Debug.Log("Caching server broadcast mP" + _smp);
            mCacheRoomPacket = _smp;
        }