示例#1
0
        internal bool Disconnect(long connectionId)
        {
            WssTransportSession session;

            if (AcceptedClients.TryRemove(connectionId, out session))
            {
                session.Dispose();
                return(true);
            }
            return(false);
        }
示例#2
0
        protected override SslSession CreateSession()
        {
            WssTransportSession newSession = new WssTransportSession(connectionGenerator.GetNewConnectionID(), this);

            if (PeersCount >= MaxConnections)
            {
                newSession.Disconnect();
                return(null);
            }
            AcceptedClients.TryAdd(newSession.ConnectionId, newSession);
            return(newSession);
        }
示例#3
0
        public TickResponse GetResponse(Credential credential, ClientInfo clientInfo)
        {
            try
            {
                var request = HttpContext.Current.Request;
                if (clients == null || clients.Clients == null || clients.Clients.Count == 0)
                {
                    string config = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Config/AcceptedClients.config");
                    using (var reader = new StreamReader(config, Encoding.UTF8))
                    {
                        string xml = reader.ReadToEnd();
                        clients = XmlUtility.Deserialize <AcceptedClients>(xml);
                    }
                }
                string userAgent = request.UserAgent;
                if (string.IsNullOrEmpty(request.UserAgent))
                {
                    userAgent = request.Headers["User-Agent"];
                }
                var client = clients.Clients.FirstOrDefault(
                    x =>
                    string.Equals(x.UserAgent, userAgent,
                                  StringComparison.OrdinalIgnoreCase));

                if (client.UpdateVersion == clientInfo.AppVersion)
                {
                    return(null);
                }
                //先做强制升级的
                return(new TickResponse
                {
                    Action = Action.UpdateApp,
                    Data = new
                    {
                        Version = client.UpdateVersion,
                        Message = "强制升级",
                        Force = true,
                        Url = "http://fchezi.com/download/update.zip"
                    }
                });
            }
            catch (Exception e)
            {
                return(null);
            }
        }
示例#4
0
        public ApiResponse CheckUpdate()
        {
            try
            {
                var request = HttpContext.Current.Request;
                if (clients == null || clients.Clients == null || clients.Clients.Count == 0)
                {
                    string config = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Config/AcceptedClients.config");
                    using (var reader = new StreamReader(config, Encoding.UTF8))
                    {
                        string xml = reader.ReadToEnd();
                        clients = XmlUtility.Deserialize <AcceptedClients>(xml);
                    }
                }
                string userAgent = request.UserAgent;
                if (string.IsNullOrEmpty(request.UserAgent))
                {
                    userAgent = request.Headers["User-Agent"];
                }
                var client = clients.Clients.FirstOrDefault(
                    x =>
                    string.Equals(x.UserAgent, userAgent,
                                  StringComparison.OrdinalIgnoreCase));
                if (client == null)
                {
                    return(new ApiResponse(Metas.SUCCESS, null));
                }
                Client newestClient = client;

                if (!string.IsNullOrEmpty(client.AppName) && !string.IsNullOrEmpty(client.OS))
                {
                    var appClients =
                        clients.Clients.Where(x => (x.AppName == client.AppName && x.OS == client.OS));
                    newestClient        = appClients.OrderByDescending(x => x.InternalVer).FirstOrDefault();
                    newestClient.Update = newestClient.Update > 0 && newestClient.InternalVer > client.InternalVer
                        ? newestClient.Update
                        : 0;
                    newestClient.InternalVer = newestClient.Update > 0 ? newestClient.InternalVer : client.InternalVer;
                    newestClient.Version     = newestClient.Update > 0
                        ? newestClient.UserAgent.Substring(newestClient.UserAgent.IndexOf("Ver",
                                                                                          StringComparison.Ordinal))
                        : client.UserAgent.Substring(newestClient.UserAgent.IndexOf("Ver", StringComparison.Ordinal));

                    if (newestClient.Update > 0 && newestClient.Update == 2 &&
                        !string.IsNullOrEmpty(newestClient.ForceVer))
                    {
                        var forceVers = newestClient.ForceVer.Split(',');
                        if (!forceVers.Contains <String>(client.InternalVer.ToString()))
                        {
                            newestClient.Update = 1;
                        }
                    }
                }
                else
                {
                    newestClient.Update  = 0;
                    newestClient.Version =
                        newestClient.UserAgent.Substring(newestClient.UserAgent.IndexOf("Ver", StringComparison.Ordinal));
                }

                return(new ApiResponse(Metas.SUCCESS,
                                       new
                {
                    newestClient.AppName,
                    newestClient.ChangeLog,
                    newestClient.FileName,
                    newestClient.FileSize,
                    newestClient.Update,
                    newestClient.Version,
                    newestClient.InternalVer,
                    newestClient.PublishDate,
                    newestClient.UpdateUrl
                }));
            }
            catch (Exception e)
            {
                return(new ApiResponse(Metas.UNKNOWN_ERROR, null));
            }
        }
示例#5
0
 internal bool SendAsync(long connectionId, byte[] buffer)
 {
     return(AcceptedClients.ContainsKey(connectionId) && AcceptedClients[connectionId].SendBinaryAsync(buffer, 0, buffer.Length));
 }