Beispiel #1
0
        private void ProcessRelayedMessage(NetIncomingMessage msg)
        {
            var ep = msg.ReadIPEndpoint();

            if (IsRelayServer)
            {
                RelayMessage(msg, ep);
            }
            else
            {
                byte innerMsgType;
                if (!msg.ReadByte(out innerMsgType))
                {
                    MyMwcCheaterAlert.AddAlert(MyMwcCheaterAlertType.EXCEPTION_DURING_READING_MESSAGE, msg.SenderEndpoint, "Cannot read message type of RELAYED message");
                    return;
                }

                msg.m_senderEndpoint   = ep;
                msg.m_senderConnection = GetRelayedConnection(ep);

                if (innerMsgType == (byte)MyEventEnum.DISCONNECT)
                {
                    // TODO: msg.SenderConnection.Tag is not player, fix it
                    this.RaisePeerDisconnected(msg.SenderConnection);
                    return;
                }

                ProcessMessageBody(msg, innerMsgType);
            }
        }
Beispiel #2
0
        internal static Nullable <T> GetEnumFromNumber <T, U>(U val, EndPoint senderEndPoint) where T : struct
        {
            Nullable <T> ret = MyMwcUtils.GetEnumFromNumber <T, U>(val);

            if (ret == null)
            {
                //  Return null so caller will ignore this packet!
                MyMwcCheaterAlert.AddAlert(MyMwcCheaterAlertType.UNKNOWN_ENUM_VALUE, senderEndPoint, "val: " + val.ToString());
                return(null);
            }
            else
            {
                return(ret.Value);
            }
        }
Beispiel #3
0
        private void ProcessMessage(NetIncomingMessage msg)
        {
            byte msgType;

            if (!msg.ReadByte(out msgType))
            {
                MyMwcCheaterAlert.AddAlert(MyMwcCheaterAlertType.EXCEPTION_DURING_READING_MESSAGE, msg.SenderEndpoint, "Cannot read message type");
                return;
            }

            if (msgType == (byte)MyEventEnum.RELAY)
            {
                ProcessRelayedMessage(msg);
                return;
            }

            ProcessMessageBody(msg, msgType);
        }
Beispiel #4
0
        private void ProcessMessageBody(NetIncomingMessage msg, byte msgType)
        {
            if (!m_allowedMessageTypes.Contains(msgType))
            {
                MyMwcCheaterAlert.AddAlert(MyMwcCheaterAlertType.EXCEPTION_DURING_READING_MESSAGE, msg.SenderEndpoint, "Unknown message type: " + msgType);
                return;
            }

            var handler = MessageFilter;

            if (handler != null && !handler(msg.SenderConnection, msg.SenderEndpoint, (MyEventEnum)msgType))
            {
                return;
            }

            Action <NetIncomingMessage, MyEventEnum, IPEndPoint> callback;

            if (m_actions.TryGetValue(msgType, out callback))
            {
                callback(msg, (MyEventEnum)msgType, msg.SenderEndpoint);
            }
        }
Beispiel #5
0
        private void ProcessCallbackMsg <T>(NetIncomingMessage msg, MyEventEnum eventType, IPEndPoint endpoint, EventCallback <T> callback)
            where T : struct, IMyEvent
        {
            if (callback == null)
            {
                return;
            }

            T inst = new T();

            inst.SenderEndpoint   = endpoint;
            inst.SenderConnection = msg.SenderConnection;
            if (ReadMessage(msg, ref inst))
            {
                LogMessage <T>(eventType, inst);
                callback(ref inst);
            }
            else
            {
                MyMwcCheaterAlert.AddAlert(MyMwcCheaterAlertType.EXCEPTION_DURING_READING_MESSAGE, msg.SenderEndpoint, "Invalid message, message type: " + (int)inst.EventType);
            }
        }
 void HandleError(string error)
 {
     MyMwcCheaterAlert.AddAlert(MyMwcCheaterAlertType.EXCEPTION_DURING_READING_MESSAGE, m_endpoint, error);
 }