예제 #1
0
        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"
            });
        }
예제 #2
0
        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
                    });
                }
            }
        }