In client/server it possible to send messages between a client and the server. Possible use cases could be:
First you need to decide on a class that you want to use as the message. Any object that is storable in db4o can be used as a message. Of course you use multiple classes for representing different messages. Let's create a dedicated class.
public class HelloMessage { private readonly string message; public HelloMessage(string message) { this.message = message; } public override string ToString() { return message; } }
Public Class HelloMessage Private ReadOnly message As String Public Sub New(ByVal message As String) Me.message = message End Sub Public Overrides Function ToString() As String Return message End Function End Class
Now you need to register a handler to handle arriving messages. This can be done by configuring a message recipient on the server. Let's simply print out the arriving message. Additionally we answer to the client with another message.
IServerConfiguration configuration = Db4oClientServer.NewServerConfiguration(); configuration.Networking.MessageRecipient = new ServerMessageReceiver(); IObjectServer server = Db4oClientServer.OpenServer(configuration, DatabaseFile, PortNumber);
Dim configuration As IServerConfiguration = Db4oClientServer.NewServerConfiguration() configuration.Networking.MessageRecipient = New ServerMessageReceiver() Dim server As IObjectServer = Db4oClientServer.OpenServer(configuration, DatabaseFile, PortNumber)
class ServerMessageReceiver : IMessageRecipient { public void ProcessMessage(IMessageContext context, object message) { Console.WriteLine("The server received a '{0}' message", message); // you can respond to the client context.Sender.Send(new HelloMessage("Hi Client!")); } }
Private Class ServerMessageReceiver Implements IMessageRecipient Public Sub ProcessMessage(ByVal context As IMessageContext, ByVal message As Object) _ Implements IMessageRecipient.ProcessMessage Console.WriteLine("The server received a '{0}' message", message) ' you can respond to the client context.Sender.Send(New HelloMessage("Hi Client!")) End Sub End Class
The same can be done on the client. Register a handler for the received messages.
IClientConfiguration configuration = Db4oClientServer.NewClientConfiguration(); configuration.Networking.MessageRecipient = new ClientMessageReceiver();
Dim configuration As IClientConfiguration = Db4oClientServer.NewClientConfiguration() configuration.Networking.MessageRecipient = New ClientMessageReceiver()
class ClientMessageReceiver : IMessageRecipient { public void ProcessMessage(IMessageContext context, object message) { Console.WriteLine("The client received a '{0}' message",message); } }
Private Class ClientMessageReceiver Implements IMessageRecipient Public Sub ProcessMessage(ByVal context As IMessageContext, ByVal message As Object) _ Implements IMessageRecipient.ProcessMessage Console.WriteLine("The client received a '{0}' message", message) End Sub End Class
Now on the client we can get a message sender. The message sender allows you to send a message to the server. In this example we send a hello message.
IMessageSender sender = configuration.MessageSender; using (IObjectContainer container = Db4oClientServer.OpenClient(configuration, "localhost", PortNumber, UserAndPassword, UserAndPassword)) { sender.Send(new HelloMessage("Hi Server!")); WaitForAWhile(); }
Dim sender As IMessageSender = configuration.MessageSender Using container As IObjectContainer = Db4oClientServer.OpenClient(configuration, _ "localhost", PortNumber, UserAndPassword, UserAndPassword) sender.Send(New HelloMessage("Hi Server!")) WaitForAWhile() End Using