Socket Messaging Library

La Socket Messaging Library est une unité Delphi prenant en charge des échanges de messages entre un serveur et des clients. Elle a été créée suite à une grosse frustration lors du développement du jeu vidéo Sporgloo et pour éviter de reperdre du temps sur le client serveur lors d'une prochaine game jam.

En pratique cette librairie n'est pas destinée qu'aux jeux vidéo, elle peut aussi servir pour des programmes "sérieux" dès lors qu'on travaille sur un réseau éthernet avec du TCP/IP.

On peut s'en servir en P2P comme en client serveur.

Sur le principe on a une classe serveur TOlfSocketMessagingServer qui va écouter le réseau sur l'IP et le port désignés. Chaque client connecté se retrouve isolé dans un processus avec la classe TOlfSocketMessagingServerConnectedClient.

On a ensuite une classe cliente TOlfSocketMessagingClient à utiliser pour se connecter à un serveur.

Chacun peut recevoir et envoyer des messages descendants de la classe TOlfSocketMessage.

Pour prendre en charge les messages reçus il faut au préalable les référencer avec la méthode RegisterMessageToReceive(). Sans ça les messages ne seront pas connus de la boucle de réception qui retournera une exception.

Le traitement des messages reçus (s'ils sont acceptés) est délégué à des méthodes dédiées qui se seront au prélable abonnées aux messages qu'elles traitent par la méthode SubscribeToMessage().

L'envoi de nouveaux messages se fait simplement par l'appel de la méthode SendMessage() en lui passant le message.

Tout type d'information peut être transmis dès lors qu'il est possible de l'écrire dans un flux et la lire depuis un flux. Un message est composé d'un ensemble de données écrites et lues dans le flux en mémoire servant d'intermédiaire entre les messages et les sockets réseau.

L'utilisation est voulue aussi simple que possible. La partie réseau et les échanges sont pris en charge par la librairie. La partie utilisation et dialogue est à prendre en charge par le logiciel qui l'utilise (ce qui est assez logique).

Dans la version actuelle les messages ont un ID allant de 0 à 255. Ils peuvent aller jusqu'à 65535 octets de long. C'est une limite qui peut sauter si vous personnalisez les types TMessageID et TMessageSize en entête de la librairie (mais attention aux mises à jour ultérieures qui vous obligeront à refaire cette personnalisation).

Une partie du développement de la librairie, de ses exemples et des outils associés a été enregistrée en vidéos à voir sur Serial Streameur.

La librairie est open source. Vous la trouverez sur son dépôt GitHub.

Et si vous préférez ne pas coder tout ça à la main il vous suffit d'utiliser le programme SMCodeGenerator.


Liens associés

Ces liens s'ouvrent dans la même fenêtre que cette page. En cliquant dessus vous quitterez Les trucs et astuces d'un développeur Pascal.
Pensez à les ouvrir dans un nouvel onglet si vous préférez rester ici pour y revenir plus facilement.


Mug Pascal case in AlexandrieMug Chinese New Year 2023 : year of the rabbit

Publications sur ce thème