Exemplo n.º 1
0
        public CheckVersionInMessage(object sender, ServiceDesc msg, object data)
            : base((ServerClient)sender, msg, data)
        {
            Request = data as __RPC_Directory_CheckVersion_ARG_string_lang_string_platform_string_channel_string_version__;

            mResponse             = new __RPC_Directory_CheckVersion_RET_VersionInfo__();
            mResponse.ReturnValue = new VersionInfo();
        }
Exemplo n.º 2
0
 public override void SetResponse(uint error, byte[] data)
 {
     if (data != null)
     {
         var ms = new MemoryStream(data, false);
         mResponse = Serializer.Deserialize<__RPC_Directory_CheckVersion_RET_VersionInfo__>(ms);
     }
     State = MessageState.Reply;
     ErrorCode = (int) error;
 }
Exemplo n.º 3
0
        /// <summary>
        ///     This function will be called in multithread, so THREAD SAFE is very important.
        /// </summary>
        /// <param name="client"></param>
        /// <param name="desc"></param>
        private void ClientMessageReceived(ServerClient client, ServiceDesc desc)
        {
            try
            {
                Logger.Debug("Received a message from Client {0}, {1}.", client.ClientId, ((IPEndPoint)client.RemoteEndPoint).Address.MapToIPv4());

                if (desc.ServiceType == (int)ServiceType.Directory)

                {
                    switch (desc.FuncId)
                    {
                    case 8000:
                    {
                        var info =
                            ProtocolExtension
                            .Deserialize
                            <
                                __RPC_Directory_CheckVersion_ARG_string_lang_string_platform_string_channel_string_version__
                            >(desc.Data);

                        var lang     = info.Lang.ToLowerInvariant();
                        var platform = info.Platform.ToLowerInvariant();
                        var channel  = info.Channel.ToLowerInvariant();
                        var big      = info.Version;

                        var sb = new StringBuilder();
                        sb.Append(lang);
                        sb.Append(".");
                        sb.Append(platform);
                        sb.Append(".");
                        sb.Append(channel);
                        sb.Append(".");
                        sb.Append(big);

                        try
                        {
                            mLock.EnterReadLock();

                            Content c;
                            if (mContents.TryGetValue(sb.ToString(), out c))
                            {
                                var ret = new __RPC_Directory_CheckVersion_RET_VersionInfo__();
                                ret.ReturnValue = new VersionInfo();
                                ret.ReturnValue.SmallVersion   = c.SmallVersion;
                                ret.ReturnValue.AnnoucementURL = c.AnnoucementURL;
                                ret.ReturnValue.ResourceURL    = c.ResourceURL;
                                ret.ReturnValue.HasNewVersion  = c.HasNewVersion ? 1 : 0;
                                ret.ReturnValue.NewVersionURL  = c.NewVersionURL;
                                ret.ReturnValue.ReviewState    = c.ReviewState;

                                var length = c.GateAddress.Length;
                                if (length > 0)
                                {
                                    if (length == 1)
                                    {
                                        ret.ReturnValue.GateAddress = c.GateAddress[0];
                                    }
                                    else
                                    {
                                        ret.ReturnValue.GateAddress = c.GateAddress[random.Next(length)];
                                    }
                                }

                                desc.Data = ProtocolExtension.Serialize(ret);

                                client.SendMessage(desc);
                            }
                            else
                            {
                                desc.Data  = null;
                                desc.Error = 1;
                                client.SendMessage(desc);
                            }
                        }
                        catch (Exception ex)
                        {
                            Logger.Error(ex, "8000 error.");
                        }
                        finally
                        {
                            mLock.ExitReadLock();
                        }
                    }
                    break;

                    case 8001:
                    {
                        var info =
                            ProtocolExtension
                            .Deserialize
                            <
                                __RPC_Directory_CheckVersion_ARG_string_lang_string_platform_string_channel_string_version__
                            >(desc.Data);

                        var lang     = info.Lang.ToLowerInvariant();
                        var platform = info.Platform.ToLowerInvariant();
                        var channel  = info.Channel.ToLowerInvariant();
                        var big      = info.Version;

                        var sb = new StringBuilder();
                        sb.Append(lang);
                        sb.Append(".");
                        sb.Append(platform);
                        sb.Append(".");
                        sb.Append(channel);
                        sb.Append(".");
                        sb.Append(big);

                        try
                        {
                            mLock.EnterReadLock();

                            Content c;
                            if (mContents.TryGetValue(sb.ToString(), out c))
                            {
                                var ret = new __RPC_Directory_CheckVersion_RET_VersionInfo__();
                                ret.ReturnValue = new VersionInfo();
                                ret.ReturnValue.SmallVersion   = c.SmallVersion;
                                ret.ReturnValue.AnnoucementURL = c.AnnoucementURL;
                                ret.ReturnValue.ResourceURL    = c.ResourceURL;
                                ret.ReturnValue.HasNewVersion  = c.HasNewVersion ? 1 : 0;
                                ret.ReturnValue.NewVersionURL  = c.NewVersionURL;
                                ret.ReturnValue.ReviewState    = c.ReviewState;

                                ret.ReturnValue.GateAddress = c.GateAddressString;

                                desc.Data = ProtocolExtension.Serialize(ret);

                                client.SendMessage(desc);
                            }
                            else
                            {
                                desc.Data  = null;
                                desc.Error = 1;
                                client.SendMessage(desc);
                            }
                        }
                        catch (Exception ex)
                        {
                            Logger.Error(ex, "8001 error.");
                        }
                        finally
                        {
                            mLock.ExitReadLock();
                        }
                    }
                    break;

                    case 8002:
                    {
                        var info =
                            ProtocolExtension
                            .Deserialize
                            <
                                __RPC_Directory_CheckVersion3_ARG_string_lang_string_platform_string_channel_string_version__
                            >(desc.Data);

                        var lang     = info.Lang.ToLowerInvariant();
                        var platform = info.Platform.ToLowerInvariant();
                        var channel  = info.Channel.ToLowerInvariant();
                        var big      = info.Version;

                        var sb = new StringBuilder();
                        sb.Append(lang);
                        sb.Append(".");
                        sb.Append(platform);
                        sb.Append(".");
                        sb.Append(channel);
                        sb.Append(".");
                        sb.Append(big);

                        try
                        {
                            mLock.EnterReadLock();

                            Content c;
                            if (mContents.TryGetValue(sb.ToString(), out c))
                            {
                                var ret = new __RPC_Directory_CheckVersion3_RET_VersionInfo__();
                                ret.ReturnValue = new VersionInfo();
                                ret.ReturnValue.SmallVersion   = c.SmallVersion;
                                ret.ReturnValue.AnnoucementURL = c.AnnoucementURL;
                                ret.ReturnValue.ResourceURL    = c.ResourceURL;
                                ret.ReturnValue.HasNewVersion  = c.HasNewVersion ? 1 : 0;
                                ret.ReturnValue.NewVersionURL  = c.NewVersionURL;
                                ret.ReturnValue.ReviewState    = c.ReviewState;

                                if (c.IpWhiteList.Contains(((IPEndPoint)client.RemoteEndPoint).Address.MapToIPv4().ToString()))
                                {
                                    ret.ReturnValue.GateAddress = c.RetargetGateAddress;
                                }
                                else
                                {
                                    ret.ReturnValue.GateAddress = c.GateAddressString;
                                }
                                ret.ReturnValue.ForceShowAnn = c.ForceShowAnn;
                                ret.ReturnValue.Isbn         = c.Isbn;
                                desc.Data = ProtocolExtension.Serialize(ret);

                                client.SendMessage(desc);
                            }
                            else
                            {
                                desc.Data  = null;
                                desc.Error = 1;
                                client.SendMessage(desc);
                            }
                        }
                        catch (Exception ex)
                        {
                            Logger.Error(ex, "8001 error.");
                        }
                        finally
                        {
                            mLock.ExitReadLock();
                        }
                    }
                    break;

                    default:
                        Logger.Error("Unknown funcion id:{0}", desc.FuncId);
                        break;
                    }
                }
            }
            catch (Exception e)
            {
                Logger.Error(e, "ClientMessageReceived");
            }
        }