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); } }
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); } }
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); }
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); } }
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); }