Commit Graph

31 Commits

Author SHA1 Message Date
e5a9ed1481 shardserver: added Service()
also, Start() now returns an error result
2024-02-01 16:53:27 -06:00
335fdb417c fix: add player to current chunk on LOAD_COMPLETE 2023-12-05 19:17:58 -06:00
ac62f7d64e moved config/ -> internal/config 2023-12-02 22:09:11 -06:00
557117f093 moved internal/protocol -> cnet/protocol 2023-12-01 19:56:23 -06:00
b07e9ddbcb merged internal/service -> cnet/service 2023-12-01 19:22:49 -06:00
af867ccff2 renamed cnet.CNPeer -> cnet.Peer 2023-12-01 19:15:00 -06:00
c60017f78f rename cnpeer package to cnet 2023-12-01 17:11:41 -06:00
e1804a1042 merged entity/chunk && entity/chunkposition 2023-12-01 17:03:46 -06:00
bcc999db38 moved internal/entity to shard/entity 2023-12-01 16:56:55 -06:00
e355af19ab moved internal/protocol/cnpeer to cnpeer
also started a util package
2023-12-01 15:29:19 -06:00
f4b17906ce more protocol/service refactor
- removed protocol.Event: CNPeers now send protocol.PacketEvents
- peer uData is held in CNPeer, use SetUserData() and UserData() to
set/read it
- Service.PacketHandler calback has changed, removed uData:
switched calls to peer.SetUserData() and peer.UserData() where appropriate
- service.Service lots of tidying up, removed dependence on old
protocol.Event.
- service.Service && protocol.CNPeer now accept a cancelable context.
hooray graceful shutdowns and unit tests!
- general cleanup
2023-12-01 00:56:34 -06:00
c0ba365cf5 CNPeer/Service refactor
- each CNPeer is given a unique chan *protocol.Event to pass events to
the service.handleEvents() loop. this is now passed to CNPeer.Handler()
as opposed to NewCNPeer().
- service has basically been rewritten. handleEvents() main loop uses
reflect.SelectCase() now to handle all of the eRecv channels for each
peer
- new protocol Event type: EVENT_CLIENT_CONNECT
- Added service_test.go; blackbox-styled testing like the others.
TestService() starts a service and spins up  a bunch of dummy peers
and verifies that each packet sent causes the corresponding packet
handler to be called.
2023-11-29 19:57:45 -06:00
1f66acfd25 holy refactor
started out as me making a service abstraction..

- db.Player exists again, and entity.Player uses it as an embedded struct
- chunk.ForEachEntity() lets you add/remove entities during iteration now
- removed account related fields from CNPeer
- protocol/pool has been merged with protocol.
use protocol.GetBuffer() and protocol.PutBuffer().
- new protocol/internal/service!
service.Service is an abstraction layer to handle multiple CNPeer*
connections and allows you to associate each with an interface{} uData.
In the future it might also handle a task queue for jobs that
modify/interact with the player's uData, called from service.handleEvents()
- PacketHandler callback type has a new param! uData is passed as well now
- much of loginserver/shardserver is now handled by the shared service
abstraction
- SHARD: NPC_ENTER packets are now sent on player loading complete
rather than on enter.
2023-11-27 21:23:28 -06:00
459b71a109 fix: Chunks are now goroutine safe
- added Chunk.ForEachEntity()
- refactored SendPacketExclude() to use it
- Chunk.Entities is now Chunk.entities, which is private.
- Chunk.AddEntity() && RemoveEntity() now lock the chunk mutex
2023-11-21 01:49:57 -06:00
06f4a4d33f minor chunk refactoring
- rename GetChunk -> GetChunkPos
- rename SetChunk -> SetChunkPos
2023-11-21 01:36:23 -06:00
458e907c99 moved 'core' to 'internal' 2023-08-23 18:16:24 -05:00
83b664da93 minor refactoring, fixed go-staticcheck warnings 2023-08-23 18:03:14 -05:00
f27e72d68d send chat packets to *all* players 2023-06-27 22:05:08 -05:00
215e313c43 added chat :D 2023-06-27 21:49:11 -05:00
3559d9ba9b switched NPC autoincremented ID to atomic int 2023-06-27 20:06:51 -05:00
c4325475ed minor renaming 2023-06-27 00:48:17 -05:00
fd41b32b70 added NPCs; added tdata submodule
- use environment variable TDATA_PATH to specify the location of the
  tdata directory
2023-06-27 00:36:02 -05:00
80dc876517 added shard.addEntity() and shard.removeEntity() 2023-06-27 00:11:00 -05:00
c09a6cfd25 fixed sent server time 2023-06-25 18:29:31 -05:00
8f00a0c492 movement.go: added support for basic movement packets
you should be able to view other players and jump around together,
although while testing locally one of the clients would always trigger
the "Some irregularities have been found with your connection to the
server, so your game will be closed" speed check for some reason ???

really not sure, might just be my machine

chunking uhhh works ? kind of, not tested for more than a few seconds
before one of the clients disconnects
2023-06-25 04:27:42 -05:00
f6ab7a9b5d started chunking 2023-06-25 03:33:17 -05:00
f0b9bc6ed6 god forgive me for this commit 2023-06-25 01:51:21 -05:00
dfc00bcb52 shardServer: simplified peer map logic 2023-06-24 22:36:04 -05:00
1da82ac750 include AccountID in loginMetadata 2023-06-22 18:12:31 -05:00
d7445e0f0f Switched to redis/postgres, major refactoring
- loginMetadata is passed to shards through redis now
- shards announce they're alive via redis.AnnounceShard() which just
  populates a hashset keyed 'shards'
- login servers grab the 'shards' hashset and randomly picks a shard to
  pass the player to (for now)
- ./service shard && ./service login
- Many new environment variables, check config/config.go for more info.
  or for a tl;dr just read the Dockerfile for the required ones
- Shard and login services now run in different processes ! (and
  containers?? wooaaah)
2023-06-22 01:53:38 -05:00
727c68aef3 server: split login/ and shard/ 2023-03-27 17:02:13 -05:00