static void CreateNetworkReader(byte[] data) { //https://docs.unity3d.com/ScriptReference/Networking.NetworkReader.html NetworkReader networkReader = new NetworkReader(data); // The first two bytes in the buffer represent the size of the message. This is equal to the NetworkReader.Length // minus the size of the prefix. networkReader.ReadBytes(2); //short readerMsgSize = (short)((readerMsgSizeData[1] << 8) + readerMsgSizeData[0]); // The message type added in NetworkWriter.StartMessage is to be read now. It is a short and so consists of // two bytes. It is the second two bytes on the buffer. byte[] readerMsgTypeData = networkReader.ReadBytes(2); short readerMsgType = (short)((readerMsgTypeData[1] << 8) + readerMsgTypeData[0]); //Debug.Log("Message of type " + readerMsgType + " received"); if (readerMsgType == MessageTypes.JoinRequest) { JoinRequestMessage message = new JoinRequestMessage(); message.Deserialize(networkReader); P2PConnectionManager.OnJoinRequest(recHostId, connectionId, message); } else if (readerMsgType == MessageTypes.JoinAnswer) { JoinAnswerMessage message = new JoinAnswerMessage(); message.Deserialize(networkReader); P2PConnectionManager.OnJoinAnswer(recHostId, connectionId, message); } else if (readerMsgType == MessageTypes.JoinAnnounce) { JoinAnnounceMessage message = new JoinAnnounceMessage(); message.Deserialize(networkReader); P2PConnectionManager.OnJoinAnnounce(recHostId, connectionId, message); } else if (readerMsgType == MessageTypes.Position) { PositionMessage message = new PositionMessage(); message.Deserialize(networkReader); p2PController.ReceivePositionInformation(recHostId, connectionId, message); } else if (readerMsgType == MessageTypes.AskConsent) { AskConsentMessage message = new AskConsentMessage(); message.Deserialize(networkReader); p2PController.OnAskForConsentMsg(recHostId, connectionId, message); } else if (readerMsgType == MessageTypes.AnswerConsent) { AnswerConsentMessage message = new AnswerConsentMessage(); message.Deserialize(networkReader); P2PConsentManager.ReceiveAnswerConsent(message); } else if (readerMsgType == MessageTypes.ApplyConsent) { ApplyConsentMessage message = new ApplyConsentMessage(); message.Deserialize(networkReader); p2PController.ApplyConsent(message); } }
public P2PPendingConsent(AskConsentMessage message) { pendingSince = Time.time * 1000.0f; askConsentMessage = message; AnswerConsentMessage am = new AnswerConsentMessage(); am.result = askConsentMessage.result; am.parameters = askConsentMessage.parameters; am.consentAction = askConsentMessage.consentAction; am.consentId = askConsentMessage.consentId; answerConsentMessages.Add(am); }
public AnswerConsentMessage OnAskForConsentMsg(int hostId, int connectionId, AskConsentMessage message) { Debug.Log("P2P: OnAskForConsentMsg for: " + message.consentAction + ", parameter0: " + message.parameters[0]); AnswerConsentMessage answerMessage = new AnswerConsentMessage(); answerMessage.consentId = message.consentId; answerMessage.consentAction = message.consentAction; if (message.consentAction == ConsentAction.SpawnRocket) { answerMessage.result = gameController.lanes[message.parameters[1]].spawnManager.GetRandomSpawnerIndex(); answerMessage.parameters = message.parameters; //will I cheat? int randomInt = UnityEngine.Random.Range(0, 100); if (randomInt < gameController.cheaterProfileContainer.cheaterProfile.cheatingRate) { if (Recorder.session != null) { Recorder.session.cheatsTried++; } //sending a wrong spawner index answerMessage.result = 100; } if (hostId != -1 && connectionId != -1) //not imposing consent (see AskForConsent) { P2PSender.Send(hostId, connectionId, P2PChannels.ReliableChannelId, answerMessage, MessageTypes.AnswerConsent); } } if (message.consentAction == ConsentAction.JoinGame) { answerMessage.parameters = message.parameters; Lane freeLane = gameController.GetFirstUnoccupiedLane(); answerMessage.result = 10; if (freeLane != null) { answerMessage.result = freeLane.id; } if (hostId != -1 && connectionId != -1) //not imposing consent (see AskForConsent) { P2PSender.Send(hostId, connectionId, P2PChannels.ReliableChannelId, answerMessage, MessageTypes.AnswerConsent); } } return(answerMessage); }
public void AskForConsent(ConsentMessage consentMessage) { AskConsentMessage message = new AskConsentMessage(); message.consentId = P2PConsentManager.GetNextConsentIdAndIncrement(); message.consentAction = consentMessage.consentAction; message.result = consentMessage.result; message.parameters.AddRange(consentMessage.parameters); if (consensusAlgorithm && P2PConnectionManager.SuccessfulConnectionsCount() > 0) { Debug.Log("P2P: Asking consent for: " + consentMessage.consentAction); P2PConsentManager.AddPendingConsent(message); P2PSender.SendToAll(P2PChannels.ReliableChannelId, message, MessageTypes.AskConsent); } else { Debug.Log("P2P: Imposing consent for: " + consentMessage.consentAction); P2PConsentManager.ApplyAndSpreadConsentResult(OnAskForConsentMsg(-1, -1, message)); } }
public static void AddPendingConsent(AskConsentMessage message) { pendingConsents.Add(new P2PPendingConsent(message)); }