Git Product home page Git Product logo

icc's Introduction

ICC

ICC, short for Internet Chat Communication, was built from the ground up to allow for easy implementation, extreme flexibility, and a simple protocol.

ICC is a text chat protocol which can be used to create anything from simple client -> server -> client communication, to making the next Discord.

This repo contains guides on what you need to implement to make your own client or server, and an example made in C# that you can use as a start. Here are some things that you can create using ICC: -Discord -> ICC -> Discord Communication, using a Discord bot and a ICC server, you can integrate ICC into Discord. If your one stubborn friend won't use ICC, they can still comfortably use Discord while you enjoy ICC. Have Discord open and want to chat with your friend on ICC? Easy, you can make it work both ways! -Your own version of Discord, using a customized client and server, you can create channels, roles, guilds, and all of that kind of fun stuff. The server can manage users, messages, channels, roles, and such, while the client can automatically show links, upload files, look through channels and their history, and all of that fun stuff.

ICC is a foundation for you to build amazing things with. With your imagination being the skies limit, this is where the fun begins. All clients and servers will be able to work with each other as long as you implement ICC. Creating your own Discord and someone with a console joins your servers? Not to worry, they should work completely normally. Vise versa when someone is using your client and joins a random server, the client will work completely normally.

Obviously there are some limitations with different clients and servers, like if you tried to make a Discord like UI and you joined a server which mainly operated with console clients, you may not have a friends list, channel lists, or chat history. You can however implement ways for your client or server to handle those cases better. Your Discord like client could actually simplify the UI in order to match the server.

Let's create something great.

icc's People

Contributors

djgaven588 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

d0x1n

icc's Issues

Allow the usage of encryption on compatible servers

Encryption is very important if you want to send information which shouldn't be seen by those outside of your conversation, so why isn't it supported yet?

All clients should at least acknowledge encryption requests from servers, allowing them to safely fail before an encrypted message arrives if they aren't compatible.

All servers are not required to implement anything related to encryption other than a "Doesn't support encryption" message. A client will be able to determine the type of encryption being used based on the first message the server sends. The first message will determine the method used for encryption. A server which uses RSA to send a AES key will respond with something like "RSA->AES". One which uses the password for the server for encryption will respond with something like "PASS", implementation for this not planned ATM.

This will be a useful feature when complete, but will need to be planned properly to make sure compatibility will not be an issue.

An example implementation would look like this:
-Client connects to server
-Server responds with "RSA->AES", followed by the RSA public key.
-If the client doesn't support it, disconnect and notify the client
-If the client does support it, continue
-Client responds with their public RSA key, and saves the server provided one
-Server responds with AES key and removes all information related to RSA
-Client removes all information related to RSA, and uses AES to continue normally

Advanced Server Demos

To show off some things a server can do, there should be more demos which can show them off. These might be built into existing examples, as they will still require the base functionality from them to work.

Here are some examples of what could be done:
-Discord integration, allow communication between a Discord and ICC server. This would be handled by a Discord bot integrated into the server
-Channels, being able to separate servers into chunks would be a good feature. This would just add something like "#general " to the beginning of a message and the client would handle everything from there.
-Message history, loading the history of a chat would be nice in some situations. This might be a command on some servers instead of base functionality as it isn't exactly something all clients would work too well with. Specifically, console clients might have issues with large amounts of messages because it just doesn't display well.
-And more! There is SO MUCH functionality that could be added to demonstrate advanced features you could make.

Allow customization functionality in server side

The server code should be better at allowing functionality to be modified. You should be allowed to do everything from change how new connections are established, to modifying how login is handled.

The server will still need to be compatible with the client though, so any changes should still work with the client.

An example could be that you want to request the password for the server, then request the username and password of the individual user. This adds the ability for a server to have user authentication setup.

Note: Passwords should avoid being sent over the network, and instead a one time authorization code from another source (Phone, Email, ect.) should be used. There is no encryption currently, so this is the safest way to handle it at this time.

Websockets

Possible future feature:
Use web sockets to allow compatibility over all platforms.

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.