public void InvokeAuthenticated(EventArgs e) { LoginEventHandler handler = Authenticated; if (handler != null) { handler(this, e); } }
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; })); }
/// <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);
public void SetLoginEvnet(LoginEventHandler add_event) { loginEvent += new LoginEventHandler(add_event); }
public override void Login(byte[] accessInfo, LoginEventHandler callback) { loginEventHandler = callback; gcloud_lockstep_login(accessInfo, accessInfo == null ? 0 : accessInfo.Length); }