public void Receive(NetIncomingMessage msg)
 {
     for (var i = 0; i < net_states.Count; ++i)
     {
         net_states[i].Receive(msg);
     }
 }
Example #2
0
    public void ReceiveMessage(object sender, NetIncomingMessage msg)
    {
#if !EXTERNAL
        UnityEngine.Debug.Log("Got message [" + msg.LengthBytes + "B]");
#else
        Console.WriteLine("Got message [" + msg.LengthBytes + "B]");
#endif
        MsgType type = (MsgType)msg.ReadByte();
        switch (type)
        {
            case MsgType.RecommendationRequest:
                if (this.RecommendationRequested != null)
                    this.RecommendationRequested(msg);
                break;
            case MsgType.RecommendationContent:
                if (this.RecommendationReceived != null)
                    this.RecommendationReceived(msg);
                break;
            case MsgType.RecommendationSelected:
                if (this.RecommendationSelected != null)
                    this.RecommendationSelected(msg);
                break;
            case MsgType.ObjectsFreed:
                if (this.ObjectsFreed != null)
                    this.ObjectsFreed(msg);
                break;
            case MsgType.Sentiments:
                if (this.Sentiments != null)
                    this.Sentiments(msg);
                break;
            default: break;
        }
    }
 static object ReadArgument(NetIncomingMessage msg, Type type)
 {
     if (type == typeof(int))
     {
         return msg.ReadInt32();
     }
     else if (type == typeof(byte))
     {
         return msg.ReadByte();
     }
     else if (type == typeof(float))
     {
         return msg.ReadFloat();
     }
     else if (type == typeof(Vector3))
     {
         return NetworkUtils.ReadVector3(msg);
     }
     else if (type == typeof(Quaternion))
     {
         return NetworkUtils.ReadQuaternion(msg);
     }
     else if (type == typeof(string))
     {
         return msg.ReadString();
     }
     else
     {
         throw new Exception("Unsupported argument type " + type);
     }
 }
Example #4
0
 private void OnDeserializeStream(NetIncomingMessage netIncomingMessage)
 {
     //deserialize position from the stream
     //TODO: implement smoothing/lag compensation
     _serializer.OnDeserialize(netIncomingMessage);
     transform.position = _serializer.vector3;
 }
    public static void ReceiveRemoteCall(NetIncomingMessage msg)
    {
        var instance = GetCallTargetInstance(msg.ReadInt32());
        if (instance == null)
        {
            return;
        }

        var instanceType = instance.GetType();
        var methodName = msg.ReadString();
        var method = instanceType.GetMethod(methodName);

        Debug.Log("RPC: " + instanceType.Name + "." + methodName);

        if (method == null)
        {
            throw new Exception("Found no method named '" + methodName + "' on type '" + instance.GetType() + "'");
        }

        var parms = method.GetParameters();
        var args = new object[parms.Length];

        args[0] = msg;

        for (var i = 1; i < args.Length; ++i)
        {
            args[i] = ReadArgument(msg, parms[i].ParameterType);
        }

        method.Invoke(instance, args);
    }
            internal override void ReceiveMessage(NetIncomingMessage message)
            {
                int relate = NetUtility.RelativeSequenceNumber(message.m_sequenceNumber, m_windowStart);

                // ack no matter what
                m_connection.QueueAck(message.m_receivedMessageType, message.m_sequenceNumber);

                if (relate == 0)
                {
                    // Log("Received message #" + message.SequenceNumber + " right on time");

                    //
                    // excellent, right on time
                    //
                    //m_peer.LogVerbose("Received RIGHT-ON-TIME " + message);

                    AdvanceWindow();
                    m_peer.ReleaseMessage(message);

                    // release withheld messages
                    int nextSeqNr = (message.m_sequenceNumber + 1) % NetConstants.NumSequenceNumbers;

                    while (m_earlyReceived[nextSeqNr % m_windowSize])
                    {
                        message = m_withheldMessages[nextSeqNr % m_windowSize];
                        NetException.Assert(message != null);

                        // remove it from withheld messages
                        m_withheldMessages[nextSeqNr % m_windowSize] = null;

                        m_peer.LogVerbose("Releasing withheld message #" + message);

                        m_peer.ReleaseMessage(message);

                        AdvanceWindow();
                        nextSeqNr++;
                    }

                    return;
                }

                if (relate < 0)
                {
                    m_peer.LogVerbose("Received message #" + message.m_sequenceNumber + " DROPPING DUPLICATE");
                    // duplicate
                    return;
                }

                // relate > 0 = early message
                if (relate > m_windowSize)
                {
                    // too early message!
                    m_peer.LogDebug("Received " + message + " TOO EARLY! Expected " + m_windowStart);
                    return;
                }

                m_earlyReceived.Set(message.m_sequenceNumber % m_windowSize, true);
                m_peer.LogVerbose("Received " + message + " WITHHOLDING, waiting for " + m_windowStart);
                m_withheldMessages[message.m_sequenceNumber % m_windowSize] = message;
            }
            internal override void ReceiveMessage(NetIncomingMessage msg)
            {
                // ack no matter what
                m_connection.QueueAck(msg.m_receivedMessageType, msg.m_sequenceNumber);

                m_peer.ReleaseMessage(msg);
            }
        /// <summary>
        /// Processes a handshake response (initiated locally)
        /// </summary>
        /// <param name="msg">Incoming message with resonse data</param>
        internal static NetSRP.Verification HandshakeFromPassive(NetIncomingMessage msg)
        {
            // Get response
            NetSRP.Response response = new NetSRP.Response();
            response.ExtractPacketData(msg);

            // Create Verification data
            return (msg.SenderConnection.Tag as Handshake).KeyFromResponse(response);
        }
Example #9
0
    //This is run whenever a room or server RPC is received
    private void ProcessRpc(byte b, NetIncomingMessage msg)
    {
        Debug.Log("Room rpc " + b + " received");

        //TODO: deserialize data from the msg object
        //this can be done via if/else, switches, or Dictionary<byte, Action<NetIncomingMessage>>.
        //The dictionary is recommended for its cleanness
        //the if/else is fastest if you only have a few Room/Server RPCs
    }
        /// <summary>
        /// Finishes the handshake by processing the verification data received
        /// </summary>
        /// <param name="msg">Incomming message with verification data</param>
        internal static Boolean FinishHandshakeFromPassive(NetIncomingMessage msg)
        {
            // Get Verification
            NetSRP.Verification verification = new NetSRP.Verification();
            verification.ExtractPacketData(msg);

            // Try to verify data
            return (msg.SenderConnection.Tag as Handshake).VerificationOfPassiveParty(verification);
        }
        /// <summary>
        /// Processes a handshake that was not initated locally
        /// </summary>
        /// <param name="msg">Incomming msg with handshake</param>
        internal static NetSRP.Response HandshakeFromActive(NetIncomingMessage msg)
        {
            // Read request
            NetSRP.Request request = new NetSRP.Request();
            request.ExtractPacketData(msg);

            // Create response
            return (msg.SenderConnection.Tag as Handshake).ResponseFromRequest(request);
        }
    public static Vector3 ReadVector3(NetIncomingMessage msg)
    {
        Vector3 data;

        data.x = msg.ReadFloat();
        data.y = msg.ReadFloat();
        data.z = msg.ReadFloat();

        return data;
    }
 /// <summary>
 /// Decrypt an incoming message
 /// </summary>
 public bool Decrypt(NetIncomingMessage msg)
 {
     int numBytes = msg.LengthBytes;
     for (int i = 0; i < numBytes; i++)
     {
         int offset = i % m_key.Length;
         msg.m_data[i] = (byte)(msg.m_data[i] ^ m_key[offset]);
     }
     return true;
 }
        public override void OnDataReceived(NetIncomingMessage incMsg)
        {
            NetDataType type = (NetDataType)incMsg.ReadByte();
            if (type == NetDataType.eDATA_REQUEST_LOGIN)
            {
                string accountName = incMsg.ReadString();
                string password = incMsg.ReadString();

                Login(accountName, password, incMsg.SenderConnection);
            }
        }
    public NetworkClientInfo GetClientInfo(NetIncomingMessage msg)
    {
        var connection = msg.SenderConnection;

        if (connection.Tag == null)
        {
            connection.Tag = new NetworkClientInfo(++host_id_counter, connection);
        }

        return ((NetworkClientInfo)connection.Tag);
    }
    public static Quaternion ReadQuaternion(NetIncomingMessage msg)
    {
        Quaternion data;

        data.x = msg.ReadFloat();
        data.y = msg.ReadFloat();
        data.z = msg.ReadFloat();
        data.w = msg.ReadFloat();

        return data;
    }
Example #17
0
    void onMovement(NetIncomingMessage msg)
    {
        Debug.Log("onMovement");

        int id = msg.ReadInt32();
        LidgrenGameObject lgo = null;

        if (lgos.TryGetValue(id, out lgo))
        {
            lgo.GetComponent<PlayerAnimator>().OnPlayerMovement(msg.ReadByte());
        }
    }
Example #18
0
    void onRequestSpawn(NetIncomingMessage msg)
    {
        LidgrenPlayer player = (LidgrenPlayer)msg.SenderConnection.Tag;

        if (player.GameObject == null)
        {
            player.GameObject = LidgrenGameObject.Spawn(-1, player.Id, msg.SenderConnection);

            foreach (NetConnection c in server.Connections)
            {
                spawnOn(player.GameObject, c);
            }
        }
    }
        public override void OnConnectionApproval(NetIncomingMessage incMsg)
        {
            string encryptedToken = incMsg.ReadString();
            F3_NetConnectionToken loginToken = GetConnectionToken();

            if (loginToken.ValidateToken(encryptedToken))
            {
                incMsg.SenderConnection.Approve();
            }
            else
            {
                incMsg.SenderConnection.Deny();
            }
        }
        public override void OnStatusChanged(NetIncomingMessage incMsg)
        {
            NetConnectionStatus status = (NetConnectionStatus)incMsg.ReadByte();

            if (status == NetConnectionStatus.Connected)
            {
                ConnectPlayer(incMsg.SenderConnection.RemoteUniqueIdentifier, null);
            }

            if (status == NetConnectionStatus.Disconnected)
            {
                DisconnectPlayer(incMsg.SenderConnection.RemoteUniqueIdentifier);
            }
        }
            internal override void ReceiveMessage(NetIncomingMessage msg)
            {
                int nr = msg.m_sequenceNumber;

                // ack no matter what
                m_connection.QueueAck(msg.m_receivedMessageType, nr);

                int relate = NetUtility.RelativeSequenceNumber(nr, m_lastReceivedSequenceNumber);
                if (relate < 0)
                    return; // drop if late

                m_lastReceivedSequenceNumber = nr;
                m_peer.ReleaseMessage(msg);
            }
Example #22
0
    public override NetIncomingMessage ReadMessage()
    {
        if (!connected)
        {
            return null;
        }
        if (messages.Count() > 0)
        {
            return messages.Dequeue();
        }
        if (connected2)
        {
            while (tosend.Count() > 0)
            {
                INetOutgoingMessage msg = tosend.Dequeue();
                DoSendPacket(msg);
            }
        }

        EnetEventRef event_ = new EnetEventRef();
        if (platform.EnetHostService(host, 0, event_))
        {
            do
            {
                switch (event_.e.Type())
                {
                    case EnetEventType.Connect:
                        connected2 = true;
                        break;
                    case EnetEventType.Receive:
                        byte[] data = event_.e.Packet().GetBytes();
                        int dataLength = event_.e.Packet().GetBytesCount();
                        event_.e.Packet().Dispose();
                        NetIncomingMessage msg = new NetIncomingMessage();
                        msg.message = data;
                        msg.messageLength = dataLength;
                        messages.Enqueue(msg);
                        break;
                }
            }
            while (platform.EnetHostCheckEvents(host, event_));
        }
        if (messages.Count() > 0)
        {
            return messages.Dequeue();
        }
        return null;
    }
Example #23
0
    void onMovement(NetIncomingMessage msg)
    {
        LidgrenPlayer player = (LidgrenPlayer)msg.SenderConnection.Tag;

        // Forward message to all other players
        NetOutgoingMessage forward = msg.SenderConnection.Peer.CreateMessage();
        forward.Write(msg);

        server.SendToAll(forward, msg.SenderConnection, NetDeliveryMethod.ReliableOrdered, 1);
        
        // Throw away Id on server, we dont need it
        msg.ReadInt32();

        // Read movement animation on server also
        player.GameObject.GetComponent<PlayerAnimator>().OnPlayerMovement(msg.ReadByte());
    }
Example #24
0
    public static void RecommendationSelected(NetIncomingMessage inMsg)
    {
        int selected = inMsg.ReadInt32();
        int count = inMsg.ReadInt32();
        for (int i = 0; i < count; i++)
            recommender.AddBusy(inMsg.ReadUInt32());

        Console.WriteLine("Recommendation selected (" + selected + ")");

        string busyOutput = "Currently Busy:";
        foreach (uint id in recommender.GetBusy())
            busyOutput += " " + id;
        Console.WriteLine(busyOutput);

        recommender.CandidateSelected(selected);
    }
 public override NetIncomingMessage ReadMessage()
 {
     int received = p.WebSocketReceive(incomingData, incomingDataMax);
     if (received == -1)
     {
         return null;
     }
     else
     {
         NetIncomingMessage msg = new NetIncomingMessage();
         msg.message = incomingData;
         msg.messageLength = received;
         msg.SenderConnection = c;
         return msg;
     }
 }
 public override NetIncomingMessage ReadMessage()
 {
     NetIncomingMessage msg = null;
     platform.MonitorEnter(network.ClientReceiveBufferLock);
     {
         if (network.ClientReceiveBuffer.Count() > 0)
         {
             msg = new NetIncomingMessage();
             ByteArray b = network.ClientReceiveBuffer.Dequeue();
             msg.message = b.data;
             msg.messageLength = b.length;
         }
     }
     platform.MonitorExit(network.ClientReceiveBufferLock);
     return msg;
 }
    public void RequestObjects(NetIncomingMessage msg)
    {
        var client = GetClientInfo(msg);

        foreach (var obj in NetworkActorRegistry.Objects)
        {
            if (obj != null)
            {
                NetworkRemoteCall.CallOnClient(
                    client, "Spawn",
                    obj.host_id, obj.actor_id, obj.prefab_name,
                    obj.transform.position, obj.transform.rotation
                );
            }
        }
    }
Example #28
0
    public static void RecommendationRequested(NetIncomingMessage inMsg)
    {
        Console.WriteLine("Recommendation requested...");

        if (recommender.GetBusy().Count() == 0)
        {
            List<Candidate> candidates =
                new List<Candidate>(recommender.GetCandidates());
            NetOutgoingMessage outMsg = network.CreateMessage();
            EncodeRecommendations(candidates, outMsg);
            network.Send(outMsg);
            Console.WriteLine("Sent recommendations.");
        }
        else
        {
            Console.WriteLine("Holding recommendations until all objects are free...");
        }
    }
Example #29
0
    void onPosition(NetIncomingMessage msg)
    {
        Debug.Log("onPosition");

        int id = msg.ReadInt32();
        LidgrenGameObject lgo = null;

        if (lgos.TryGetValue(id, out lgo))
        {
            // Update position
            Vector3 pos = new Vector3(msg.ReadFloat(), msg.ReadFloat(), msg.ReadFloat());
            lgo.transform.position = pos;

            // Update rotation
            Quaternion rot = new Quaternion(msg.ReadFloat(), msg.ReadFloat(), msg.ReadFloat(), msg.ReadFloat());
            lgo.transform.GetChild(0).rotation = rot;
        }
    }
Example #30
0
    public void RecommendationReceived(NetIncomingMessage inMsg)
    {
        Debug.Log("RecommendationReceived");

        int count = inMsg.ReadInt32();
        string[] names = new string[count];
        uint[][] participants = new uint[count][];

        for (int i = 0; i < count; i++)
        {
            names[i] = inMsg.ReadString();
            int numParticipants = inMsg.ReadInt32();
            participants[i] = new uint[numParticipants];
            for (int j = 0; j < numParticipants; j++)
                participants[i][j] = inMsg.ReadUInt32();
        }

        this.Runner.ReceivedCandidates(names, participants);
    }
 /// <summary>
 /// Shortcut constructor, immediately decodes an incoming message
 /// </summary>
 /// <param name="msg">Incoming message to immediately decode.</param>
 public NetworkMessage(NetIncomingMessage msg)
 {
     this.Decode(msg);
 }
Example #32
0
        private void ClientInitRequest(NetIncomingMessage inc)
        {
            if (ConnectedClients.Find(c => c.Connection == inc.SenderConnection) != null)
            {
                //this client was already authenticated
                //another init request means they didn't get any update packets yet
                return;
            }

            UnauthenticatedClient unauthClient = unauthenticatedClients.Find(uc => uc.Connection == inc.SenderConnection);

            if (unauthClient == null)
            {
                //client did not ask for nonce first, can't authorize
                inc.SenderConnection.Disconnect("Client did not properly request authentication.");
                return;
            }

            if (!string.IsNullOrEmpty(password))
            {
                //decrypt message and compare password
                string saltedPw = password;
                saltedPw = saltedPw + Convert.ToString(unauthClient.Nonce);
                saltedPw = Encoding.UTF8.GetString(NetUtility.ComputeSHAHash(Encoding.UTF8.GetBytes(saltedPw)));
                string clPw = inc.ReadString();
                if (clPw != saltedPw)
                {
                    unauthClient.failedAttempts++;
                    if (unauthClient.failedAttempts > 3)
                    {
                        //disconnect and ban after too many failed attempts
                        banList.BanPlayer("Unnamed", unauthClient.Connection.RemoteEndPoint.Address.ToString(), "Too many failed login attempts.", null);
                        DisconnectUnauthClient(inc, unauthClient, "Too many failed login attempts. You have been automatically banned from the server.");

                        Log(inc.SenderConnection.RemoteEndPoint.Address.ToString() + " has been banned from the server (too many wrong passwords)", ServerLog.MessageType.Error);
                        DebugConsole.NewMessage(inc.SenderConnection.RemoteEndPoint.Address.ToString() + " has been banned from the server (too many wrong passwords)", Color.Red);
                        return;
                    }
                    else
                    {
                        //not disconnecting the player here, because they'll still use the same connection and nonce if they try logging in again
                        NetOutgoingMessage reject = server.CreateMessage();
                        reject.Write((byte)ServerPacketHeader.AUTH_FAILURE);
                        reject.Write("Wrong password! You have " + Convert.ToString(4 - unauthClient.failedAttempts) + " more attempts before you're banned from the server.");
                        Log(inc.SenderConnection.RemoteEndPoint.Address.ToString() + " failed to join the server (incorrect password)", ServerLog.MessageType.Error);
                        DebugConsole.NewMessage(inc.SenderConnection.RemoteEndPoint.Address.ToString() + " failed to join the server (incorrect password)", Color.Red);
                        server.SendMessage(reject, unauthClient.Connection, NetDeliveryMethod.Unreliable);
                        unauthClient.AuthTimer = 10.0f;
                        return;
                    }
                }
            }
            string clVersion     = inc.ReadString();
            string clPackageName = inc.ReadString();
            string clPackageHash = inc.ReadString();

            string clName = Client.SanitizeName(inc.ReadString());

            if (string.IsNullOrWhiteSpace(clName))
            {
                DisconnectUnauthClient(inc, unauthClient, "You need a name.");

                Log(inc.SenderConnection.RemoteEndPoint.Address.ToString() + " couldn't join the server (no name given)", ServerLog.MessageType.Error);
                DebugConsole.NewMessage(inc.SenderConnection.RemoteEndPoint.Address.ToString() + " couldn't join the server (no name given)", Color.Red);
                return;
            }

            if (clVersion != GameMain.Version.ToString())
            {
                DisconnectUnauthClient(inc, unauthClient, "Version " + GameMain.Version + " required to connect to the server (Your version: " + clVersion + ")");

                Log(clName + " (" + inc.SenderConnection.RemoteEndPoint.Address.ToString() + ") couldn't join the server (wrong game version)", ServerLog.MessageType.Error);
                DebugConsole.NewMessage(clName + " (" + inc.SenderConnection.RemoteEndPoint.Address.ToString() + ") couldn't join the server (wrong game version)", Color.Red);
                return;
            }
            if (clPackageName != GameMain.SelectedPackage.Name)
            {
                DisconnectUnauthClient(inc, unauthClient, "Your content package (" + clPackageName + ") doesn't match the server's version (" + GameMain.SelectedPackage.Name + ")");
                Log(clName + " (" + inc.SenderConnection.RemoteEndPoint.Address.ToString() + ") couldn't join the server (wrong content package name)", ServerLog.MessageType.Error);
                DebugConsole.NewMessage(clName + " (" + inc.SenderConnection.RemoteEndPoint.Address.ToString() + ") couldn't join the server (wrong content package name)", Color.Red);
                return;
            }
            if (clPackageHash != GameMain.SelectedPackage.MD5hash.Hash)
            {
                DisconnectUnauthClient(inc, unauthClient, "Your content package (MD5: " + clPackageHash + ") doesn't match the server's version (MD5: " + GameMain.SelectedPackage.MD5hash.Hash + ")");
                Log(clName + " (" + inc.SenderConnection.RemoteEndPoint.Address.ToString() + ") couldn't join the server (wrong content package hash)", ServerLog.MessageType.Error);
                DebugConsole.NewMessage(clName + " (" + inc.SenderConnection.RemoteEndPoint.Address.ToString() + ") couldn't join the server (wrong content package hash)", Color.Red);
                return;
            }

            if (!whitelist.IsWhiteListed(clName, inc.SenderConnection.RemoteEndPoint.Address.ToString()))
            {
                DisconnectUnauthClient(inc, unauthClient, "You're not in this server's whitelist.");
                Log(clName + " (" + inc.SenderConnection.RemoteEndPoint.Address.ToString() + ") couldn't join the server (not in whitelist)", ServerLog.MessageType.Error);
                DebugConsole.NewMessage(clName + " (" + inc.SenderConnection.RemoteEndPoint.Address.ToString() + ") couldn't join the server (not in whitelist)", Color.Red);
                return;
            }
            if (!Client.IsValidName(clName, this))
            {
                DisconnectUnauthClient(inc, unauthClient, "Your name contains illegal symbols.");
                Log(clName + " (" + inc.SenderConnection.RemoteEndPoint.Address.ToString() + ") couldn't join the server (invalid name)", ServerLog.MessageType.Error);
                DebugConsole.NewMessage(clName + " (" + inc.SenderConnection.RemoteEndPoint.Address.ToString() + ") couldn't join the server (invalid name)", Color.Red);
                return;
            }
            if (Homoglyphs.Compare(clName.ToLower(), Name.ToLower()))
            {
                DisconnectUnauthClient(inc, unauthClient, "That name is taken.");
                Log(clName + " (" + inc.SenderConnection.RemoteEndPoint.Address.ToString() + ") couldn't join the server (name taken by the server)", ServerLog.MessageType.Error);
                DebugConsole.NewMessage(clName + " (" + inc.SenderConnection.RemoteEndPoint.Address.ToString() + ") couldn't join the server (name taken by the server)", Color.Red);
                return;
            }
            Client nameTaken = ConnectedClients.Find(c => Homoglyphs.Compare(c.Name.ToLower(), clName.ToLower()));

            if (nameTaken != null)
            {
                if (nameTaken.Connection.RemoteEndPoint.Address.ToString() == inc.SenderEndPoint.Address.ToString())
                {
                    //both name and IP address match, replace this player's connection
                    nameTaken.Connection.Disconnect("Your session was taken by a new connection on the same IP address.");
                    nameTaken.Connection = unauthClient.Connection;
                    nameTaken.InitClientSync(); //reinitialize sync ids because this is a new connection
                    unauthenticatedClients.Remove(unauthClient);
                    unauthClient = null;
                    return;
                }
                else
                {
                    //can't authorize this client
                    DisconnectUnauthClient(inc, unauthClient, "That name is taken.");
                    Log(clName + " (" + inc.SenderConnection.RemoteEndPoint.Address.ToString() + ") couldn't join the server (name already taken)", ServerLog.MessageType.Error);
                    DebugConsole.NewMessage(clName + " (" + inc.SenderConnection.RemoteEndPoint.Address.ToString() + ") couldn't join the server (name already taken)", Color.Red);
                    return;
                }
            }

            //new client
            Client newClient = new Client(clName, GetNewClientID());

            newClient.InitClientSync();
            newClient.Connection = unauthClient.Connection;
            unauthenticatedClients.Remove(unauthClient);
            unauthClient = null;
            ConnectedClients.Add(newClient);

#if CLIENT
            GameMain.NetLobbyScreen.AddPlayer(newClient.Name);
#endif
            GameMain.Server.SendChatMessage(clName + " has joined the server.", ChatMessageType.Server, null);

            var savedPermissions = clientPermissions.Find(cp => cp.IP == newClient.Connection.RemoteEndPoint.Address.ToString());
            if (savedPermissions != null)
            {
                newClient.SetPermissions(savedPermissions.Permissions, savedPermissions.PermittedCommands);
            }
            else
            {
                newClient.SetPermissions(ClientPermissions.None, new List <DebugConsole.Command>());
            }
        }
 public static EntityUid ReadEntityUid(this NetIncomingMessage message)
 {
     return(new EntityUid(message.ReadInt32()));
 }
Example #34
0
 ///
 /// <summary>
 ///		Reads any custom properties from a <see cref="NetIncomingMessage"/>.
 /// </summary>
 ///
 /// <param name="message">The <see cref="NetIncomingMessage"/> received from the server.</param>
 ///
 public virtual void readCustomNetworkProperties(ref NetIncomingMessage message)
 {
     return;
 }
        internal override void InternalDeserialize(NetIncomingMessage lidgrenMsg)
        {
            base.InternalDeserialize(lidgrenMsg);

            FolderName = lidgrenMsg.ReadString();
        }
Example #36
0
 public override void HandleNetworkMessage(NetIncomingMessage message)
 {
 }
Example #37
0
 public override void ReadFromBuffer(NetIncomingMessage buffer)
 {
     Text = buffer.ReadString();
 }
 internal void OnWarning(NetIncomingMessage msg)
 {
     Debug.LogWarning(msg.ReadString());
 }
Example #39
0
 public void HandlePacket(NetIncomingMessage inc)
 {
     handler.Handle(inc);
 }
 internal void OnError(NetIncomingMessage msg)
 {
     Debug.LogError(msg.ReadString());
 }
Example #41
0
 public override void ReadFromBuffer(NetIncomingMessage buffer)
 {
     PlayerName = buffer.ReadString();
 }
Example #42
0
        private static void Consume(NetIncomingMessage msg)
        {
            try
            {
                //faster than switch, as this is in most to least common order
                if (msg.SequenceChannel == Channels.UNRELIABLE_STREAM)
                {
                    if (msg.DeliveryMethod == NetDeliveryMethod.ReliableUnordered)
                    {
                        HandleStaticRpc(msg);
                    }
                    else
                    {
                        var         actorId = msg.ReadUInt16();
                        NetworkView find;
                        if (NetworkView.Find(actorId, out find))
                        {
                            Player player = GetPlayer(msg.SenderConnection);
                            find.OnDeserializeStream(msg, player);
                        }
                        else
                        {
                            if (GetPlayer(msg.SenderConnection).CurrentRoom != null)
                            {
                                Debug.LogWarning(
                                    "[PNetS.Consume] Player {0} attempted to send unreliable stream data for view {1}, but it does not exist",
                                    msg.SenderConnection.Tag, actorId);
                                (msg.SenderConnection.Tag as Player).InternalErrorCount++;
                            }
                        }
                    }
                }
                else if (msg.SequenceChannel == Channels.RELIABLE_STREAM)
                {
                    var         actorId = msg.ReadUInt16();
                    NetworkView find;
                    if (NetworkView.Find(actorId, out find))
                    {
                        Player player = GetPlayer(msg.SenderConnection);
                        find.OnDeserializeStream(msg, player);
                    }
                    else
                    {
                        if (GetPlayer(msg.SenderConnection).CurrentRoom != null)
                        {
                            Debug.LogWarning(
                                "[PNetS.Consume] Player {0} attempted to send reliable stream data for view {1}, but it does not exist",
                                msg.SenderConnection.Tag, actorId);
                            (msg.SenderConnection.Tag as Player).InternalErrorCount++;
                        }
                    }
                }
                else if (msg.SequenceChannel >= Channels.BEGIN_RPCMODES && msg.SequenceChannel <= Channels.OWNER_RPC)
                {
                    //rpc...
                    var         viewId = msg.ReadUInt16();
                    var         rpcId  = msg.ReadByte();
                    Player      player = GetPlayer(msg.SenderConnection);
                    NetworkView find;
                    var         info = new NetMessageInfo((RPCMode)(msg.SequenceChannel - Channels.BEGIN_RPCMODES), player);
                    if (NetworkView.Find(viewId, out find))
                    {
                        find.CallRPC(rpcId, msg, info);


                        //Do we need to forward this still?
                        if (info.mode != RPCMode.Server && info.continueForwarding)
                        {
                            //need to forward...
                            if (info.mode == RPCMode.Others || info.mode == RPCMode.All)
                            {
                            }
                            else
                            {
                                find.Buffer(msg);
                            }
                            find.Send(msg, info.mode, msg.SenderConnection);
                        }
                    }
                    else
                    {
                        if (player.CurrentRoom != null)
                        {
                            Debug.LogWarning(
                                "[PNetS.Consume] Player {0} attempted RPC {1} on view {2}, but the view does not exist",
                                player, rpcId, viewId);
                            player.InternalErrorCount++;
                        }
                    }
                }
                else if (msg.SequenceChannel == Channels.SYNCHED_FIELD)
                {
                    var         viewId  = msg.ReadUInt16();
                    var         fieldId = msg.ReadByte();
                    NetworkView find;
                    if (NetworkView.Find(viewId, out find))
                    {
                        find.BufferField(msg, fieldId);
                        find.SendField(msg, msg.SenderConnection);
                    }
                }
                else if (msg.SequenceChannel == Channels.OBJECT_RPC)
                {
                    Player player = GetPlayer(msg.SenderConnection);
                    if (player.CurrentRoom != null)
                    {
                        player.CurrentRoom.IncomingObjectRPC(msg);
                    }
                }
                else if (msg.SequenceChannel == Channels.STATIC_RPC)
                {
                    HandleStaticRpc(msg);
                }
                else if (msg.SequenceChannel == Channels.STATIC_UTILS)
                {
                    ProcessUtils(msg);
                }
                else
                {
                    Debug.LogWarning("{2} bytes received over unhandled channel {0}, delivery {1}", msg.SequenceChannel, msg.DeliveryMethod, msg.LengthBytes);
                    (msg.SenderConnection.Tag as Player).InternalErrorCount++;
                }
            }
            catch (Exception ex)
            {
                Debug.Log("[Consumption] {0} : {1}", ex.Message, ex.StackTrace);
            }
        }
Example #43
0
 protected abstract void Disconnected(NetIncomingMessage msg);
 /// <summary>
 /// Read a Point
 /// </summary>
 public static Point ReadPoint(this NetIncomingMessage message)
 {
     return(new Point(message.ReadInt32(), message.ReadInt32()));
 }
Example #45
0
 public void Deserialize(NetIncomingMessage lidgrenMsg)
 {
     PlayerName = lidgrenMsg.ReadString();
     VesselId   = GuidUtil.Deserialize(lidgrenMsg);
     Type       = (LockType)lidgrenMsg.ReadInt32();
 }
Example #46
0
 internal abstract void InternalDeserialize(NetIncomingMessage lidgrenMsg);
Example #47
0
    public override void Read(NetIncomingMessage inInputStream)
    {
        bool stateBit = inInputStream.ReadBoolean();

        uint32_t readState = 0;

        if (stateBit)
        {
            uint32_t playerId = inInputStream.ReadUInt32();
            SetPlayerId(playerId);
            readState |= (uint32_t)EActorReplicationState.ECRS_PlayerId;
        }

        Vector3 oldRotation = GetRotation();
        Vector3 oldLocation = GetLocation();
        Vector3 oldVelocity = GetVelocity();

        Vector3 replicatedLocation = default(Vector3);
        Vector3 replicatedVelocity = default(Vector3);

        stateBit = inInputStream.ReadBoolean();
        if (stateBit)
        {
            inInputStream.Read(ref replicatedVelocity);
            //replicatedVelocity.y = GetVelocity().y;
            SetVelocity(replicatedVelocity);
            //Debug.Log("replicatedVelocity : " + replicatedVelocity + ", player_id :" + GetPlayerId());

            inInputStream.Read(ref replicatedLocation);
            //replicatedLocation.y = GetLocation().y;
            SetLocation(replicatedLocation);
            //Debug.Log("replicatedLocation : " + replicatedLocation + ", player_id :" + GetPlayerId());

            IsRight   = inInputStream.ReadBoolean();
            IsLeft    = inInputStream.ReadBoolean();
            IsForward = inInputStream.ReadBoolean();
            IsBack    = inInputStream.ReadBoolean();

            mDirection.x  = 0.0f;
            mDirection.z  = 0.0f;
            mDirection.x += IsRight ? Vector3.right.x : 0.0f;
            mDirection.x += IsLeft ? Vector3.left.x : 0.0f;
            mDirection.z += IsForward ? Vector3.forward.z : 0.0f;
            mDirection.z += IsBack ? Vector3.back.z : 0.0f;
            mDirection.Normalize();

            //Debug.Log("mDirection : " + mDirection + ", player_id :" + GetPlayerId());

            mThrustDir = 1.0f;
            readState |= (uint32_t)EActorReplicationState.ECRS_Pose;
        }


        stateBit = inInputStream.ReadBoolean();
        if (stateBit)
        {
            Vector3 color = default(Vector3);
            inInputStream.Read(ref color);
            SetColor(color);
            readState |= (uint32_t)EActorReplicationState.ECRS_Color;
        }

        stateBit = inInputStream.ReadBoolean();
        if (stateBit)
        {
            mHealth    = 0;
            mHealth    = inInputStream.ReadInt32(4);
            readState |= (uint32_t)EActorReplicationState.ECRS_Health;
        }

        if (GetPlayerId() == NetworkManagerClient.sInstance.GetPlayerId())
        {
            //did we get health? if so, tell the hud!
            if ((readState & (uint32_t)EActorReplicationState.ECRS_Health) != 0)
            {
                //HUD::sInstance->SetPlayerHealth(mHealth);
            }

            DoClientSidePredictionAfterReplicationForLocalActor(readState);

            //if this is a create packet, don't interpolate
            if ((readState & (uint32_t)EActorReplicationState.ECRS_PlayerId) == 0)
            {
                InterpolateClientSidePrediction(oldRotation, oldLocation, oldVelocity, false);
            }
        }
        else
        {
            DoClientSidePredictionAfterReplicationForRemoteActor(readState);

            //will this smooth us out too? it'll interpolate us just 10% of the way there...
            if ((readState & (uint32_t)EActorReplicationState.ECRS_PlayerId) == 0)
            {
                InterpolateClientSidePrediction(oldRotation, oldLocation, oldVelocity, true);
            }
        }
    }
Example #48
0
 private void OnDataMessage(NetIncomingMessage buff)
 {
     PluginMgr.NotifyData(buff);
 }
        protected override void ProcessServerMessages()
        {
            while ((_msg = _network.ReadMessage()) != null)
            {
                switch (_msg.MessageType)
                {
                case NetIncomingMessageType.StatusChanged:
                {
                    OnStatusChanged(_msg, (NetConnectionStatus)_msg.ReadByte());
                    break;
                }

                case NetIncomingMessageType.VerboseDebugMessage:
                case NetIncomingMessageType.DebugMessage:
                {
                    OnDebug(_msg);
                    break;
                }

                case NetIncomingMessageType.WarningMessage:
                {
                    OnWarning(_msg);
                    break;
                }

                case NetIncomingMessageType.Error:
                case NetIncomingMessageType.ErrorMessage:
                {
                    OnError(_msg);
                    break;
                }

                case NetIncomingMessageType.Data:
                {
                    var type = (MessageType)_msg.ReadByte();
                    if (type == MessageType.WorldState)
                    {
                        System.Array.Clear(_world_state, 0, Constants.MaxPlayers);

                        for (var i = 0; i < Constants.MaxPlayers; i++)
                        {
                            var exists = _msg.ReadBoolean();
                            if (exists)
                            {
                                _world_state[i] = EntityState.Read(_msg);
                            }
                        }

                        OnData(_world_state);
                    }
                    else if (type == MessageType.Connected)
                    {
                        var entity_id = _msg.ReadInt32();
                        Create(entity_id);
                    }

                    break;
                }

                default:
                {
                    OnEvent(_msg);
                    break;
                }
                }

                _network.Recycle(_msg);
            }
        }
Example #50
0
        private List <object> UnPackParams(NetIncomingMessage message)
        {
            var messageParams = new List <object>();

            while (message.Position < message.LengthBits)
            {
                switch ((NetworkDataType)message.ReadByte())
                {
                case NetworkDataType.d_enum:
                    messageParams.Add(message.ReadInt32());     //Cast from int, because enums are ints.
                    break;

                case NetworkDataType.d_bool:
                    messageParams.Add(message.ReadBoolean());
                    break;

                case NetworkDataType.d_byte:
                    messageParams.Add(message.ReadByte());
                    break;

                case NetworkDataType.d_sbyte:
                    messageParams.Add(message.ReadSByte());
                    break;

                case NetworkDataType.d_ushort:
                    messageParams.Add(message.ReadUInt16());
                    break;

                case NetworkDataType.d_short:
                    messageParams.Add(message.ReadInt16());
                    break;

                case NetworkDataType.d_int:
                    messageParams.Add(message.ReadInt32());
                    break;

                case NetworkDataType.d_uint:
                    messageParams.Add(message.ReadUInt32());
                    break;

                case NetworkDataType.d_ulong:
                    messageParams.Add(message.ReadUInt64());
                    break;

                case NetworkDataType.d_long:
                    messageParams.Add(message.ReadInt64());
                    break;

                case NetworkDataType.d_float:
                    messageParams.Add(message.ReadFloat());
                    break;

                case NetworkDataType.d_double:
                    messageParams.Add(message.ReadDouble());
                    break;

                case NetworkDataType.d_string:
                    messageParams.Add(message.ReadString());
                    break;

                case NetworkDataType.d_byteArray:
                    int length = message.ReadInt32();
                    messageParams.Add(message.ReadBytes(length));
                    break;
                }
            }
            return(messageParams);
        }
        public static void OnClientSendIGameMessage(EIGameMessageType _EIGameMessageType, NetIncomingMessage _NetIncomingMessage)
        {
            var var_gameMessageType = _EIGameMessageType;

            switch (var_gameMessageType)
            {
            case EIGameMessageType.RequestPlayerMessage:
                handleRequestPlayerMessage(_NetIncomingMessage);
                break;

            case EIGameMessageType.RequestWorldMessage:
                handleRequestWorldMessage(_NetIncomingMessage);
                break;

            case EIGameMessageType.RequestRegionMessage:
                handleRequestRegionMessage(_NetIncomingMessage);
                break;

            case EIGameMessageType.RequestChunkMessage:
                handleRequestChunkMessage(_NetIncomingMessage);
                break;

            case EIGameMessageType.PlayerCommandMessage:
                handlePlayerCommandMessage(_NetIncomingMessage);
                break;

            case EIGameMessageType.RequestBlockMessage:
                handleRequestBlockMessage(_NetIncomingMessage);
                break;

            case EIGameMessageType.RequestLivingObjectMessage:
                handleRequestLivingObjectMessage(_NetIncomingMessage);
                break;

            case EIGameMessageType.CreatureInventoryItemPositionChangeMessage:
                handleCreatureInventoryItemPositionChangeMessage(_NetIncomingMessage);
                break;

            case EIGameMessageType.CreatureEquipmentToInventoryMessage:
                handleCreatureEquipmentToInventoryMessage(_NetIncomingMessage);
                break;

            case EIGameMessageType.CreatureInventoryToEquipmentMessage:
                handleCreatureInventoryToEquipmentMessage(_NetIncomingMessage);
                break;

            case EIGameMessageType.UpdateObjectPositionMessage:
                handleUpdateObjectPositionMessage(_NetIncomingMessage);
                break;
            }
        }
 public UpdatePlayerStateMessage(NetIncomingMessage im)
 {
     this.Decode(im);
 }
Example #53
0
 public LobbyMessage(NetIncomingMessage im)
 {
     Rooms = new List <LobbySaveData>();
     this.Decode(im);
 }
 internal void OnEvent(NetIncomingMessage msg)
 {
     Debug.Log("NetworkServer OnEvent, msg type == " + msg.MessageType);
 }
Example #55
0
 public abstract void ReadInInitialData(NetIncomingMessage im);
Example #56
0
 public virtual void HandlePacket(NetIncomingMessage msg)
 {
     throw new NotImplementedException();             //must be overridden
 }
 /// <summary>
 /// Decoding Constructor to be used by client.
 /// </summary>
 /// <param name="im"></param>
 public vxNetmsgUpdatePlayerEntityState(NetIncomingMessage im)
 {
     PlayerInfo = new vxNetPlayerInfo(1, "any", vxEnumNetPlayerStatus.ReadyToPlay);
     this.DecodeMsg(im);
 }
 private void OnDisconnected(NetIncomingMessage msg)
 {
     Debug.Log("Disconnection: " + msg.SenderConnection + " @ " + msg.SenderEndPoint);
 }
Example #59
0
 /// <summary>
 ///  Handles creation of ui elements over network.
 /// </summary>
 public void HandleElementCreation(NetIncomingMessage msg) //I've opted for hardcoding these in for the moment.
 {
     // TODO: Either implement this or remove it
 }
        public void HandlePlacementRequest(NetIncomingMessage msg)
        {
            string alignRcv = msg.ReadString();

            Boolean isTile = msg.ReadBoolean();

            var mapMgr = (MapManager)IoCManager.Resolve <IMapManager>();

            ushort tileType = 0;

            string entityTemplateName = "";

            if (isTile)
            {
                tileType = msg.ReadUInt16();
            }
            else
            {
                entityTemplateName = msg.ReadString();
            }

            float xRcv   = msg.ReadFloat();
            float yRcv   = msg.ReadFloat();
            var   dirRcv = (Direction)msg.ReadByte();

            IPlayerSession session = IoCManager.Resolve <IPlayerManager>().GetSessionByConnection(msg.SenderConnection);

            if (session.attachedEntity == null)
            {
                return; //Don't accept placement requests from nobodys
            }
            PlacementInformation permission = GetPermission(session.attachedEntity.Uid, alignRcv);
            Boolean isAdmin =
                IoCManager.Resolve <IPlayerManager>().GetSessionByConnection(msg.SenderConnection).adminPermissions.
                isAdmin;

            float   a       = (float)Math.Floor(xRcv);
            float   b       = (float)Math.Floor(yRcv);
            Vector2 tilePos = new Vector2(a, b);

            if (permission != null || true)
            //isAdmin) Temporarily disable actual permission check / admin check. REENABLE LATER
            {
                if (permission != null)
                {
                    if (permission.Uses > 0)
                    {
                        permission.Uses--;
                        if (permission.Uses <= 0)
                        {
                            BuildPermissions.Remove(permission);
                            SendPlacementCancel(session.attachedEntity);
                        }
                    }
                    else
                    {
                        BuildPermissions.Remove(permission);
                        SendPlacementCancel(session.attachedEntity);
                        return;
                    }
                }

                if (!isTile)
                {
                    Entity created = _server.EntityManager.SpawnEntityAt(entityTemplateName, new Vector2(xRcv, yRcv));
                    if (created != null)
                    {
                        created.GetComponent <ITransformComponent>(ComponentFamily.Transform).TranslateTo(
                            new Vector2(xRcv, yRcv));
                        if (created.HasComponent(ComponentFamily.Direction))
                        {
                            created.GetComponent <IDirectionComponent>(ComponentFamily.Direction).Direction = dirRcv;
                        }
                        if (created.HasComponent(ComponentFamily.WallMounted))
                        {
                            created.GetComponent <IWallMountedComponent>(ComponentFamily.WallMounted).AttachToTile(mapMgr.GetTileRef(tilePos));
                        }
                    }
                }
                else
                {
                    mapMgr.Tiles[tilePos] = new Tile(tileType);
                }
            }
            else //They are not allowed to request this. Send 'PlacementFailed'. TBA
            {
                LogManager.Log("Invalid placement request: "
                               + IoCManager.Resolve <IPlayerManager>().GetSessionByConnection(msg.SenderConnection).name +
                               " - " +
                               IoCManager.Resolve <IPlayerManager>().GetSessionByConnection(msg.SenderConnection).
                               attachedEntity.Uid.ToString() +
                               " - " + alignRcv.ToString());

                SendPlacementCancel(
                    IoCManager.Resolve <IPlayerManager>().GetSessionByConnection(msg.SenderConnection).attachedEntity);
            }
        }