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