Beispiel #1
0
 void SerializeObjectToBuffer(ushort msgType, IObjectSerializer serializer)
 {
     m_NetworkWriter.SeekZero();
     m_NetworkWriter.StartMessage(msgType);
     serializer.Serialize(m_NetworkSyncWriter);
     m_NetworkWriter.FinishMessage();
 }
Beispiel #2
0
        //public static void SendBitstreamToAllClients(ref UdpBitStream bitstream, short msgType, int channel = Channels.DefaultUnreliable)
        //{
        //	reusablewriter.StartMessage(msgType);
        //	reusablewriter.WriteUncountedByteArray(bitstream.Data, bitstream.BytesUsed);
        //	reusablewriter.FinishMessage();
        //	//reusablewriter.SendPayloadArrayToAllClients(msgType);

        //	foreach (NetworkConnection nc in NetworkServer.connections)
        //	{
        //		if (nc == null)
        //			continue;

        //		nc.SendWriter(reusablewriter, channel);
        //	}
        //}

        public static void SendPayloadArrayToAllClients(this NetworkWriter writer, short msgType, int channel = Channels.DefaultUnreliable)
        {
            reusablewriter.StartMessage(msgType);

            byte[] writerArray = writer.AsArray();
            int    count       = writer.Position;

            for (int i = 4; i < count; ++i)
            {
                reusablewriter.Write(writerArray[i]);
            }
            reusablewriter.FinishMessage();

            foreach (NetworkConnection nc in NetworkServer.connections)
            {
                if (nc == null)
                {
                    continue;
                }

                if (nc.isReady)
                {
                    nc.SendWriter(reusablewriter, channel);
                }
            }
        }
Beispiel #3
0
    private void ClientSendSetRoleMessage()
    {
        JObject json = new JObject
        {
            { "stageId", panelID },      //遥控第二个界面,操纵杆界面
            { "gId", groupID },          //组ID: 0~3
            { "uId", userID },           //用户ID:0~1
            {
                "direction", new JObject // 操纵杆坐标
                {
                    { "x", joystick.Horizontal },
                    { "y", joystick.Vertical }
                }
            },
            { "skill", skill }           //技能释放,0表示不使用技能
        };
        string output = json.ToString(); //JsonConvert.SerializeObject(json);
        //Debug.Log(output);

        NetworkWriter writer = new NetworkWriter();

        writer.StartMessage(MsgTypeChooseRoleSend);
        writer.Write(output);
        writer.FinishMessage();
        if (myClient.isConnected)
        {
            myClient.SendWriter(writer, channelId);
        }
    }
Beispiel #4
0
 internal Writer(NetworkWriter writer, short messageIndex, NetworkConnection target, QosType qos)
 {
     _netWriter = writer;
     _target    = target;
     _qos       = qos;
     writer.StartMessage(messageIndex);
 }
Beispiel #5
0
    public void SendMessage(string targetObjectName, string methodName, object param, object param2, object param3, MsgType msgType = MsgType.Reliable)
    {
        if (debugRPC)
        {
            LogUI("CAVE2 SendMessage (Param 5)'" + methodName + "' on " + targetObjectName);
        }

        NetworkWriter writer = new NetworkWriter();

        writer.StartMessage(203);
        writer.Write(targetObjectName);
        writer.Write(methodName);
        writer.Write(3);

        ParamToByte(writer, param);
        ParamToByte(writer, param2);
        ParamToByte(writer, param3);

        writer.FinishMessage();

        ServerSendMsgToClients(writer.ToArray(), msgType);

#if USING_GETREAL3D
        if (getReal3D.Cluster.isMaster)
        {
            getReal3D.RpcManager.call("SendCAVE2RPC5", targetObjectName, methodName, param, param2, param3);
        }
        else
        {
            SendCAVE2RPC5(targetObjectName, methodName, param, param2, param3);
        }
#else
        SendCAVE2RPC5(targetObjectName, methodName, param, param2, param3);
#endif
    }
Beispiel #6
0
        //This is called on the client to send the current inputs
        void SendInputs(ref List <Inputs> inp)
        {
            if (!isLocalPlayer || isServer)
            {
                return;
            }

            if (inputWriter == null)
            {
                inputWriter = new NetworkWriter();
            }

            inputWriter.SeekZero();
            inputWriter.StartMessage(inputMessage);
            int sz = inp.Count;

            inputWriter.WritePackedUInt32((uint)sz);
            for (int i = 0; i < sz; i++)
            {
                cInp = inp[i];
#if (CMD_CHECKSUM)
                cInp.checksum = GetCommandChecksum(cInp);
#endif
                WriteInputs(ref inputWriter, cInp, prevInput);
                prevInput = cInp;
            }
            inputWriter.FinishMessage();

            myClient.SendWriter(inputWriter, GetNetworkChannel());

            inp.Clear();
        }
Beispiel #7
0
    // Writing data to a NetworkWriter and then
    // Converting this to a NetworkReader.
    void Start()
    {
        // The data you add to your writer must be prefixed with a message type.
        // This is in the form of a short.
        short myMsgType = 143;

        NetworkWriter writer = new NetworkWriter();

        // You start the message in your writer by passing in the message type.
        // This is a short meaning that it will take up 2 bytes at the start of
        // your message.
        writer.StartMessage(myMsgType);


        // You can now begin your message. In this case we will just use strings.
        //writer.Write(new Vector3(3.0f, 1.44f, 2.56f));
        writer.Write("Test data 2");
        //writer.Write("Test data 3");


        // Make sure to end your message with FinishMessage()
        writer.FinishMessage();


        // You can now access the data in your writer. ToArray() returns a copy
        // of the bytes that the writer is using and AsArray() returns the
        // internal array of bytes, not a copy.
        byte[] writerData = writer.ToArray();
        CreateNetworkReader(writerData);
    }
    //If target death
    //if zombie respawn automaticly
    //If player block move and fire, wait click respawn
    void Death()
    {
        death = true;
        NetworkWriter wr = new NetworkWriter();

        wr.StartMessage(Networking_msgType_Sr.Death);
        wr.Write(index);
        wr.FinishMessage();
        RoomsManager.SendReliableAtRoom(wr, index);
        if (zombie)
        {
            coll.enabled = false;
            CancelInvoke();
            Invoke("Respawn", 20f);
            target.ZombieStopFollow(index);
            target          = null;
            nav.destination = transform.position;
            CalculateDropChance();
        }
        else
        {
            w    = false;
            s    = false;
            a    = false;
            d    = false;
            move = Vector3.zero;

            while (ZombieFollowMe.Count != 0)
            {
                RoomsManager.GetPlayerController(ZombieFollowMe[0]).FollowTargetDead();
                ZombieFollowMe.RemoveAt(0);
            }
        }
    }
    //If target respawn
    //If zombie respawn on random position on map
    //If player respawn on player layer on map
    public void Respawn()
    {
        death = false;
        if (zombie)
        {
            coll.enabled = true;
            do
            {
                Vect = new Vector3(Random.Range(0, 100), transform.position.y, Random.Range(0, 100));
            }while (Vect.x < 20f || Vect.z < 20f);
            nav.Warp(Vect);
        }
        else
        {
            do
            {
                Vect = new Vector3(Random.Range(1, 10), transform.position.y, Random.Range(1, 10));
            }while (Vect.x > 10f || Vect.z > 10f);
            transform.position = Vect;
        }
        transform.rotation = Quaternion.AngleAxis(Random.Range(0, 360), Vector3.up);
        Data_PlayerFile_Sr d = RoomsManager.GetPlayerData(index);

        d.SetHP(d.HPMax);
        NetworkWriter wr = new NetworkWriter();

        wr.StartMessage(Networking_msgType_Sr.Respawn);
        wr.Write(index);
        wr.Write(transform.position);
        wr.Write(transform.rotation);
        wr.FinishMessage();
        RoomsManager.SendReliableAtRoom(wr, index);
    }
 public override void Serialize(NetworkWriter writer)
 {
     writer.StartMessage(MessageTypes.SCUpdateMsgType);
     writer.Write(ID);
     writer.Write(status);
     writer.FinishMessage();
 }
 public override void Serialize(NetworkWriter writer)
 {
     writer.StartMessage(MessageTypes.CSUpdateMsgType);
     writer.Write(ID);
     writer.Write(position);
     writer.FinishMessage();
 }
Beispiel #12
0
            protected void SendDamage(DamageInfo damage, GameObject target)
            {
                if (NetworkServer.active)
                {
                    if (target)
                    {
                        HealthComponent hc = target.GetComponent <HealthComponent>();
                        if (hc)
                        {
                            hc.TakeDamage(damage);
                        }
                        GlobalEventManager.instance.OnHitEnemy(damage, target);
                    }

                    GlobalEventManager.instance.OnHitAll(damage, target);
                }
                else if (ClientScene.ready)
                {
                    write.StartMessage(53);
                    write.Write(target);
                    WriteDmgInfo(write, damage);
                    write.Write((target.GetComponent <HealthComponent>() != null));
                    write.FinishMessage();
                    ClientScene.readyConnection.SendWriter(write, QosChannelIndex.defaultReliable.intVal);
                }
            }
    public void LoadTopPlayerList()
    {
        TopList.Clear();
        Linq.CommandText = "SELECT PlayerName, zombie, zombie_mutant, zombie_strong, PlayerScores FROM charecter ORDER BY PlayerScores DESC";
        MySqlDataReader reader = Linq.ExecuteReader();
        int             r      = 0;

        while (reader.Read() && r < 10)
        {
            int       i = 0;
            TopPlayer t = new TopPlayer();
            t.nick             = reader.GetString(i++);
            t.zombieKill       = int.Parse(reader.GetString(i++));
            t.zombieMutantKill = int.Parse(reader.GetString(i++));
            t.zombieStrongKill = int.Parse(reader.GetString(i++));
            t.Score            = int.Parse(reader.GetString(i++));
            TopList.Add(t);
            r++;
        }
        reader.Close();
        top = new NetworkWriter();
        top.StartMessage(Networking_msgType_Sr.TopList);
        top.Write(TopList.Count);
        foreach (TopPlayer pl in TopList)
        {
            top.Write(pl.nick);
            top.Write(pl.zombieKill);
            top.Write(pl.zombieMutantKill);
            top.Write(pl.zombieStrongKill);
            top.Write(pl.Score);
        }
        top.FinishMessage();

        Invoke("LoadTopPlayerList", 30f);
    }
        // Token: 0x06001F16 RID: 7958 RVA: 0x00092A70 File Offset: 0x00090C70
        private void ProcessQueue()
        {
            if (this.snapshotQueue.Count == 0)
            {
                return;
            }
            NetworkWriter networkWriter = new NetworkWriter();

            networkWriter.StartMessage(51);
            int num = Mathf.Min(Mathf.FloorToInt((float)(1000 - networkWriter.Position) / 61f), this.snapshotQueue.Count);

            networkWriter.Write((byte)num);
            for (int i = 0; i < num; i++)
            {
                CharacterNetworkTransformManager.NetSnapshot netSnapshot = this.snapshotQueue.Dequeue();
                this.currentOutMessage.gameObject   = netSnapshot.gameObject;
                this.currentOutMessage.newPosition  = netSnapshot.snapshot.position;
                this.currentOutMessage.aimDirection = netSnapshot.snapshot.aimDirection;
                this.currentOutMessage.moveVector   = netSnapshot.snapshot.moveVector;
                this.currentOutMessage.rotation     = netSnapshot.snapshot.rotation;
                this.currentOutMessage.isGrounded   = netSnapshot.snapshot.isGrounded;
                this.currentOutMessage.timestamp    = netSnapshot.snapshot.serverTime;
                networkWriter.Write(this.currentOutMessage);
            }
            networkWriter.FinishMessage();
            if (NetworkServer.active)
            {
                NetworkServer.SendWriterToReady(null, networkWriter, QosChannelIndex.characterTransformUnreliable.intVal);
                return;
            }
            if (ClientScene.readyConnection != null)
            {
                ClientScene.readyConnection.SendWriter(networkWriter, QosChannelIndex.characterTransformUnreliable.intVal);
            }
        }
Beispiel #15
0
 public virtual void SendByChannel(short msgType, MessageBase msg, int channelId)
 {
     m_Writer.StartMessage(msgType);
     msg.Serialize(m_Writer);
     m_Writer.FinishMessage();
     SendWriter(m_Writer, channelId);
 }
Beispiel #16
0
    public void SendMsg(MessageBase msg)
    {
        short msgType = 0;

        if (msg.GetType().Name == "TextMessage")
        {
            msgType = MRTMsgType.Text;
        }
        else if (msg.GetType().Name == "AnchorMessage")
        {
            msgType = MRTMsgType.Anchor;
        }
        else if (msg.GetType().Name == "SpawnMessage")
        {
            msgType = MRTMsgType.Spawn;
        }

        NetworkWriter writer = new NetworkWriter();

        writer.StartMessage(msgType);

        msg.Serialize(writer);

        writer.FinishMessage();

        // send message to server
        stream.Write(writer.ToArray(), 0, writer.ToArray().Length);
    }
Beispiel #17
0
        private static void MMTime(ConCommandArgs args)
        {
            string scaleString = ArgsHelper.GetValue(args.userArgs, 0);
            float  scale       = 1f;

            if (args.Count == 0)
            {
                Debug.Log(Time.timeScale);
                return;
            }

            if (float.TryParse(scaleString, out scale))
            {
                Time.timeScale = scale;
                Debug.Log(args.sender.userName + " set time scale to " + scale);
                Chat.AddMessage("<style=cWorldEvent>" + args.sender.userName + " set time scale to " + scale + "</style>");
            }

            else
            {
                Debug.Log("Invalid arguments, example: 'mmtime {int} (0=pause,1=normal)'");
            }

            NetworkWriter networkWriter = new NetworkWriter();

            networkWriter.StartMessage(101);
            networkWriter.Write((double)Time.timeScale);
            networkWriter.FinishMessage();
            NetworkServer.SendWriterToReady(null, networkWriter, QosChannelIndex.time.intVal);
        }
    /// <summary>
    /// Send int value by reliable channel 0 to all room
    /// </summary>
    /// <param name="msgType"></param>
    /// <param name="value"></param>
    /// <param name="sessionID"></param>
    public static void SendIntToAllRoom(short msgType, int value, int roomID)
    {
        NetworkWriter wr = new NetworkWriter();

        wr.StartMessage(msgType);
        wr.Write(value);
        wr.FinishMessage();

        Room room = GetRoom(roomID);

        if (room)
        {
            foreach (PlayerData data in room.playersData)
            {
                if (data != null)
                {
                    if (data.playerData.PlayerReady)
                    {
                        NetworkConnection conn = GetPlayerConnection(data.sessionID);

                        if (conn != null && conn.connectionId != -1)
                        {
                            conn.SendWriter(wr, 0);
                        }
                    }
                }
            }
        }
    }
Beispiel #19
0
 void SerializeMessageToBuffer(ushort msgType, IMessageSerializer serializer)
 {
     m_NetworkWriter.SeekZero();
     m_NetworkWriter.StartMessage(msgType);
     serializer.Serialize(m_NetworkWriter);
     m_NetworkWriter.FinishMessage();
 }
Beispiel #20
0
        private static void CCTimeScale(ConCommandArgs args)
        {
            string scaleString = ArgsHelper.GetValue(args.userArgs, 0);
            float  scale       = 1f;

            if (args.Count == 0)
            {
                Debug.Log(Time.timeScale);
                return;
            }

            if (float.TryParse(scaleString, out scale))
            {
                Time.timeScale = scale;
                Debug.Log("Time scale set to " + scale);
            }
            else
            {
                Debug.Log("Incorrect arguments. Try: time_scale 0.5");
            }

            NetworkWriter networkWriter = new NetworkWriter();

            networkWriter.StartMessage(101);
            networkWriter.Write((double)Time.timeScale);

            networkWriter.FinishMessage();
            NetworkServer.SendWriterToReady(null, networkWriter, QosChannelIndex.time.intVal);
        }
    public void OnClientConnected(NetworkMessage netMsg)
    {
        NetworkWriter writer = new NetworkWriter();

        writer.StartMessage(kMsgId);
        byte[] data = new byte[kPacketSize];
        writer.Write(data, kPacketSize);
        writer.FinishMessage();
        LogAssert.Expect(LogType.Error, "ChannelBuffer buffer limit of 16 packets reached.");

        // these messages do not all fit in the transport layer send queue.
        // to be recieved on the server, they must be buffered by HLAPI
        bool gotFailure = false;

        for (int i = 0; i < kNumMsgs; i++)
        {
            if (!myClient.SendWriter(writer, Channels.DefaultReliable))
            {
                gotFailure = true;
                break;
            }
        }

        Assert.AreEqual(true, gotFailure);
        isTestDone = true;
    }
Beispiel #22
0
        private void ClientTransmitVotesToServer()
        {
            if (!NetworkClient.active)
            {
                Debug.LogWarning("[Client] function 'System.Void RoR2.PreGameRuleVoteController::ClientTransmitVotesToServer()' called on server");
                return;
            }
            Debug.Log("PreGameRuleVoteController.ClientTransmitVotesToServer()");
            if (!this.networkUserNetworkIdentity)
            {
                Debug.Log("Can't transmit votes: No network user object.");
                return;
            }
            NetworkUser component = this.networkUserNetworkIdentity.GetComponent <NetworkUser>();

            if (!component)
            {
                Debug.Log("Can't transmit votes: No network user component.");
                return;
            }
            NetworkWriter networkWriter = new NetworkWriter();

            networkWriter.StartMessage(70);
            networkWriter.Write(base.gameObject);
            this.WriteVotes(networkWriter);
            networkWriter.FinishMessage();
            component.connectionToServer.SendWriter(networkWriter, QosChannelIndex.defaultReliable.intVal);
        }
Beispiel #23
0
        private static void CCTimeScale(ConCommandArgs args)
        {
            if (args.Count == 0)
            {
                Log.Message(Time.timeScale);
                return;
            }

            if (TextSerialization.TryParseInvariant(args[0], out float scale))
            {
                Time.timeScale = scale;
                Log.Message("Time scale set to " + scale);
            }
            else
            {
                Log.Message("Incorrect arguments. Try: time_scale 0.5");
            }

            NetworkWriter networkWriter = new NetworkWriter();

            networkWriter.StartMessage(101);
            networkWriter.Write((double)Time.timeScale);

            networkWriter.FinishMessage();
            NetworkServer.SendWriterToReady(null, networkWriter, QosChannelIndex.time.intVal);
        }
        // Token: 0x0600122D RID: 4653 RVA: 0x000597DC File Offset: 0x000579DC
        public void SendSetEntityState(int stateMachineIndex)
        {
            if (!NetworkServer.active && !base.hasAuthority)
            {
                return;
            }
            NetworkWriter      networkWriter      = new NetworkWriter();
            EntityStateMachine entityStateMachine = this.stateMachines[stateMachineIndex];
            short value = StateIndexTable.TypeToIndex(entityStateMachine.state.GetType());

            networkWriter.StartMessage(48);
            networkWriter.Write(this.networkIdentity);
            networkWriter.Write((byte)stateMachineIndex);
            networkWriter.Write(value);
            entityStateMachine.state.OnSerialize(networkWriter);
            networkWriter.FinishMessage();
            if (NetworkServer.active)
            {
                NetworkServer.SendWriterToReady(base.gameObject, networkWriter, this.GetNetworkChannel());
                return;
            }
            if (ClientScene.readyConnection != null)
            {
                ClientScene.readyConnection.SendWriter(networkWriter, this.GetNetworkChannel());
            }
        }
        internal int CopyPacketToNetworkWriter(ArraySegment <byte> packet, [NotNull]  NetworkWriter writer)
        {
            if (writer == null)
            {
                throw new ArgumentNullException("writer");
            }

            var arr = packet.Array;

            if (arr == null)
            {
                throw new ArgumentNullException("packet");
            }

            writer.SeekZero();
            writer.StartMessage(TypeCode);
            {
                //Length prefix the packet
                writer.WritePackedUInt32((uint)packet.Count);

                //Copy out the bytes.
                //You might think we could use `Write(buffer, offset, count)` here. You would be wrong! In that method the 'offset' is the
                //offset to write to in the packet! This is probably a bug in unity!
                for (var i = 0; i < packet.Count; i++)
                {
                    writer.Write(arr[packet.Offset + i]); //
                }
            }
            writer.FinishMessage();

            return(writer.Position);
        }
Beispiel #26
0
 internal Writer(NetworkWriter writer, Int16 messageIndex, NetworkConnection target, QosType qos)
 {
     this.netWriter  = writer;
     this.connection = target;
     this.qos        = qos;
     writer.StartMessage(messageIndex);
 }
Beispiel #27
0
    public static void Send(int hostId, int connectionId, int channelId, MessageBase message, short messageType)
    {
        NetworkWriter writer = new NetworkWriter();

        writer.StartMessage(messageType);
        message.Serialize(writer);
        writer.FinishMessage();
        byte[] writerData   = writer.ToArray();
        int    bufferLength = P2PController.bufferLength;

        bufferLength = writerData.Length;
        //Debug.Log("Send packet with size: " + bufferLength);

        NetworkTransport.Send(hostId, connectionId, channelId, writerData, bufferLength, out P2PController.error);
        P2PController.CheckError("Send");


        if (Recorder.session != null)
        {
            Recorder.session.messagesSent++;
            Recorder.session.AddLeavingBandwidth(bufferLength);
            if (channelId == P2PChannels.ReliableChannelId)
            {
                Recorder.session.importantMessagesSent++;
            }
        }
    }
Beispiel #28
0
        public override void SendC2S(uint guid, int commandId, object argument)
        {
            if (!NetworkClient.active)
            {
                throw new UnauthorizedAccessException(
                          "You can not invoke actions on the host as you do not have a client instance.");
            }

            var networkWriter = new NetworkWriter();

            networkWriter.StartMessage(MessageTypeC2S);
            networkWriter.Write(guid);
            networkWriter.Write(commandId);

            if (argument is Action <NetworkWriter> anw)
            {
                anw(networkWriter);
            }
            else
            {
                networkWriter.WriteObject(argument);
            }

            networkWriter.FinishMessage();

            ClientScene.readyConnection.SendWriter(networkWriter, ChannelId);
        }
        NetworkWriter INetworkSender.CreateWriter(int signalType)
        {
            NetworkWriter writer = new NetworkWriter();

            writer.StartMessage(msgType);
            writer.Write(signalType);
            return(writer);
        }
    //Save player kills and rang to DB
    public static void Kill(int sessionID, string zombie)
    {
        Data_PlayerFile_Sr player = RoomsManager.GetPlayerData(sessionID);

        if ("strongzombie" == zombie)
        {
            player.zombieStrong++;
        }
        else if ("mutantzombie" == zombie)
        {
            player.zombieMutant++;
        }
        else if ("zombie" == zombie || "sickzombie" == zombie || "policezombie" == zombie)
        {
            player.zombie++;
        }

        player.PlayerScores = player.zombie + (player.zombieMutant * 2) + (player.zombieStrong * 3);

        if (player.rang != 11)
        {
            int rang = CheckRang(player.PlayerScores);

            if (rang > player.rang)
            {
                player.rang = rang;
                NetworkWriter wr = new NetworkWriter();
                wr.StartMessage(Networking_msgType_Sr.Rang);
                wr.Write(sessionID);
                wr.Write(player.rang);
                wr.FinishMessage();
                RoomsManager.SendReliableAtRoom(wr, sessionID);

                string title = SetTitle(player.rang);
                if (!string.IsNullOrEmpty(title))
                {
                    player.title = title;
                    wr           = new NetworkWriter();
                    wr.StartMessage(Networking_msgType_Sr.Title);
                    wr.Write(sessionID);
                    wr.Write(title);
                    wr.FinishMessage();
                    RoomsManager.SendReliableAtRoom(wr, sessionID);
                }
            }
        }

        Linq.CommandText = string.Format("UPDATE charecter SET zombie = '{0}', zombie_mutant = '{1}', zombie_strong = '{2}', PlayerScores = '{3}', rang = '{4}', title = '{5}' WHERE PlayerName = '{6}'", player.zombie, player.zombieMutant, player.zombieStrong, player.PlayerScores, player.rang, player.title, player.nick);
        MySqlDataReader Reader = Linq.ExecuteReader();

        try {
            Reader.Read();
            Reader.Close();
        } catch (MySqlException ex) {
            Debug.Log(ex.ErrorCode + ex.Message);
        }
        Reader.Close();
    }