コード例 #1
0
        public Packet RecievePacket()
        {
            bool valid = false;

            while (!valid)
            {
                P2Packet packet = RecieveRaw();
                if (packet.SteamId == NetClient.instanceClient.serversSteamID)
                {
                    valid = true;
                    return(ENSSerialization.DeserializePacket(packet.Data));
                }
            }
            return(null);
        }
コード例 #2
0
        public void SendPacket(Packet packet, bool ignoreSelf = false)
        {
            byte[] bytePacket = ENSSerialization.SerializePacket(packet);
            foreach (NetworkPlayer player in NetServer.serverInstance.connections.ToArray())
            {
                if (ignoreSelf && NetServer.serverInstance.myConnection == player)
                {
                    continue;
                }

                if (packet.sendToAll || packet.usersToRecieve.Contains(player.clientID))
                {
                    bool outcome = SteamNetworking.SendP2PPacket(player.steamID, bytePacket, bytePacket.Length, 1, sendType: P2PSend.Unreliable);
                    //Debug.Log(outcome);
                    //udpServer.Send(bytePacket, bytePacket.Length, player.udpEndpoint);
                }
            }
        }
コード例 #3
0
        public void SendPacket(Packet packet)
        {
            byte[] bytePacket = ENSSerialization.SerializePacket(packet);
            bool   outcome    = SteamNetworking.SendP2PPacket(NetClient.instanceClient.serversSteamID, bytePacket, bytePacket.Length, 1, sendType: P2PSend.Unreliable);

            //Debug.Log(outcome);
            //client.Send(bytePacket, bytePacket.Length, serverEndpoint);
#if UNITY_EDITOR
            if (NetClient.instanceClient.trackOverhead)
            {
                if (NetClient.instanceClient.overheadFilter == Packet.pType.unassigned || NetClient.instanceClient.overheadFilter == packet.packetType)
                {
                    NetClient.instanceClient.packetsSent++;
                    //Debug.Log("Sent Packet: " + packet.packetSendType + ". To: "+serverEndpoint.ToString());
                }
            }
#endif
        }
コード例 #4
0
 public Packet Recieve()
 {
     while (true)
     {
         try
         {
             P2Packet recieved = RecieveMessage();
             Packet   p        = ENSSerialization.DeserializePacket(recieved.Data);
             if (NetServer.serverInstance.VerifyPacketValidity(recieved.SteamId, p))//(recieved.Key != null)
             {
                 return(p);
             }
             Debug.Log("Couldn't verify packet's validity");
         } catch (System.Exception e)
         {
             if (e.ToString().Contains("NullReferenceException") || e.ToString().Contains("ThreadAbortException"))
             {
                 return(null); //Most likely the editor closed abruptly or server closed.
             }
             Debug.LogError(e);
         }
     }
 }
コード例 #5
0
        public void UpdateField <T>(T value, int netObjID, bool immediateOnSelf = true)
        {
            if (value == null)
            {
                Debug.LogError("Cannot change value to null...", netObj.transform);
                return;
            }

            object newValue = value;

            if (value.GetType() == typeof(Vector3))
            {
                newValue = new SerializableVector((Vector3)System.Convert.ChangeType(value, typeof(Vector3)));
            }

            if (netObj == null)
            {
                netObj = NetworkObject.NetObjFromNetID(netObjID);
            }

            //If still null, netObj must of been destroyed.
            if (netObj == null)
            {
                return;
            }

            if (netID == -1)
            {
                netID = netObj.networkID;
            }

            JsonPacketObject jPO;


            if (!ENSUtils.IsSimple(newValue.GetType()))
            {
                jPO = new JsonPacketObject(JsonUtility.ToJson(newValue), newValue.GetType().ToString());
            }
            else
            {
                jPO = new JsonPacketObject("" + newValue, newValue.GetType().ToString());
            }

            if (!NetTools.IsMultiplayerGame())
            {
                //If singleplayer game just immediately set the value no matter what. No need to use the packet handler for this.
                LocalFieldSet(newValue);
                return;
            }

            Packet pack = new Packet(Packet.pType.netVarEdit, Packet.sendType.nonbuffered,
                                     ENSSerialization.SerializeNetworkFieldPacket(new NetworkFieldPacket(netObjID, fieldName, jPO, immediateOnSelf)));

            pack.reliable          = reliable;
            pack.relatesToNetObjID = netObjID;
            if (shouldBeProximity && netObj != null)
            {
                pack.packetSendType = Packet.sendType.proximity;
                pack.packetPosition = new SerializableVector(netObj.transform.position);
            }
            if (NetClient.instanceClient != null && !netObj.updateFieldsThroughServer)
            {
                NetClient.instanceClient.SendPacket(pack);
            }
            else if (NetServer.serverInstance != null)
            {
                foreach (NetworkPlayer player in NetServer.serverInstance.connections)
                {
                    if (!player.playerConnected)
                    {
                        continue; //No longer connected.
                    }
                    if (player.clientID == NetTools.clientID)
                    {
                        continue;
                    }
                    NetServer.serverInstance.SendPacket(player, pack);
                }
            }
            if (immediateOnSelf)
            {
                LocalFieldSet(newValue);
            }
        }