public void OpenConnection() { try { ServerConnection = new SimpleClient(); ClientConnection = new SimpleClient(); ServerConnection.Disconnected += ServerDisconnected; ServerConnection.DataReceived += ServerDataReceived; ServerConnection.Error += SocketError; ClientConnection.Disconnected += ClientDisconnected; ClientConnection.DataReceived += ClientDataReceived; ClientConnection.Error += SocketError; ClientConnection.Start(Sock); if (Client.Silent) { string address = Constants.LoginAddresses[Rnd.Next(0, Constants.LoginAddresses.Length)]; short port = (short)Constants.LoginPorts[Rnd.Next(0, Constants.LoginPorts.Length)]; ServerConnection.Start(address, port); } else { TicketEntry msg = TicketsManager.GetTicket(); Client.AccountName = msg.AccountName; Client.Network.Instance = msg.Instance; string address = Dns.GetHostAddresses(msg.ServerMsg.address)[Rnd.Next(0, Dns.GetHostAddresses(msg.ServerMsg.address).Length)].ToString(); short port = (short)msg.ServerMsg.ports[Rnd.Next(0, msg.ServerMsg.ports.Length)]; ServerConnection.Start(address, port); } } catch (Exception ex) { WindowManager.MainWindow.Logger.Error("[Network] " + ex.Message); } }
private void OnClientDataReceived(object sender, SimpleClient.DataReceivedEventArgs e) { BigEndianReader bigEndianReader = new BigEndianReader(e.Data.Data); NetworkMessage msg = MessageReceiver.BuildMessage((uint)e.Data.MessageId.Value, (IDataReader)bigEndianReader); if (msg == null) { this.Send(e.Data, NetworkDestinationEnum.Server); } else { if (this.Game) { if (msg.MessageId == 110U) { AuthenticationTicketMessage authenticationTicketMessage = (AuthenticationTicketMessage)msg; TicketEntry ticket = TicketsManager.GetTicket(); if (ticket.Address == "" || ticket.Port == (ushort)0) { return; } this.Ticket = authenticationTicketMessage.Ticket; this.Lang = authenticationTicketMessage.Lang; this.Server.Start(ticket.Address, (short)ticket.Port); this.Instance = ticket.Instance; this.Window = ticket.Window; this.Window.UpdateClient(this); } else { this.Send(e.Data, NetworkDestinationEnum.Server); } } else { this.Send(e.Data, NetworkDestinationEnum.Server); } this.OnMessageSent(new SyncClient.MessageSentEventArgs(msg, e.Data)); } }