static void Main(string[] args)
{
int port = 12345;
var messageSerializer = new ProtobufMessageSerializer(
new Message[] { new JoinRoom(), new Say(), new RoomEvent(), new JoinRoomResponse() },
new MessageHeader[] { new OperationHeader() });
var logger = new LoggerConfiguration()
.ConfigureMOUSETypesDestructure()
.MinimumLevel.Verbose()
.WriteTo.ColoredConsole()
.CreateLogger();
var coreEventLogger = new SerilogCoreEvents(logger);
var transport = new LidgrenNetProvider(
new NetPeerConfiguration("Public")
{
MaximumConnections = 10,
AcceptIncomingConnections = true,
Port = port,
LocalAddress = IPAddress.Loopback
},
new SerilogLidgrenEvents(logger));
var netConfig = new NetNodeConfig()
{
ConnectTimeoutSec = 30,
SendTimeoutSec = 30
};
var bufferPool = new WcfBufferPool();
var node = new NetNode<NetChannel>("server", transport, coreEventLogger, messageSerializer, config: netConfig,
channelFactory: (n, transportChannel) =>
new AsyncProcessingNetChannel(builder => builder
.UseFiber(Fiber, config => config
.Lock<Say>(LockType.Read)
.Lock<JoinRoom>(LockType.Write)
.Lock<PeerDisconnected>(LockType.Write))
.UseConfigurableDispatcher(config => config
.HandleMessage<Say>(OnSay)
.HandleMessage<JoinRoom>(OnRoomJoin)
.HandleMessage<PeerDisconnected>((msg, o) => OnRoomLeave(o.ReplyChannel))),
n, transportChannel, messageSerializer, coreEventLogger, netConfig, bufferPool));
node.Start();
Console.ReadKey();
}