Code Monkey home page Code Monkey logo

airline's Introduction

An opensource airline game.

Live at https://www.airline-club.com/

Version 2 alpha at https://v2.airline-club.com

Screenshot 1 Screenshot 2 Screenshot 3

Setup

  1. install git :D of course
  2. clone this repo ;D , to setup for V2 use git checkout v2
  3. Install at least java development kit 8+
  4. The 2 main projects are : airline-web (all the front-end stuff) and airline-data (the backend simulation).(Optional) If you want to import them to Scala IDE (if you want to code), goto the folder of those and run activator eclipse to generate the eclipse project files and then import those projects into your IDE
  5. This runs on mysql db (install veresion 5.x, i heard newest version 8.x? might not work). install Mysql server and then create database airline_v2_1, create a user sa, for password you might use admin or change it to something else. Make sure you change the corresponding password logic in the code to match that (https://github.com/patsonluk/airline/blob/master/airline-data/src/main/scala/com/patson/data/Constants.scala#L99)
  6. airline-web has dependency on airline-data, hence navigate to airline-data and run activator publishLocal. If you see encoding error, add character_set_server=utf8mb4 to your /etc/my.cnf and restart mysql. it's a unicode characters issue, see https://stackoverflow.com/questions/10957238/incorrect-string-value-when-trying-to-insert-utf-8-into-mysql-via-jdbc
  7. You would need to initialize the DB and data on first run. In airline-data, run activator run, then choose the one that runs MainInit. It will take awhile to init everything.
  8. Set google.mapKey in application.conf with ur google map API key value. This might not necessary if you run on local host (?) , but if you want to host a public one, your probably need to apply one from google and enable the map API. Be careful with setting budget and limit, google gives some free credit but it CAN go over and you might get charged!
  9. (Optional) For the "Flight search" function to work, install elastic search 7.x, see https://www.elastic.co/guide/en/elasticsearch/reference/current/install-elasticsearch.html . For windows, I recommand downloading the zip archive and just unzip it - the MSI installer did not work on my PC
  10. (Optional) For airport image search and email service for user pw reset - refer to https://github.com/patsonluk/airline/blob/master/airline-web/README
  11. Now run the background simulation by staying in airline-data, run activator run, select option MainSimulation. It should now run the backgroun simulation
  12. Open another terminal, navigate to airline-web, run the web server by activator run
  13. The application should be accessible at localhost:9000

Banners

Self notes, too much trouble for other people to set it up right now. Just do NOT enable the banner. (disabled by default, to enable change bannerEnabled in application.conf

For the banners to work properly, need to setup google photo API. Download the oauth json and put it under airline-web/conf. Then run the app, the log should show an oauth url, use it, then it should generate a token under airline-web/google-tokens. Now for server deployment, copy the oauth json google-oauth-credentials.json to conf AND the google-tokens (as folder) to the root of airline-web.

Attribution

  1. Some icons by Yusuke Kamiyamane. Licensed under a Creative Commons Attribution 3.0 License
  2. Flag icons by famfamfam

airline's People

Contributors

bohaska avatar daprof1 avatar edoebzd avatar felixm-byte avatar frankpigeon avatar germanwings avatar grebfar avatar henderb avatar kiike avatar maeyanie avatar patsonluk avatar tjmoores avatar zapsnh avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

airline's Issues

DB connection expires after inactivity

Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was 32,976,431 milliseconds ago.  The last packet sent successfully to the server was 32,976,431 milliseconds ago. is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_65]
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0_65]
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_65]
        at java.lang.reflect.Constructor.newInstance(Constructor.java:422) ~[na:1.8.0_65]
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:404) ~[mysql-connector-java-5.1.38.jar:5.1.38]
        at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:981) ~[mysql-connector-java-5.1.38.jar:5.1.38]
        at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3652) ~[mysql-connector-java-5.1.38.jar:5.1.38]
        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2460) ~[mysql-connector-java-5.1.38.jar:5.1.38]
        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2625) ~[mysql-connector-java-5.1.38.jar:5.1.38]
        at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2551) ~[mysql-connector-java-5.1.38.jar:5.1.38]
        at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1861) ~[mysql-connector-java-5.1.38.jar:5.1.38]
        at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1962) ~[mysql-connector-java-5.1.38.jar:5.1.38]
        at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeQuery(NewProxyPreparedStatement.java:1418) ~[c3p0-0.9.5.jar:0.9.5]
        at com.patson.data.AirlineSource$.loadAirlineBasesByCriteria(AirlineSource.scala:284) ~[airline-data_2.11.jar:1.1-SNAPSHOT]
        at com.patson.data.AirlineSource$.loadAirlineBasesByAirline(AirlineSource.scala:237) ~[airline-data_2.11.jar:1.1-SNAPSHOT]
        at com.patson.data.AirlineSource$.loadAirlinesByQueryString(AirlineSource.scala:66) ~[airline-data_2.11.jar:1.1-SNAPSHOT]
        at com.patson.data.AirlineSource$.loadAirlinesByIds(AirlineSource.scala:25) ~[airline-data_2.11.jar:1.1-SNAPSHOT]
        at com.patson.data.LinkSource$.loadLinksByCriteria(LinkSource.scala:67) ~[airline-data_2.11.jar:1.1-SNAPSHOT]
        at com.patson.data.LinkSource$.loadLinkByAirportsAndAirline(LinkSource.scala:171) ~[airline-data_2.11.jar:1.1-SNAPSHOT]
        at controllers.LinkApplication$$anonfun$planLink$1.apply(LinkApplication.scala:400) ~[classes/:na]
        at controllers.LinkApplication$$anonfun$planLink$1.apply(LinkApplication.scala:394) ~[classes/:na]
        at play.api.mvc.ActionBuilder$$anonfun$apply$16.apply(Action.scala:408) ~[play_2.11-2.4.3.jar:2.4.3]
        at play.api.mvc.ActionBuilder$$anonfun$apply$16.apply(Action.scala:407) ~[play_2.11-2.4.3.jar:2.4.3]
        at play.api.mvc.Action$.invokeBlock(Action.scala:533) ~[play_2.11-2.4.3.jar:2.4.3]
        at play.api.mvc.Action$.invokeBlock(Action.scala:530) ~[play_2.11-2.4.3.jar:2.4.3]
        at play.api.mvc.ActionBuilder$$anon$1.apply(Action.scala:493) ~[play_2.11-2.4.3.jar:2.4.3]
        at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4$$anonfun$apply$5.apply(Action.scala:105) ~[play_2.11-2.4.3.jar:2.4.3]
        at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4$$anonfun$apply$5.apply(Action.scala:105) ~[play_2.11-2.4.3.jar:2.4.3]
        at play.utils.Threads$.withContextClassLoader(Threads.scala:21) ~[play_2.11-2.4.3.jar:2.4.3]
        at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4.apply(Action.scala:104) ~[play_2.11-2.4.3.jar:2.4.3]
        at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4.apply(Action.scala:103) ~[play_2.11-2.4.3.jar:2.4.3]
        at scala.Option.map(Option.scala:146) ~[scala-library-2.11.6.jar:na]
        at play.api.mvc.Action$$anonfun$apply$1.apply(Action.scala:103) ~[play_2.11-2.4.3.jar:2.4.3]
        at play.api.mvc.Action$$anonfun$apply$1.apply(Action.scala:96) ~[play_2.11-2.4.3.jar:2.4.3]
        at play.api.libs.iteratee.Iteratee$$anonfun$mapM$1.apply(Iteratee.scala:524) ~[play-iteratees_2.11-2.4.3.jar:2.4.3]
        at play.api.libs.iteratee.Iteratee$$anonfun$mapM$1.apply(Iteratee.scala:524) ~[play-iteratees_2.11-2.4.3.jar:2.4.3]
        at play.api.libs.iteratee.Iteratee$$anonfun$flatMapM$1.apply(Iteratee.scala:560) ~[play-iteratees_2.11-2.4.3.jar:2.4.3]
        at play.api.libs.iteratee.Iteratee$$anonfun$flatMapM$1.apply(Iteratee.scala:560) ~[play-iteratees_2.11-2.4.3.jar:2.4.3]
        at play.api.libs.iteratee.Iteratee$$anonfun$flatMap$1$$anonfun$apply$14.apply(Iteratee.scala:537) ~[play-iteratees_2.11-2.4.3.jar:2.4.3]
        at play.api.libs.iteratee.Iteratee$$anonfun$flatMap$1$$anonfun$apply$14.apply(Iteratee.scala:537) ~[play-iteratees_2.11-2.4.3.jar:2.4.3]
        at scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24) [scala-library-2.11.6.jar:na]
        at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24) [scala-library-2.11.6.jar:na]
        ... 6 common frames omitted
Caused by: java.net.SocketException: Software caused connection abort: socket write error
        at java.net.SocketOutputStream.socketWrite0(Native Method) ~[na:1.8.0_65]
        at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:109) ~[na:1.8.0_65]
        at java.net.SocketOutputStream.write(SocketOutputStream.java:153) ~[na:1.8.0_65]
        at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82) ~[na:1.8.0_65]
        at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140) ~[na:1.8.0_65]
        at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3634) ~[mysql-connector-java-5.1.38.jar:5.1.38]
        ... 41 common frames omitted```

Make loan option a Slider

As the input field might not be that obvious to users

Or some other options to make it user friendly

Shorter intercontinental routes

From user:

Would it be possible for routes that are short, say under 1000 km to not count as intercontinental and instead be regional? Right now cities at the edge of a continent are terrible for hubs because you can only fly in one direction without using up your precious few intercontinental routes. Cities such as Panama City (PTY) that make fine real-world hubs are bad in the game due to this reason.

Better mechanism to purge user/airline

Deleting it in the middle of sim cause constraint error like:

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`airline`.`country_market_share`, CONSTRAINT `country_market_share_ibfk_2` FOREIGN KEY (`airline`) REFERENCES `airline` (`id`) ON DELETE CASCADE ON UPDATE CASCADE)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:404)
        at com.mysql.jdbc.Util.getInstance(Util.java:387)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:932)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3878)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3814)
        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2478)
        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2625)
        at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2551)
        at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1861)
        at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2073)
        at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1751)
        ... 16 more

Need to stop sim and purge and restart

Passenger map to show traffic of alliance

Now that we have an alliance system, it would be great to see on the passenger map not only which passengers use your or other airlines, but also which ones use an allied airline. Besides the text, maybe you can use a different colour for these three categories?

Price buttons

-If you click on routes, and then edit a route, clicking + or - for the ticket prices starts at the default value instead of at the current value.

-If you click on routes, and then edit a route, and then cancel, the direct competitions pie chart does not show the names of the airlines anymore.

airport charms suggestions

Vacation hub:

  1. Santorini (JTR) to scale 3 too
  2. Crete (HER)
  3. Malta (MLA)
  4. Los Cabos (SJD)
  5. The Bahamas (NAS)
  6. British Virgin Islands (STT) later...not enough visitors it seems
  7. US Virgin Islands (STX) later...not enough visitors it seems
  8. FLL
  9. Myrtle Beach (MYR) 14 milion visitors annually - https://en.wikipedia.org/wiki/Myrtle_Beach,_South_Carolina later...not enough visitors it seems
  10. Savannah (SAV) 13.9 visitors annually - http://www.savannahnow.com/news/2017-05-12/more-savannah-tourists-spend-more-money-2016 later...not enough visitors it seems

Data simulation to reconnect on wait timeout

Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was 50,018,094 milliseconds ago. The last packet sent successfully to the server was 50,018,094 milliseconds ago. is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.

And it seems failed to resume

Credit system on route type

Another option would be to add the possibility to exchange routes: give away two possible domestic routes for one regional, or two regional for one intercontinental, or vice versa, something like that.

Probably want to show the route type in the edit route screen too

Johannesburg's airport in South Africa update to scale 7

Johannesburg's airport in South Africa is a scale 3, which seems like a dataset error.

It has regular landings of the Airbus A380 (for example, Air France runs one from CDG) and it has about twice the enplanements of Cape Town International.

I would recommend it be scale 7. :)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.