Jump to content

[Discussion] Idea about a global, cross-server chatting system


Recommended Posts

First of all greetings, I got no clue on the state of l2j and the servers nowadays, at least I hope I am posting this in the right section. Here's an idea I came up with some days ago. Try to read carefully cause it's a bit new for l2 and a bit complex.

 

Idea:

 

Enabling chatting between different servers through a p2p or master/slave architecture.

 

Details:

 

Imagine this scenario. We have two servers, lets call them L2Custom and L2Oldschool. They are both registered in the global chatting system. Here's what players and admins would be able to do.

 

Player in L2Oldschool:

 

.global Hallo everyone in Lineage 2 ! ---> Everyone in servers registered to that system would get this message, both in L2Custom and L2Oldschool

.pm L2Custom xxBestPlayerxx Hey man --> Player from L2Oldschool sends a pm to xxBestPlayerxx who is in L2Custom

 

Admin in L2Oldschool:

 

.ban L2Custom --> Bans all L2Custom incoming/outgoing chat to prevent advertising and flame if things go bad.

.ban L2custom xxBestPlayerxx --> Bans a player from L2Custom from chatting in L2Oldschool because he says shit about the server.

 

Commands and filters can be extended/applied to filter out unwanted behaviour such as server adverticement.

Link to comment
Share on other sites

It's really an interesting idea, but requires a lot of work. It's like re-coding the whole chat system from scratch. I would really be glad to see it, too bad i don't have enough knowledge to help in it.

Good luck if you're going to try it :D

Link to comment
Share on other sites

It's really an interesting idea, but requires a lot of work. It's like re-coding the whole chat system from scratch. I would really be glad to see it, too bad i don't have enough knowledge to help in it.

Good luck if you're going to try it :D

 

not rly, the hard part is the communications between the servers, not the chat system, the only thing that needs modification is the server socket communication, the chat system is fine, it doesnt need any heavy modification ;)

Link to comment
Share on other sites

It's funny you speak about that, Cryptic studios made it with Neverwinter and Star Trek Online, the chat system is global to both those games (can see/PM online friends even if connected on another game, and probably admin side is also centralized).

 

Got an idea how the link will be made ? I guess during LoginServer hook ?

 


 

Another idea, if you manage to make it, is : adding a friend is linked to your account. Aka, when you invite someone you invite the account. Meaning if your friend logs on another character, then you still know he is online. Still an Cryptic idea.

 

Basically, on Cryptic games, a player is considered as playerName@accountName. You invite @accountName, and can see playerName when logged.

Link to comment
Share on other sites

It's funny you speak about that, Cryptic studios made it with Neverwinter and Star Trek Online, the chat system is global to both those games (can see/PM online friends even if connected on another game, and probably admin side is also centralized).

 

Got an idea how the link will be made ? I guess during LoginServer hook ?

 


 

Another idea, if you manage to make it, is : adding a friend is linked to your account. Aka, when you invite someone you invite the account. Meaning if your friend logs on another character, then you still know he is online. Still an Cryptic idea.

 

Basically, on Cryptic games, a player is considered as playerName@accountName. You invite @accountName, and can see playerName when logged.

 

sockets

Link to comment
Share on other sites

I would probably implement it using a Master-Slave architecture with a RESTful streaming API using HTTP.

 

For example say we have Master and Slave1 ( l2j server ) , Slave2 ( l2j server ) all of them running a web server and web client ( Jetty , Apache commons HTTPClient ).

 

From Slave1 to Master HTTP request:

 

1)/GET www.master.com/serverlist <-- Returns a list of registered servers with their Ids and Slave1 gets the Slave2's id.

2)/GET www.master.com/allow/{slave2Id}

 

From Slave1 to Master HTTP request:

1)/POST www.master.com/chat , json list of chat logs.

 

Master server reads the POST and forwards the POST to the Slave1 because Slave1 allowed Slave2 to communicate with it.

 

The basic idea flow for the chat is

 

a)SlaveX sends logs to be broadcasted to Master

b)Master receives the logs and forwards them to Slaves that have SlaveX in "allow" mode. That way you can configure which server you want to allow/block.

c)SlaveY receives the messages and pushes them into it's chatting system via shout/trade or whatever same way as some NPC's talk.

 

In every communication case above, the Slaves allow HTTP Posts/gets only from the Master IP address. That can be secured more using some clientid/clientsecret combination to authenticate the slave servers on the master server.

Link to comment
Share on other sites

http://docs.oracle.com/javase/tutorial/networking/datagrams/clientServer.html

All you need ^^

 

It's safe, it's streightforward, you wont need to over-complicate yourself with TCP procedures, and you wont be afraid of syn ACK packet floods :P (before you say smth regarding UDP flood, you'll get flooded with udp on standard ports like services 0 and 80, if you open a obscure one it wont affect anything)

 

Also, a good thing to it is, you dont need to maintain connections, each connection stands tll all data is written and flushed out :P So you wont need another server to maintain connections, that is vulnerable to attack :P. No master no slaves, just short and efficient connections.

 

PS: it supports Selectors, and nio Channels :P

Link to comment
Share on other sites

less work than you might think, since l2j separated the community server you can try to mod the new cb server so multiple servers can connect to it once and if you do it right there you have your cross server forum :)

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Posts

    • Helly everyone . I use L2jmobius interlude , i did everything , installed the db compiled the Build in eclipse Gameserver seems to lead OK , but it fails to connect to loginserver When i click to start the loginserver it says  "Loginserver terminated abnormally" This is wheat gameserver shows me :    [05/10 17:25:12] LoginServerThread: Connecting to login on 127.0.0.1:9014 [05/10 17:25:12] LoginServerThread: LoginServer not available, trying to reconnect... [05/10 17:25:17] LoginServerThread: Connecting to login on 127.0.0.1:9014 [05/10 17:25:17] LoginServerThread: LoginServer not available, trying to reconnect... [05/10 17:25:22] LoginServerThread: Connecting to login on 127.0.0.1:9014 [05/10 17:25:22] LoginServerThread: LoginServer not available, trying to reconnect...   And This is my login config file:   # --------------------------------------------------------------------------- # Login Server Settings # --------------------------------------------------------------------------- # This is the server configuration file. Here you can set up the connection information for your server. # This was written with the assumption that you are behind a router. # Dumbed Down Definitions... # LAN (LOCAL area network) - typically consists of computers connected to the same router as you. # WAN (WIDE area network) - typically consists of computers OUTSIDE of your router (ie. the internet). # x.x.x.x - Format of an IP address. Do not include the x'es into settings. Must be real numbers. # --------------------------------------------------------------------------- # Networking # --------------------------------------------------------------------------- # Bind ip of the LoginServer, use 0.0.0.0 to bind on all available IPs # WARNING: <u><b><font color="red">Please don't change default IPs here if you don't know what are you doing!</font></b></u> # WARNING: <u><b><font color="red">External/Internal IPs are now inside "ipconfig.xml" file.</font></b></u> # Default: 0.0.0.0 LoginserverHostname = 0.0.0.0 # Default: 2106 LoginserverPort = 2106 # The address on which login will listen for GameServers, use * to bind on all available IPs # WARNING: <u><b><font color="red">Please don't change default IPs here if you don't know what are you doing!</font></b></u> # WARNING: <u><b><font color="red">External/Internal IPs are now inside "ipconfig.xml" file.</font></b></u> # Default: 127.0.0.1 LoginHostname = 127.0.0.1 # The port on which login will listen for GameServers # Default: 9014 LoginPort = 9014 # --------------------------------------------------------------------------- # Database # --------------------------------------------------------------------------- # Specify the JDBC driver class for your database. # Default: org.mariadb.jdbc.Driver Driver = org.mariadb.jdbc.Driver # Database URL # Default: jdbc:mariadb://localhost/l2jmobiusinterlude?useUnicode=true&characterEncoding=utf-8&useSSL=false&connectTimeout=10000&interactiveClient=true&sessionVariables=wait_timeout=600,interactive_timeout=600&autoReconnect=true URL = jdbc:mariadb://localhost/l2jmobiusinterlude?useUnicode=true&characterEncoding=utf-8&useSSL=false&connectTimeout=10000&interactiveClient=true&sessionVariables=wait_timeout=600,interactive_timeout=600&autoReconnect=true # Database user info. Default is "root" but it's not recommended. Login = root # Database user password, leave empty for no password. Password = root # Maximum number of database connections to maintain in the pool. # Default: 5 MaximumDatabaseConnections = 5 # Determine whether database connections should be tested for availability. # Default: False TestDatabaseConnections = False # --------------------------------------------------------------------------- # Automatic Database Backup Settings # --------------------------------------------------------------------------- # Generate database backups when server restarts or shuts down.  BackupDatabase = False # Path to MySQL bin folder. Only necessary on Windows. MySqlBinLocation = C:/xampp/mysql/bin/ # Path where MySQL backups are stored. BackupPath = ../backup/ # Maximum number of days that backups will be kept. # Old files in backup folder will be deleted. # Set to 0 to disable. BackupDays = 30 # --------------------------------------------------------------------------- # Thread Configuration # --------------------------------------------------------------------------- # Defines the number of threads in the scheduled thread pool. # If set to -1, this will be determined by available processors divided by 2. ScheduledThreadPoolSize = 2 # Defines the number of threads in the instant thread pool. # If set to -1, this will be determined by available processors divided by 2. InstantThreadPoolSize = 2 # --------------------------------------------------------------------------- # Security # --------------------------------------------------------------------------- # How many times you can provide an invalid account/pass before the IP gets banned. # Default: 5 LoginTryBeforeBan = 5 # Time you won't be able to login back again after LoginTryBeforeBan tries to login. # Default: 900 (15 minutes) LoginBlockAfterBan = 900 # If set to True any GameServer can register on your login's free slots # Default: True AcceptNewGameServer = True # Flood Protection. All values are in milliseconds. # Default: True EnableFloodProtection = True # Default: 15 FastConnectionLimit = 15 # Default: 700 NormalConnectionTime = 700 # Default: 350 FastConnectionTime = 350 # Default: 50 MaxConnectionPerIP = 50 # --------------------------------------------------------------------------- # Misc Login Settings # --------------------------------------------------------------------------- # If False, the license (after the login) will not be shown. # Default: True ShowLicence = True # Default: True AutoCreateAccounts = True # Datapack root directory. # Defaults to current directory from which the server is started. DatapackRoot = . # --------------------------------------------------------------------------- # Scheduled Login Restart # --------------------------------------------------------------------------- # Enable disable scheduled login restart. # Default: False LoginRestartSchedule = False # Time in hours. # Default: 24 LoginRestartTime = 24    
    • or at least to tell you an update that sorry but still not at home.. 10 days is suspisious.. but he is long time offline from discord indeed... maybe something happened?
    • I never had problems with him. Again, Im not sure if he scammed or not. But 10+ days without answering after we already paid, its a bit sus. If you know you wouldnt be able to answer for a few days, after receiving and confirming the amount, why dont keep in touch? or just say "hey, dont send now because I will only be available after day x.".  
    • i used to ask him for stuff etc, i dont think he scammed ... if he does i will be suprised...
  • Topics

×
×
  • Create New...