private void CheckBroadcastUpdate() { if (mCacheRoomPacket != null) { AddNewHost(); mCacheRoomPacket = null; } }
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; }
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."); } }); }
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; } }
// 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); }
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; } }
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); } }
// 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; }