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); }
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; } }
// 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); }
//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(); } } }