protected virtual void ServerOnMessageReceived(object sender, NetworkMessage message) { if (Parse(message)) { Send(message.MessageId, message.Data); Logger.Info("[Received] {0} : {1}", message.MessageId, message.GetType().Name); } }
protected override bool Parse(NetworkMessage message) { if (message is SelectedServerDataMessage) { SelectedServerDataMessage serverData = (SelectedServerDataMessage)message; Program.MITM.Tickets.Add(serverData.Ticket, Tuple.Create(serverData.Address, (int)serverData.Port)); serverData.Address = "127.0.0.1"; serverData.Port = (ushort)SnifferConfig.Instance.GamePort; Send(serverData); Stop(); return false; } return true; }
protected override bool Parse(NetworkMessage message) { if (message is HelloGameMessage || message is ProtocolRequired) { return false; } if(message is AuthenticationTicketMessage) { AuthenticationTicketMessage ticket = (AuthenticationTicketMessage) message; if (Program.MITM.Tickets.ContainsKey(ticket.Ticket)) { Tuple<string, int> address = Program.MITM.Tickets[ticket.Ticket]; Server.Start(address.Item1, address.Item2); Program.MITM.Tickets.Remove(ticket.Ticket); } else { Stop(); } } return true; }
protected virtual void OnMessageReceived(NetworkMessage message) { MessageReceivedEventHandler handler = MessageReceived; if (handler != null) handler(this, message); }
/// <summary> /// Sends a message to the server /// </summary> public void Send(NetworkMessage message) { lock (locker) { if(!Connected) throw new Exception("Cannot send a message if the client isn't connected."); using (BigEndianWriter writer = new BigEndianWriter()) { message.Pack(writer); Writer.WriteBytes(writer.Data); } } }
protected abstract bool Parse(NetworkMessage message);
public void Invoke(NetworkMessage message) { Method.Invoke(Instance, new object[] { message }); }
private void Dispatch(object sender, NetworkMessage message) { foreach (var method in methods) { foreach (var attribute in method.Attributes) { if (attribute.MessageId == message.MessageId || attribute.MessageType == message.GetType()) { method.Invoke(message); } } } }