Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
150 commits
Select commit Hold shift + click to select a range
5803e43
Merge pull request #2 from hewiefreeman/add-code-of-conduct-1
hewiefreeman Dec 25, 2018
ba7aa75
Create CONTRIBUTING.md
hewiefreeman Dec 25, 2018
32bd117
Update README.md
hewiefreeman Dec 25, 2018
dde347c
Update CONTRIBUTING.md
hewiefreeman Dec 25, 2018
7441159
Update CONTRIBUTING.md
hewiefreeman Dec 25, 2018
c659dee
gofmt formatting, and golinting
hewiefreeman Dec 25, 2018
61cb5f4
Update README.md
hewiefreeman Dec 25, 2018
f3ca636
gofmt formatting
hewiefreeman Dec 25, 2018
f986bc6
gofmt formatting, and golinting
hewiefreeman Dec 25, 2018
f4c0f30
gofmt formatting
hewiefreeman Dec 25, 2018
da53f75
Update README.md
hewiefreeman Dec 25, 2018
72b3981
Update README.md
hewiefreeman Dec 25, 2018
a683cc6
Update README.md
hewiefreeman Dec 25, 2018
eabb40d
Changed server stop callback setter to SetShutDownCallback, and gener…
hewiefreeman Dec 25, 2018
23e243a
Merge branch 'master' of https://github.com/hewiefreeman/GopherGameSe…
hewiefreeman Dec 25, 2018
7f5c959
Update README.md
hewiefreeman Dec 25, 2018
b62c5ff
Update README.md
hewiefreeman Dec 25, 2018
ac2ec3c
Update README.md
hewiefreeman Dec 25, 2018
b9d9cbd
Update README.md
hewiefreeman Dec 25, 2018
f4e6c05
Update README.md
hewiefreeman Dec 26, 2018
a2a9b8b
Update README.md
hewiefreeman Dec 26, 2018
6f8d02f
Update README.md
hewiefreeman Dec 26, 2018
b262766
Update README.md
hewiefreeman Dec 27, 2018
bc9ff7d
Added roomdelete macro command, clean-up, and small changes to match …
hewiefreeman Dec 28, 2018
2b646b6
Merge branch 'master' of https://github.com/hewiefreeman/GopherGameSe…
hewiefreeman Dec 28, 2018
1814bbb
Update README.md
hewiefreeman Dec 28, 2018
b659dfd
Update README.md
hewiefreeman Dec 28, 2018
84eba98
Update README.md
hewiefreeman Dec 28, 2018
d62a3ce
Update README.md
hewiefreeman Dec 28, 2018
e24ef94
Update README.md
hewiefreeman Dec 28, 2018
d2f0d14
Update README.md
hewiefreeman Dec 28, 2018
18f7ac0
Update README.md
hewiefreeman Dec 31, 2018
36ab961
Delete saveState_test.go
hewiefreeman Dec 31, 2018
7c38da2
Added a connID optional parameter to *User.DataMessage() and clean-up
hewiefreeman Dec 31, 2018
5a72ffd
Merge branch 'master' of https://github.com/hewiefreeman/GopherGameSe…
hewiefreeman Dec 31, 2018
1383a40
Fixed multiple resposes bug for affected client actions, and more doc…
hewiefreeman Jan 9, 2019
1e33a2b
Update README.md
hewiefreeman Jan 9, 2019
5f29aa1
Documentation and editing functionalities to match wiki and intended …
hewiefreeman Jan 12, 2019
0b78ed5
Merge branch 'master' of https://github.com/hewiefreeman/GopherGameSe…
hewiefreeman Jan 12, 2019
57583ef
Update README.md
hewiefreeman Jan 13, 2019
ceccf95
Update README.md
hewiefreeman Jan 13, 2019
0f6d4b6
Revised some mechanics to match intended usage documented in the Wiki…
hewiefreeman Jan 14, 2019
caf65b5
Merge branch 'master' of https://github.com/hewiefreeman/GopherGameSe…
hewiefreeman Jan 14, 2019
140dbb1
Update README.md
hewiefreeman Jan 14, 2019
c500ad2
Update LICENSE
hewiefreeman Jan 14, 2019
8d7b54e
Update README.md
hewiefreeman Jan 14, 2019
57ca24b
Implementing database sharding and shard management mechanisms.
hewiefreeman Jan 26, 2019
3bf5042
Merge branch 'master' of https://github.com/hewiefreeman/GopherGameSe…
hewiefreeman Jan 26, 2019
1d2d897
Implementing database sharding and shard management mechanisms.
hewiefreeman Jan 26, 2019
04956bd
Update README.md
hewiefreeman Jan 26, 2019
1e1c6ef
Update README.md
hewiefreeman Jan 26, 2019
8d209e4
Adding more useful macros
hewiefreeman Jan 26, 2019
bbd8635
Merge branch 'master' of https://github.com/hewiefreeman/GopherGameSe…
hewiefreeman Jan 26, 2019
ce90319
Implementing database sharding and shard management mechanisms.
hewiefreeman Jan 26, 2019
80f615d
Set theme jekyll-theme-hacker
hewiefreeman Jan 26, 2019
6b5d956
Clean-up, gofmt, golint
hewiefreeman Jan 26, 2019
623d162
Merge branch 'master' of https://github.com/hewiefreeman/GopherGameSe…
hewiefreeman Jan 26, 2019
f7a568a
Continuing implementation for database sharding mechanism
hewiefreeman Jan 26, 2019
64bdcd7
Making project site
hewiefreeman Jan 27, 2019
80e4ab1
Making project site
hewiefreeman Jan 27, 2019
9c6e183
Continuing sharding implementation and fixing macro commands for Ubuntu.
hewiefreeman Jan 29, 2019
54025e1
Continuing sharding implementation and fixing macro commands for Ubuntu.
hewiefreeman Jan 29, 2019
13c733d
Fixing macro compatability with linux/ubuntu
hewiefreeman Jan 29, 2019
aefbf73
Fixed macro compatibility with different operating systems and added …
hewiefreeman Jan 29, 2019
819c9f1
Update README.md
hewiefreeman Feb 1, 2019
c2b8701
Changing implementation for sharding mechanism, slice append() optimi…
hewiefreeman Feb 1, 2019
b67806b
Merge branch 'master' of https://github.com/hewiefreeman/GopherGameSe…
hewiefreeman Feb 1, 2019
40ebf8d
Reworking sharding system to use consistent hashing for database shar…
hewiefreeman Feb 5, 2019
fa226a9
Update README.md
hewiefreeman Feb 5, 2019
db897f0
Continuing implementations for database sharding and replication, and…
hewiefreeman Feb 6, 2019
27362df
Merge branch 'master' of https://github.com/hewiefreeman/GopherGameSe…
hewiefreeman Feb 6, 2019
b14c0c6
Error fixes to releive any go gets
hewiefreeman Feb 6, 2019
a5edd57
Refactored 'rooms' and 'users' packages into 'core' package for consi…
hewiefreeman Jul 24, 2019
00ec17d
Minor map allocation/performance improvements
hewiefreeman Jul 24, 2019
e0ab29e
Gofmt, lint, spellcheck, ineffassign
hewiefreeman Jul 24, 2019
172f8cc
Update README.md
hewiefreeman Jul 24, 2019
1509b3e
Update README.md
hewiefreeman Jul 25, 2019
53e48e9
Gofmt, error fixes
hewiefreeman Jul 25, 2019
215f325
Merge branch 'master' of https://github.com/hewiefreeman/GopherGameSe…
hewiefreeman Jul 25, 2019
ee2664a
Gofmt
hewiefreeman Jul 25, 2019
94d3e44
Update README.md
hewiefreeman Jul 25, 2019
f389c3c
Update README.md
hewiefreeman Jul 25, 2019
e3d18ed
Update README.md
hewiefreeman Jul 25, 2019
141dab3
Update README.md
hewiefreeman Jul 25, 2019
d08ed85
Clarified error definitions
hewiefreeman Jul 27, 2019
177b21d
Testing, bug fixes, and server response error clarifications
hewiefreeman Jul 27, 2019
797dbb6
Merge branch 'master' of https://github.com/hewiefreeman/GopherGameSe…
hewiefreeman Jul 27, 2019
d2ed615
Ineffassign fix
hewiefreeman Jul 28, 2019
a272cd2
Update README.md
hewiefreeman Jul 28, 2019
c49507c
Update README.md
hewiefreeman Jul 28, 2019
28e7673
Update README.md
hewiefreeman Jul 28, 2019
5cc5680
Update README.md
hewiefreeman Jul 28, 2019
3f33526
Update README.md
hewiefreeman Jul 29, 2019
a32ab0e
Update README.md
hewiefreeman Jul 29, 2019
d07b460
Update README.md
hewiefreeman Aug 1, 2019
56428cd
Create FUNDING.yml
hewiefreeman Aug 1, 2019
da66ab1
Update README.md
hewiefreeman Aug 1, 2019
45ec1d0
Update README.md
hewiefreeman Aug 1, 2019
4fad0fa
Update README.md
hewiefreeman Aug 1, 2019
87b0ffa
Update README.md
hewiefreeman Aug 2, 2019
61a4665
Update README.md
hewiefreeman Aug 2, 2019
0f77195
Update README.md
hewiefreeman Aug 2, 2019
d10096a
Update README.md
hewiefreeman Aug 2, 2019
531124a
Set theme jekyll-theme-slate
hewiefreeman Aug 2, 2019
8360d51
Set theme jekyll-theme-slate
hewiefreeman Aug 2, 2019
cff4ffe
Creating tests & project site
hewiefreeman Aug 2, 2019
08e6731
Merge branch 'master' of https://github.com/hewiefreeman/GopherGameSe…
hewiefreeman Aug 2, 2019
2059d80
Working on project site shell
hewiefreeman Aug 2, 2019
7cced41
Update README.md
hewiefreeman Aug 3, 2019
0ca3d65
Update README.md
hewiefreeman Aug 3, 2019
68ac11b
Add files via upload
hewiefreeman Aug 3, 2019
1ed82a7
Update README.md
hewiefreeman Aug 3, 2019
a898bdb
Removing unused image
hewiefreeman Aug 3, 2019
0f297ca
Update README.md
hewiefreeman Aug 3, 2019
8e03768
Update README.md
hewiefreeman Aug 3, 2019
d5cc77a
Working on project site shell
hewiefreeman Aug 3, 2019
1bec9f5
Merge branch 'master' of https://github.com/hewiefreeman/GopherGameSe…
hewiefreeman Aug 3, 2019
c9d4065
Adding site responsiveness
hewiefreeman Aug 4, 2019
bf8ae0b
Adding site responsiveness
hewiefreeman Aug 4, 2019
8715eab
Fixing site shell for mobile.
hewiefreeman Aug 4, 2019
805c55f
Added 'version' macro, changed start-up graphic, uploading site examp…
hewiefreeman Aug 4, 2019
3d626c1
Added button for wiki to top bar
hewiefreeman Aug 4, 2019
f628f95
Update README.md
hewiefreeman Aug 8, 2019
941c558
Simplified server restoring logic, clean-up, and testing
hewiefreeman Aug 26, 2019
a23d82e
Merge branch 'master' of https://github.com/hewiefreeman/GopherGameSe…
hewiefreeman Aug 26, 2019
3d2c272
Create CHANGE_LOG.md
hewiefreeman Aug 26, 2019
e0da9f8
Update README.md
hewiefreeman Aug 26, 2019
e12d808
Update README.md
hewiefreeman Aug 26, 2019
a26b8ba
Added messaging callbacks
hewiefreeman Sep 13, 2019
f4aab21
Go lint and fmt
hewiefreeman Sep 13, 2019
446d398
Refactoring and gocyclo/lint cleanup
hewiefreeman Sep 21, 2019
b6e4aaa
Error fixes and ineffassign
hewiefreeman Sep 21, 2019
eeae7de
Update README.md
hewiefreeman Sep 21, 2019
6983daf
Update README.md
hewiefreeman Sep 23, 2019
bafed1c
Update README.md
hewiefreeman Sep 23, 2019
025decf
Update README.md
hewiefreeman Sep 23, 2019
096cf29
Fixed private messaging bug
hewiefreeman Dec 5, 2019
9a6d8f7
Update LICENSE
hewiefreeman Dec 17, 2019
a53afe6
Update README.md
hewiefreeman Dec 17, 2019
d163896
Update README.md
hewiefreeman Dec 17, 2019
7c6fc04
Update README.md
hewiefreeman Dec 18, 2019
27a1a12
Implementing GopherDB
hewiefreeman Aug 13, 2020
ddd2c6f
Merge branch 'master' of https://github.com/hewiefreeman/GopherGameSe…
hewiefreeman Aug 13, 2020
d4495f2
Update README.md
hewiefreeman May 25, 2021
1da9c77
Create codeql-analysis.yml
hewiefreeman May 30, 2021
061a155
SQL database setup now adds custom colums and autologs column on init…
hewiefreeman Dec 14, 2021
115b55b
Update README.md
hewiefreeman Dec 14, 2021
c376645
updating info
hewiefreeman Dec 14, 2021
cd00eb4
Merge branch 'master' of https://github.com/hewiefreeman/GopherGameSe…
hewiefreeman Dec 14, 2021
88cc3fa
Update README.md
hewiefreeman Dec 16, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .github/FUNDING.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# These are supported funding model platforms

github: hewiefreeman
patreon: hewiefreeman
custom: paypal.me/hewiefreeman
71 changes: 71 additions & 0 deletions .github/workflows/codeql-analysis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL"

on:
push:
branches: [ master ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ master ]
schedule:
- cron: '17 4 * * 3'

jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
permissions:
actions: read
contents: read
security-events: write

strategy:
fail-fast: false
matrix:
language: [ 'go' ]
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
# Learn more:
# https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed

steps:
- name: Checkout repository
uses: actions/checkout@v2

# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v1
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# queries: ./path/to/local/query, your-org/your-repo/queries@main

# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v1

# ℹ️ Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl

# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
# and modify them (or add more) to build your code if your project
# uses a compiled language

#- run: |
# make bootstrap
# make release

- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v1
22 changes: 22 additions & 0 deletions CHANGE_LOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# Change Log
This is where all important changes and bug fixes will be described in detail. Each entry is labeled with a patch version number, and that is the version in which the changes and/or fixes were made. All prior versions will lack the described changes and/or fixes described.

> If you are experiencing any bugs or errors because of an update, please report them by [opening an issue](https://github.com/hewiefreeman/GopherGameServer/issues/new/choose)!

### Key
:wrench: : Bug fix

:warning: : Code-breaking change

:newspaper: : New feature

:monorail: : Optimization
<br><br>
## v1.0-BETA.2
- :newspaper: Added a `version` macro to display current running server version
- :monorail: :warning: ([commit](https://github.com/hewiefreeman/GopherGameServer/commit/941c558bfe44f237f150918187785cceb8aafecd)) Restoring logic has been simplified, but any previous version restore files will fail to restore!

## v1.0-ALPHA.5
- :monorail: :warning: ([commit](https://github.com/hewiefreeman/GopherGameServer/commit/a5edd57bcc61fc6f5d10b194f4a433e7a5ed51da)) Merged the `rooms` and `users` packages into one `core` package. **Requires refactoring your server code)**

> Version **1.0-ALPHA.5** merged the packages `users` and `rooms` into a single package `core`. If you've updated your server from **1.0-ALPHA.4** or below, you will need to edit your code and replace any instance of `rooms` or `users` with `core`. This also changes how [Rooms](https://github.com/hewiefreeman/GopherGameServer/wiki/Rooms#blue_book-creating--deleting-rooms) are **created** and **retrieved** ([core.GetRoom](https://godoc.org/github.com/hewiefreeman/GopherGameServer/core#GetRoom)), and how [Users](https://godoc.org/github.com/hewiefreeman/GopherGameServer/core#GetUser) are **retrieved**.
2 changes: 1 addition & 1 deletion CODE_OF_CONDUCT.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ further defined and clarified by project maintainers.
## Enforcement

Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at dominiquedebergue@gmail.com. All
reported by contacting the project team at tbd@gmail.com . All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Expand Down
14 changes: 14 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
## Ways to contribute

1) See if there is an Issue that you can take up to fix or implement
2) Help expand and clarify documentation and/or usage section
3) Have a good idea? Open and submit a detailed Issue

## Guidlines

1) First, check to see if a similar issue has already been opened
2) Follow the [Code of Conduct](https://github.com/hewiefreeman/GopherGameServer/blob/master/CODE_OF_CONDUCT.md)
3) BE DETAILED in your Pull Requests
4) Do not introduce any further 3rd-party package dependencies unless provided a valid reason
5) Do not submit content that does not pass golint, or has not been formatted with `gofmt`
6) Do not submit content that has little to no documentation on exported functions, variables, etc
25 changes: 0 additions & 25 deletions LICENSE
Original file line number Diff line number Diff line change
Expand Up @@ -174,28 +174,3 @@
of your accepting any such warranty or additional liability.

END OF TERMS AND CONDITIONS

APPENDIX: How to apply the Apache License to your work.

To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.

Copyright [2018] [Dominique Claude Debergue]

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
113 changes: 84 additions & 29 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,37 +1,45 @@
# <img src="https://raw.githubusercontent.com/hewiefreeman/GopherGameServer/master/Server%20Gopher.png" width="140" height="140">Gopher Game Server
<p align="center"><img src="https://raw.githubusercontent.com/hewiefreeman/GopherGameServer/master/docs/images/Gopher%20Title.png" width="50%" height="50%"></p>
<p align="center"><a href="https://opensource.org/licenses/Apache-2.0"><img src="https://img.shields.io/badge/License-Apache%202.0-blue.svg"></a> <a href="https://godoc.org/github.com/hewiefreeman/GopherGameServer"><img src="https://godoc.org/github.com/hewiefreeman/GopherGameServer?status.svg"></a> <img src="https://img.shields.io/badge/version-v1.0--beta.2-blue.svg"> <a href="https://goreportcard.com/report/github.com/hewiefreeman/GopherGameServer"><img src="https://goreportcard.com/badge/github.com/hewiefreeman/GopherGameServer?f=v101"></a></p>

[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) [![GoDoc](https://godoc.org/github.com/hewiefreeman/GopherGameServer?status.svg)](https://godoc.org/github.com/hewiefreeman/GopherGameServer) <img src="https://img.shields.io/badge/version-v1.0--beta.1-blue.svg"> [![Go Report Card](https://goreportcard.com/badge/github.com/hewiefreeman/GopherGameServer)](https://goreportcard.com/report/github.com/hewiefreeman/GopherGameServer)
<hr>

Gopher Game Server is a full featured, super fast, and fully customizable game server written in Go. Comes with a client API for JavaScript (and eventually Java, C++, and C).
Gopher Game Server provides a flexible and diverse set of tools that greatly ease developments of any type of online multiplayer game, or real-time application. GGS does all the heavy lifting for you, ensuring you never need to worry about synchronizing or data type conversions.

-**PROJECT IN DEVELOPMENT**-
Moreover, Gopher has a built-in, fully customizable SQL client authentication mechanism that creates and manages users' accounts for you. It even ties in a friending tool, so users can befriend and invite one another to groups, check each other's status, and more. All components are easily configurable and customizable for any specific project's needs.

Gopher Game Server is designed to provide all necessary tools to ease developments of any type of online game (or any real-time app/chat). Gopher will handle all server-side synchronizing and data type conversions, therefore, client actions receiving, variable setting, message sending, and other functionalities are unproblematic.
### :star: Main features

Gopher uses WebSockets and JSON to pass messages between the clients and the server. The JSON enabled server is designed to pass any types of data between client and server without cares of type conversions on either end. WebSockets increases efficiency of the server as far as possible on the network, since the WebSocket protocol is newer and doesn't send as much header and meta data that standard HTTP and most other protocols require.
- Super easy APIs for server, database, and client coding
- Chat, private messaging, and voice chat
- Customizable client authentication (\***1**)
- Built-in friending mechanism (\***1**)
- Supports multiple connections on the same User
- Server saves state on shut-down and restores on reboot (\***2**)

Moreover, Gopher has a built-in, fully customizable MySQL client authentication mechanism that manages users' accounts for you. It even ties in a friending tool, so users can befriend and invite one another to groups, check each other's status, and more. All components are easily configurable and customizable for specific project's needs.
> (\***1**) A MySQL (or similar SQL) database is required for the authentication/friending feature, but is an optional (like most) feature that can be enabled or disabled to use your own implementations.

### Main features:
> (\***2**) When updating and restarting your server, you might need to be able to recover any rooms that were in the middle of a game. This enables you to do so with minimal effort.

- Super easy and flexible APIs for server, database, and client coding
- Chat, private messaging, and voice chat
- Customizable client authentication (**\***)
- Built-in Friending (**\***)
- Supports multiple connections on the same User
- Server saves state on shut-down and restores on reboot
- Tools provided for administrating server while running
### Upcoming features

(**\***) A MySQL (or similar SQL) database is required for the authentication/friending feature, but is an optional (like most) feature that can be enabled or disabled to use your own implementations.
- Distributed load balancer and server coordinator
- Distributed server broadcasts
- GUI for administrating and monitoring servers
- Integration with [GopherDB](https://github.com/hewiefreeman/GopherDB) when stable (\***1**)

# Client APIs
> (\***1**) MySQL isn't very scalable on it's own, and the SQL implementation for storing friend info is probably not the most efficient. Hence, it is recommended to put the friends table into a separate database cluster. GopherDB, on the other hand, is a very promising database project that will greatly increase server efficiency, and could possibly even outperform MySQL overall. It has a built-in authentication table type, which takes a substantial load off the game servers, and further secures your users' private information. It also supports nested values which are deep-validated through table schemas, so you can store complex information using a wide variety of data types and rules. You can follow the project and get more info with the link above!

- JavaScript: [Gopher Client JS](https://github.com/hewiefreeman/GopherClientJS)
### Change Log
[CHANGE_LOG.md](https://github.com/hewiefreeman/GopherGameServer/blob/master/CHANGE_LOG.md)
<br><br><br>
# :video_game: Client APIs

The Java, C++, and C (possibly more with some help) client APIs will be made after completing version 1.0 and the JavaScript client API.
- JavaScript: [GopherClientJS](https://github.com/hewiefreeman/GopherClientJS)

> If you want to make a client API in an unsupported language and want to know where to start and/or have any questions, feel free to open a new issue!

# Installing
Gopher Game Server requires at least **Go v1.8+**, and **MySQL v5.7+** for the authentication and friending features.
# :file_folder: Installing
Gopher Game Server requires at least **Go v1.8+** (and **MySQL v5.7+** for the authentication and friending features).

First, install the dependencies:

Expand All @@ -43,22 +51,69 @@ Then install the server:

go get github.com/hewiefreeman/GopherGameServer

# Documentation
# :books: Usage

[:bookmark: Wiki Home](https://github.com/hewiefreeman/GopherGameServer/wiki)

### Table of Contents

1) [**Getting Started**](https://github.com/hewiefreeman/GopherGameServer/wiki/Getting-Started)
- [Set-Up](https://github.com/hewiefreeman/GopherGameServer/wiki/Getting-Started#blue_book-set-up)
- [Core Server Settings](https://github.com/hewiefreeman/GopherGameServer/wiki/Getting-Started#blue_book-core-server-settings)
- [Server Callbacks](https://github.com/hewiefreeman/GopherGameServer/wiki/Getting-Started#blue_book-server-callbacks)
- [Macro Commands](https://github.com/hewiefreeman/GopherGameServer/wiki/Getting-Started#blue_book-macro-commands)
2) [**Rooms**](https://github.com/hewiefreeman/GopherGameServer/wiki/Rooms)
- [Room Types](https://github.com/hewiefreeman/GopherGameServer/wiki/Rooms#blue_book-room-types)
- [Room Broadcasts](https://github.com/hewiefreeman/GopherGameServer/wiki/Rooms#blue_book-room-broadcasts)
- [Room Callbacks](https://github.com/hewiefreeman/GopherGameServer/wiki/Rooms#blue_book-room-callbacks)
- [Creating & Deleting Rooms](https://github.com/hewiefreeman/GopherGameServer/wiki/Rooms#blue_book-creating--deleting-rooms)
- [Room Variables](https://github.com/hewiefreeman/GopherGameServer/wiki/Rooms#blue_book-room-variables)
- [Messaging](https://github.com/hewiefreeman/GopherGameServer/wiki/Rooms#blue_book-messaging)
3) [**Users**](https://github.com/hewiefreeman/GopherGameServer/wiki/Users)
- [Login & Logout](https://github.com/hewiefreeman/GopherGameServer/wiki/Users#blue_book-login-and-logout)
- [Joining & Leaving Rooms](https://github.com/hewiefreeman/GopherGameServer/wiki/Users#blue_book-joining--leaving-rooms)
- [User Variables](https://github.com/hewiefreeman/GopherGameServer/wiki/Users#blue_book-user-variables)
- [Initiating and Revoking Room Invites](https://github.com/hewiefreeman/GopherGameServer/wiki/Users#blue_book-initiating-and-revoking-room-invites)
- [User Status](https://github.com/hewiefreeman/GopherGameServer/wiki/Users#blue_book-user-status)
- [Messaging](https://github.com/hewiefreeman/GopherGameServer/wiki/Users#blue_book-messaging)
4) [**Custom Client Actions**](https://github.com/hewiefreeman/GopherGameServer/wiki/Custom-Client-Actions)
- [Creating a Custom Client Action](https://github.com/hewiefreeman/GopherGameServer/wiki/Custom-Client-Actions#blue_book-creating-a-custom-client-action)
- [Responding to a Custom Client Action](https://github.com/hewiefreeman/GopherGameServer/wiki/Custom-Client-Actions#blue_book-responding-to-a-custom-client-action)
6) [**Saving & Restoring**](https://github.com/hewiefreeman/GopherGameServer/wiki/Saving-&-Restoring)
- [Set-Up](https://github.com/hewiefreeman/GopherGameServer/wiki/Saving-&-Restoring#blue_book-set-up)
5) [**SQL Features**](https://github.com/hewiefreeman/GopherGameServer/wiki/SQL-Features)
- [Set-Up](https://github.com/hewiefreeman/GopherGameServer/wiki/SQL-Features#blue_book-set-up)
- [Authenticating Clients](https://github.com/hewiefreeman/GopherGameServer/wiki/SQL-Features#blue_book-authenticating-clients)
- [Custom Account Info](https://github.com/hewiefreeman/GopherGameServer/wiki/SQL-Features#blue_book-custom-account-info)
- [Customizing Authentication Features](https://github.com/hewiefreeman/GopherGameServer/wiki/SQL-Features#blue_book-customizing-authentication-features)
- [Auto-Login (Remember Me)](https://github.com/hewiefreeman/GopherGameServer/wiki/SQL-Features#blue_book-auto-login-remember-me)
- [Friending](https://github.com/hewiefreeman/GopherGameServer/wiki/SQL-Features#blue_book-friending)

# :scroll: Documentation

[Package gopher](https://godoc.org/github.com/hewiefreeman/GopherGameServer) - Main server package for startup and settings

[Package rooms](https://godoc.org/github.com/hewiefreeman/GopherGameServer/rooms) - Package for using the Room, RoomType, and RoomUser types

[Package users](https://godoc.org/github.com/hewiefreeman/GopherGameServer/users) - Package for using the User type
[Package core](https://godoc.org/github.com/hewiefreeman/GopherGameServer/core) - Package for all User and Room functionality

[Package actions](https://godoc.org/github.com/hewiefreeman/GopherGameServer/actions) - Package for making custom client actions

[Package database](https://godoc.org/github.com/hewiefreeman/GopherGameServer/database) - Package for customizing your database

# Usage
# :milky_way: Contributions
Contributions are open and welcomed! Help is needed for everything from documentation, cleaning up code, performance enhancements, client APIs and more. Don't forget to show your support with a :star:!

If you want to make a client API in an unsupported language and want to know where to start and/or have any questions, feel free to open a new issue!

Please read the following articles before submitting any contributions or filing an Issue:

- [Contribution Guidlines](https://github.com/hewiefreeman/GopherGameServer/blob/master/CONTRIBUTING.md)
- [Code of Conduct](https://github.com/hewiefreeman/GopherGameServer/blob/master/CODE_OF_CONDUCT.md)

<hr>

(Coming soon...)
<h6>GopherGameServer and all of it's contents Copyright 2022 Dominique Debergue
<h6>Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at:

# Contributions
`http://www.apache.org/licenses/LICENSE-2.0`

**Gopher Game Server will be open for contributions as soon as version 1.0 is finished. At that time, contribution information will be posted here.**
<h6>Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.</h6>
Loading
Loading