2025-05-12 18:04:18 -07:00
2025-05-12 18:04:18 -07:00
2025-05-12 18:04:18 -07:00
2025-05-12 18:04:18 -07:00
2025-05-12 18:04:18 -07:00

Server Standard

This is a central server and client model based server. The basis of the networking is on msgpack. works on IPv4 only at the moment. In a future release I might add IPV6 but not on any roadmap. Fully threaded and asynchrous to scale easily.

Library

This is a library with a CLI attached to it to show usage. You can send and receive any data type except the standard 'Object' type

Usage

Follow the example listed in Program.cs inside the CLI Note: All datatypes that are sent to the server, The server needs to be aware of when in Athouritative mode.

Create the server

IMistoxServer serverobj = mServer.newServer( int Port, ServerMode mode )

Create the client

IMistoxServer serverobj = mServer.newClient( string HostNameOrIP, int Port )

Sending data

serverobj.Send( dynamic Object, SendType Speed )

Connected and Disconnected


serverobj.onConnected += OnConnected;
serverobj.onDisconnected += OnDisconnected;
void OnConnected( object Data, EventArgs e ){
  // Sender and e are always null
  // Put on connected funtions here
  // such as when connected spawn a player
}
void OnDisconnected( object Data, EventArgs e ){
  // Sender and e are always null
  // Put on disconnected funtions here
  // such as when disconnected return to main menu
}

Receiving data


serverobj.onSlowReceive += SlowReceivedData;
serverobj.onFastReceive += FastReceivedData;
void SlowReceivedData( object Data, EventArgs e ){
  if (Data is Datatype dt){ // Only works in Athoritative mode on server | will always work on client
    
  }
}
void FastReceivedData( object Data, EventArgs e ){
  if (Data is Datatype dt){ // Only works in Athoritative mode on server | will always work on client
    
  }
}

SendType *Enumeration

Where SlowUpdate is sent over TCP

And FastUpate is sent over UDP

public enum SendType {
    SlowUpdate,
    FastUpdate
}

ServerMode *Enumeration The Servermode tells the server if it should Deserialize examine then Reserialize the data passing through. This can be useful to make sure data is

1 actually belonging to the server

2 the ability to keep track of objects within the server [ prevent cheating ]

This requires alot of overhead on the server though.

Passive doesnt use a serdes and instead just passes the data in and out In this mode the server doesnt need to know data types

Athoritative will Deserialize and Serialize the data Refer to the CLI/Program.CS for reference In this mode the server needs to know the data types being sent Therefore you need to put all your data classes into a library and and the library to both the application and the server

public enum ServerMode {
    Passive,
    Authoritative
}

Setup

Place all your networked data types into a library Copy the library to the application and to the server reference the library for the networked data types

Contributing

All Credits to Derek Holloway

License

MIT

S
Description
No description provided
Readme 6.4 MiB
Languages
C# 100%