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);
            }
        }
Exemple #2
0
        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));
            }
        }