/// <summary> /// 进入离开状态 /// </summary> public void OnLeave() { Debug.WriteLine("用户离开了"); WindowManager.Hide("TipWindow"); //停止所有服务 DoStop(); //启动back timer监听鼠标状态 back_timer.Start(); //事件响应 OnLeaveEvent?.Invoke(this, 0); }
private void ReceiveEventArgs_Completed(object sender, SocketAsyncEventArgs e) { if (e.UserToken is ClientStruct client) { try { int len = e.BytesTransferred; if (e.SocketError == SocketError.Success && len > 0) { if (client.recvData.Capacity < client.recvData.Count + len) { client.recvData.Capacity = client.recvData.Count + len; } for (int i = 0; i < len; i++) { client.recvData.Add(client.recvBuffer[i + e.Offset]); } while (client.recvData.Count >= 8) { int dataLen = client.recvData[0] | (client.recvData[1] << 8) | (client.recvData[2] << 16) | (client.recvData[3] << 24); if (client.recvData.Count - 4 >= dataLen) { int signal = client.recvData[4] | (client.recvData[5] << 8) | (client.recvData[6] << 16) | (client.recvData[7] << 24); OnReceivePackageEvent?.Invoke(client.id, signal, client.recvData.GetRange(8, dataLen - 4).ToArray(), client.userToken); client.recvData.RemoveRange(0, dataLen + 4); } else { break; } } SocketAsyncEventArgs receiveEventArgs = new SocketAsyncEventArgs(); receiveEventArgs.Completed += ReceiveEventArgs_Completed; receiveEventArgs.UserToken = client; receiveEventArgs.SetBuffer(client.recvBuffer, 0, client.recvBuffer.Length); if (!client.s.ReceiveAsync(receiveEventArgs)) { ReceiveEventArgs_Completed(sender, receiveEventArgs); } } else { throw new Exception("套接字发生错误!"); } } catch (Exception) { lock (socketHashtable) { socketHashtable.Remove(client.id); } client.s.Close(); OnLeaveEvent?.Invoke(client.id, client.userToken); } } }
/// <summary> /// 进入离开状态 /// </summary> public void OnLeave() { Debug.WriteLine("用户离开了"); //用户可能是离开电脑了 leave_timer.Stop(); //启动back timer监听鼠标状态 back_timer.Start(); timer.Stop(); //事件响应 OnLeaveEvent?.Invoke(this, 0); //停止用眼计时 useeye_timer.Stop(); }