Beispiel #1
0
 public void NewClientAppear(Message message, Socket ConectedSocket)
 {
     if (message is ClientIDMessage)
     {
         ClientIDMessage RegMessage = (ClientIDMessage)message;
         DownloadClient  client;
         client = new DownloadClient(RegMessage.Id, ConectedSocket, serializer);
         client.messageManager += UploadMessageManager;
         clients.Add(client);
     }
 }
Beispiel #2
0
        private void IDManager(Message message)
        {
            Action action = delegate
            {
                ClientIDMessage mes = (ClientIDMessage)message;
                ClientID.Visible = true;
                label3.Visible   = true;
                ClientID.Enabled = false;
                ClientID.Text    = mes.Id.ToString();
            };

            if (InvokeRequired)
            {
                Invoke(action);
            }
            else
            {
                action();
            }
        }
Beispiel #3
0
 public void ClientIDMessageManager(ClientIDMessage message)
 {
     ClientID = message.id;
 }
Beispiel #4
0
        public void EstablishConnection(uint userId, byte[] sessionKey, IPAddress address, int port)
        {
            ConnectedAddress = address;
            ConnectedPort    = port;
            Session          = new Session();
            _Socket          = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            _SocketReader    = new SocketReader(Session, _Socket);
            _SocketWriter    = new SocketWriter(Session, _Socket);
            Session.Command  = SessionCommand.Connect;

            _logger.Debug("Connecting to zone server at {0}:{1}", address, port);

            _Socket.Connect(address, port);
            _SocketReader.Start().WaitOne(ConnectTimeout);
            _SocketWriter.Start().WaitOne(ConnectTimeout);

            var timeout = DateTime.Now.Add(ConnectTimeout);

            while (Session.Status != SessionStatus.Connected && Session.Status != SessionStatus.Error)
            {
                if (timeout <= DateTime.Now)
                {
                    _logger.Error("Timeout waiting for connecting to establish");
                    throw new TimeoutException("Timeout waiting for server conenction");
                }

                Thread.Sleep(TimeSpan.FromMilliseconds(ConnectTimeout.TotalMilliseconds / 10));
            }

            if (!Start().WaitOne(ConnectTimeout))
            {
                _logger.Error("ObjectGraph service failed to start in time");
                throw new TimeoutException("Timeout waiting for server conenction");
            }


            var clientIDMsg = new ClientIDMessage(userId, sessionKey);

            clientIDMsg.AddFieldsToData();

            Session.SendChannelA(clientIDMsg);


            var messages =
                Messages.WaitForMessages(Convert.ToInt32(ConnectTimeout.TotalMilliseconds),
                                         MessageOp.ErrorMessage, MessageOp.ClientPermissionsMessage);

            if (messages == null)
            {
                _logger.Error("Timeout waiting for ClientPermissionsMessage");
                throw new TimeoutException("Timeout waiting for server connection");
            }

            var errorMsg =
                Message.Create <ErrorMessage>(
                    messages.FirstOrDefault(cur => cur.MessageOpCodeEnum == MessageOp.ErrorMessage));

            if (errorMsg != null)
            {
                _logger.Error("Error getting client permission: [{0}] {1}", errorMsg.ErrorType, errorMsg.Message);
                throw new Exception(string.Format("[{0}] {1}", errorMsg.ErrorType, errorMsg.Message));
            }

            var permissionMessage =
                Message.Create <ClientPermissionsMessage>(
                    messages.FirstOrDefault(cur => cur.MessageOpCodeEnum == MessageOp.ClientPermissionsMessage));

            if (permissionMessage == null)
            {
                _logger.Error("Unknow packet when expecting ClientPermissionsMessage");
                throw new Exception("Unknown error connecting to server");
            }

            SelectedGalaxyOpen         = permissionMessage.GalaxyOpenFlag == 1;
            CanCreateCharacterOnGalaxy = permissionMessage.CharacterSlotOpenFlag == 1;
        }