public async Task HandleClientMessage(ClientMessageContext context) { var info = context.Connection.ToRegInfo(); await context.Connection.Server.RegistrationProvider.RegisterUserInfo(info); context.Connection.Client.PingTimeUtc = info.Payload.PingTimeUtc; await context.Connection.SendMessage(new MessageWrapper() { MessageType = "ping_success" }); }
async Task __handle_message__(IMessageHandler handler, MessageWrapper data) { using (var s = this.Provider.CreateScope()) { try { var context = new ClientMessageContext() { HandleServiceProvider = s.ServiceProvider, Connection = this, Message = data }; await handler.HandleClientMessage(context); //如果需要把信息路由到其他服务器 var server_instance_id = context.__route_to_instances__; if (server_instance_id != null && server_instance_id.Any()) { if (server_instance_id.Contains(context.Connection.Server.ServerInstanceID)) { //await con.SendMessage(message); } var tasks = server_instance_id .Where(x => x != context.Connection.Server.ServerInstanceID || true) .Select(x => context.Connection.Server.TransportProvider.RouteToServerInstance(x, context.Message)).ToArray(); if (tasks.Any()) { await Task.WhenAll(tasks); } } if (context.__broad_cast__ != null && context.__broad_cast__.Value) { await context.Connection.Server.TransportProvider.BroadCast(context.Message); } } catch (Exception e) { this.logger.AddErrorLog(e.Message, e); await this.SendMessage(new MessageWrapper() { MessageType = "exception", Payload = e.Message }); } } }