Example #1
0
        public void InvokeAuthenticated(EventArgs e)
        {
            LoginEventHandler handler = Authenticated;

            if (handler != null)
            {
                handler(this, e);
            }
        }
Example #2
0
        private void onUserLogin(object sender, LoginEventArgs e)
        {
            LoginEventHandler clickEventDelegate = (LoginEventHandler)Events[EventIdentifier];

            if (clickEventDelegate != null)
            {
                clickEventDelegate(this, e);
            }
        }
        // 触发登录事件
        public virtual void TriggerLogin(MessageConnection connection)
        {
            LoginEventHandler handler = this.Login;

            if (handler != null)
            {
                LoginEventArgs e = new LoginEventArgs();
                // 注: 在触发事件以前, MessageConnection 对象的 ServerUrl 和 Name 成员已经准备好了,可以利用
                //e.ServerUrl = connection.ServerUrl;
                //e.Name = connection.Name;
                handler(connection, e);
                if (string.IsNullOrEmpty(e.ErrorInfo) == false)
                {
                    throw new Exception(e.ErrorInfo);
                }

                connection.UserName   = e.UserName;
                connection.Password   = e.Password;
                connection.Parameters = e.Parameters;
            }
        }
        // parameters:
        //      strName 连接的名字。如果要针对同一 dp2mserver 使用多根连接,可以用名字区分它们。如果不想区分,可以使用空
        public Task <MessageConnection> GetConnectionTaskAsync(string url,
                                                               string strName,
                                                               bool autoConnect = true,
                                                               bool incUseCount = false)
        {
            MessageConnection connection = null;

#if NO
            this._lock.EnterUpgradeableReadLock();
            try
            {
                foreach (MessageConnection current_connection in _connections)
                {
                    if (current_connection.ServerUrl == url && current_connection.Name == strName)
                    {
                        connection          = current_connection;
                        connection.LastTime = DateTime.Now;
                        goto FOUND;
                    }
                }

                connection           = new MessageConnection();
                connection.ServerUrl = url;
                connection.Name      = strName;
                connection.LastTime  = DateTime.Now;
                connection.Container = this;
                this._lock.EnterWriteLock();
                try
                {
                    this._connections.Add(connection);
                }
                finally
                {
                    this._lock.ExitWriteLock();
                }
            }
            finally
            {
                this._lock.ExitUpgradeableReadLock();
            }
#endif
            bool newCreate = false;
            connection = PeekConnection(url,
                                        strName,
                                        incUseCount,
                                        out newCreate);

            if (newCreate == true)
            {
                // 触发 Created 事件
                this.TriggerCreated(connection, new ConnectionCreatedEventArgs());
            }

            // FOUND:
#if NO
            LoginEventArgs e = new LoginEventArgs();
            e.ServerUrl = url;
            e.Name      = strName;
            LoginEventHandler handler = this.Login;
            if (handler != null)
            {
                handler(connection, e); // TODO: 是否在真正连接前再触发?
            }
            if (string.IsNullOrEmpty(e.ErrorInfo) == false)
            {
                throw new Exception(e.ErrorInfo);
            }

            connection.UserName   = e.UserName;
            connection.Password   = e.Password;
            connection.Parameters = e.Parameters;
#endif

            if (autoConnect && connection.ConnectState == Microsoft.AspNet.SignalR.Client.ConnectionState.Disconnected)
            {
                return(Task.Run <MessageConnection>(async() =>
                {
                    // TODO: 建议抛出原有 Exception
                    MessageResult result = await connection.ConnectAsync();
                    if (result.Value == -1)
                    {
                        throw new MessageException(result.String, connection.UserName, result.ErrorInfo);
                    }
                    return connection;
                }));

#if NO
                Task <MessageConnection> task = new Task <MessageConnection>(async() =>
                {
                    // TODO: 建议抛出原有 Exception
                    MessageResult result = await connection.ConnectAsync();
                    if (result.Value == -1)
                    {
                        throw new Exception(result.ErrorInfo);
                    }
                    return(connection);
                });
                task.Start();
                return(task);
#endif
            }

#if NO
            {
                var task = new Task <MessageConnection>(() =>
                {
                    return(connection);
                });
                task.Start();
                return(task);
            }
#endif
            return(Task.Run(() =>
            {
                return connection;
            }));
        }
Example #5
0
 /// <summary>
 /// Login to the LockStep Server
 /// </summary>
 /// <param name="accessInfo">Game Server must pass accessInfo, which is created by LockStep Server, to the Game Client</param>
 /// <param name="callback">Callback.</param>
 public abstract void Login(byte[] accessInfo, LoginEventHandler callback);
Example #6
0
 public void SetLoginEvnet(LoginEventHandler add_event)
 {
     loginEvent += new LoginEventHandler(add_event);
 }
Example #7
0
 public override void Login(byte[] accessInfo, LoginEventHandler callback)
 {
     loginEventHandler = callback;
     gcloud_lockstep_login(accessInfo, accessInfo == null ? 0 : accessInfo.Length);
 }