// Update is called once per frame void Update() { //temp debug code if (Input.GetKeyUp(KeyCode.M)) { //set testing flags this.left = false; testing = true; //spoof an accepted invite for socket 3001 with side left, and testing flag to true StartCoroutine(client.Accepted(3001, left, true)); //assign game flags pTable = tableParent.Find("3001"); if (GameObject.FindGameObjectsWithTag("Client").Length > 0) { Transform target = pTable.Find("TableCam"); Camera.main.transform.GetComponent <Camera>().enabled = false; target.GetComponent <Camera>().enabled = true; } //hook up "left" flipper pTable = tableParent.Find("3001"); myFlipper = pTable.Find("PlayerInput").Find("PlayerLeft").Find("ButtonParent").GetChild(0).GetChild(0).GetComponent <FlipperButton>(); myFlipper.enabled = true; myFlipper.networkMode = false; otherFlipper = pTable.Find("PlayerInput").Find("PlayerRight").Find("ButtonParent").GetChild(0).GetChild(0).GetComponent <FlipperButton>(); otherFlipper.enabled = true; otherFlipper.networkMode = true; latencyText = pTable.Find("Canvas").Find("Latency").GetComponent <Text>(); leftText = pTable.Find("Canvas").Find("Left").GetComponent <Text>(); ball = pTable.Find("Ball"); ballBody = ball.GetComponent <Rigidbody>(); } }
public void AcceptInvite() { StopCoroutine(inviteCountdown); inviteCG.alpha = 0; inviteCG.gameObject.SetActive(false); StartCoroutine(client.Accepted(roomPort, left)); //move camera pTable = tableParent.Find(roomPort.ToString()); Transform target = pTable.Find("TableCam"); Camera.main.transform.GetComponent <Camera>().enabled = false; target.GetComponent <Camera>().enabled = true; //hook up "left" flipper myFlipper = left ? pTable.Find("PlayerInput").Find("PlayerLeft").Find("ButtonParent").GetChild(0).GetChild(0).GetComponent <FlipperButton>() : pTable.Find("PlayerInput").Find("PlayerRight").Find("ButtonParent").GetChild(0).GetChild(0).GetComponent <FlipperButton>(); myFlipper.enabled = true; //get reference to other flipper otherFlipper = left ? pTable.Find("PlayerInput").Find("PlayerRight").Find("ButtonParent").GetChild(0).GetChild(0).GetComponent <FlipperButton>() : pTable.Find("PlayerInput").Find("PlayerLeft").Find("ButtonParent").GetChild(0).GetChild(0).GetComponent <FlipperButton>(); otherFlipper.enabled = true; otherFlipper.networkMode = true; //get reference to ball ball = pTable.Find("Ball"); latencyText = pTable.Find("Canvas").Find("Latency").GetComponent <Text>(); leftText = pTable.Find("Canvas").Find("Left").GetComponent <Text>(); leftText.text = "Left: " + left; }
private IEnumerator ServeUDP(int port) { int curCode = -1; NetDataWriter writer = new NetDataWriter(); EventBasedNetListener listener = new EventBasedNetListener(); NetManager server = new NetManager(listener); Transform ball = null; Rigidbody ballBody = null; bool syncBall = false; Console.WriteLine("Starting Server on {0}", port); Debug.Log("Starting Server on " + port); server.Start(port); //left and right flipper for this port Transform left, right; FlipperButton fbLeft = null, fbRight = null; NetPeer lClient = null, rClient = null; bool bothPlayers = true; Transform playField = null; IEnumerator timeout = null;; if (port != 3000) { timeout = WaitForTimeout(port, server); StartCoroutine(timeout); Console.WriteLine("Finding play field"); playField = tables.Find(port.ToString()); Console.WriteLine("Finding ball"); ball = playField.Find("Ball"); ballBody = ball.GetComponent <Rigidbody>(); Console.WriteLine("Finding FlipperButton left"); fbLeft = playField.Find("PlayerInput").Find("PlayerLeft").Find("ButtonParent").GetChild(0).GetChild(0).GetComponent <FlipperButton>(); fbLeft.enabled = true; Console.WriteLine("Finding FlipperButton right"); fbRight = playField.Find("PlayerInput").Find("PlayerRight").Find("ButtonParent").GetChild(0).GetChild(0).GetComponent <FlipperButton>(); fbRight.enabled = true; Console.WriteLine("Found both flippers"); } listener.ConnectionRequestEvent += request => { if (server.PeersCount < 10) { request.AcceptIfKey("TestKey"); } else { request.Reject(); } }; listener.PeerConnectedEvent += peer => { Console.WriteLine("PeerConnectedEvent"); if (testMode) { lClient = peer; } }; listener.PeerDisconnectedEvent += (peer, info) => { //remove player from queue for (int i = 0; i < mQueue.Count; i++) { NetPeer nxt = mQueue.Dequeue(); if (nxt.ConnectionNum != peer.ConnectionNum) { mQueue.Enqueue(nxt); } else { Console.WriteLine("Dequeueing [client] due to disconnect event"); } } //remove player from game lobby if (lClient != null && rClient != null) { if (peer.ConnectionNum == lClient.ConnectionNum) { if (bothPlayers) { Console.WriteLine("dispatch lClient leave"); fbLeft.enabled = false; bothPlayers = false; } else { TeardownServer(server, port, 1); } } else if (peer.ConnectionNum == rClient.ConnectionNum) { if (bothPlayers) { Console.WriteLine("dispatch rClient leave"); fbRight.enabled = false; bothPlayers = false; } else { TeardownServer(server, port, 1); } } } }; listener.NetworkReceiveEvent += (peer, reader, delivery) => { curCode = -1; try{ curCode = reader.GetInt(); } catch (Exception e) { Console.WriteLine("error. malformatted packet"); } switch (curCode) { case 0: //handshake if (port == 3000) { Console.WriteLine("Client Handshake Received"); UnityEngine.Debug.Log("Client Handshake Received"); PacketLib.SendMessage(peer, writer, (int)PostCode.SHAKE); } break; case 1: //queue //add peer to queue mQueue.Enqueue(peer); StartCoroutine(ManageQueue(writer)); PacketLib.SendMessage(peer, writer, (int)PostCode.QUEUE); break; case 2: //invite Console.WriteLine("[client] has joined game lobby on port: " + port); Debug.Log("[client] has joined game lobby on port: " + port); //assign left and right flipper if (reader.GetBool()) { lClient = peer; if (rClient != null) { StartCoroutine(StartGame(lClient, rClient, writer, timeout, port, ball)); syncBall = true; } } else { rClient = peer; if (lClient != null) { StartCoroutine(StartGame(lClient, rClient, writer, timeout, port, ball)); syncBall = true; } } //get a handle to the table/playfield for this port break; case 4: //flip //rotate server paddle if (port != 3000) { bool isLeft = reader.GetBool(); bool active = reader.GetBool(); if (rClient != null) { PacketLib.SendMessage(rClient, writer, (int)PostCode.FLIP, isLeft, active); } if (lClient != null) { PacketLib.SendMessage(lClient, writer, (int)PostCode.FLIP, isLeft, active); } //move paddles Debug.Log("Animating paddle movement server-side"); if (fbLeft != null && isLeft) { fbLeft.Flip(active); } else if (fbRight != null && !isLeft) { fbRight.Flip(active); } } break; case 5: //log Console.WriteLine(reader.GetString()); break; case 6: //test if (timeout == null) { SystemTest(); } else { StopCoroutine(timeout); } break; case -1: default: break; } }; while (!Console.KeyAvailable) { server.PollEvents(); if (syncBall && port != 3000) { PacketLib.SendMessage(lClient, writer, (int)PostCode.BALL, ball.position, ballBody.angularVelocity); PacketLib.SendMessage(rClient, writer, (int)PostCode.BALL, ball.position, ballBody.angularVelocity); } yield return(new WaitForSeconds(0.015f)); } Console.WriteLine("Gracefully killing server"); server.Stop(); yield return(new WaitForSeconds(5f)); // wait 5 seconds after stopping server to kill app Application.Quit(); }