public void HandleArguments(string args) { GameBase.Scheduler.Add(delegate { if (args.StartsWith("osu://")) { GameBase.BringToFront(); ChatEngine.HandleLink(args); } else { //file handling. OsuModes gs = GameBase.ReceiveFile(args); if (gs != OsuModes.Unknown) { if (GameBase.IsMinimized && GameBase.Form.Visible) { GameBase.Form.WindowState = FormWindowState.Normal; GameBase.BringToFront(); } GameBase.ChangeMode(gs, true); } } }); }
internal virtual void Display() { if (IsDisplayed) { return; } if (ChatEngine.IsVisible && !AllowChatOverlay) { ChatEngine.HideChat(); chatToggle = true; } for (int i = spriteManager.SpriteList.Count - 1; i > -1; i--) { pDrawable s = spriteManager.SpriteList[i]; if (s.Transformations.Count > 0 && s.Transformations[0].Time2 < GameBase.Time) { s.Transformations.ForEach(t => { t.Time1 += GameBase.Time; t.Time2 += GameBase.Time; }); } if (s.Transformations.Count == 0 && s.InitialColour != Color.TransparentWhite) { s.FadeInFromZero(300); } } IsDisplayed = true; }
private void FocusGot() { if (ReadOnly) { return; } if (!HasFocus) { beforeCommit = Box.Text; HasFocus = true; Box.BorderColour = Color.White; Box.BackgroundColour = new Color(255, 255, 255, 50); Box.refreshTexture(); InputManager.fullTextGameBuffer = Box.Text; InputManager.FullTextGameFocus = true; chatWasVisible = ChatEngine.IsVisible; if (ChatEngine.IsVisible) { ChatEngine.Toggle(true); } } }
internal static void LeaveLobby(bool changeMode) { if (!Joined) { return; } Joined = false; Matches.Clear(); BanchoClient.SendRequest(RequestType.Osu_LobbyPart, null); if (Status == LobbyStatus.Idle) { ChatEngine.RemoveChannel(@"#lobby"); if (!chatOpenOnStart) { ChatEngine.HideChat(); } Status = LobbyStatus.NotJoined; } if (changeMode) { AudioEngine.PlaySamplePositional(@"menuback"); Status = LobbyStatus.NotJoined; GameBase.ChangeMode(OsuModes.Menu); } }
internal static void LeaveLobby(bool changeMode) { if (!Joined) { return; } Joined = false; Matches.Clear(); BanchoClient.SendRequest(RequestType.Osu_LobbyPart, null); if (Status == LobbyStatus.Idle) { if (!chatOpenOnStart && ChatEngine.IsVisible) { ChatEngine.Toggle(true); } Status = LobbyStatus.NotJoined; } if (changeMode) { AudioEngine.PlaySample(AudioEngine.s_MenuBack); GameBase.ChangeMode(Modes.Menu); } }
public HomePageModel(ChatEngine chatEngine, IEncryption encryption) { ChatEngine = chatEngine; EncryptionAlgo = encryption; ChatEngine.MesssageReceived += ChatEngine_MesssageReceived; RoomChats = new ObservableCollection <ChatObject>(); LogDatas = new ObservableCollection <string>(); }
/// <summary> /// Initializes a new instance of the <see cref="AimlLoader" /> class. /// </summary> /// <param name="chatEngine">The chat engine.</param> /// <exception cref="System.ArgumentNullException">chatEngine</exception> public AimlLoader([NotNull] ChatEngine chatEngine) { if (chatEngine == null) { throw new ArgumentNullException(nameof(chatEngine)); } _chatEngine = chatEngine; }
void pb_OnClick(pText p, pText pname) { string attemptJoin = p.Tag.ToString(); Channel c = ChatEngine.channels.Find(s => s.Name == attemptJoin); if (c == null) { NotificationManager.ShowMessageMassive(LocalisationManager.GetString(OsuString.ChannelListDialog_CantRejoinThisChannel), 1500); return; } if (InputManager.rightButtonLast == ButtonState.Pressed) { if (!c.Joined || !c.Closeable) { return; } ChatEngine.RemoveChannel(c); NotificationManager.ShowMessageMassive(string.Format(LocalisationManager.GetString(OsuString.ChannelListDialog_Left), c.Name), 1500); p.FadeColour(SkinManager.NEW_SKIN_COLOUR_SECONDARY, 300); pname.FadeColour(SkinManager.NEW_SKIN_COLOUR_SECONDARY, 300); } else { if (!c.Joined) { Channel chan = null; try { chan = ChatEngine.AddChannel(attemptJoin, false, true); if (chan == null) { NotificationManager.ShowMessageMassive(string.Format(LocalisationManager.GetString(OsuString.ChannelListDialog_JoiningTooFast), attemptJoin), 1500); return; } ChatEngine.channelTabs.SetSelected(chan); NotificationManager.ShowMessageMassive(string.Format(LocalisationManager.GetString(OsuString.ChannelListDialog_Joined), chan.Name), 1500); p.FadeColour(SkinManager.NEW_SKIN_COLOUR_MAIN, 300); pname.FadeColour(SkinManager.NEW_SKIN_COLOUR_MAIN, 300); } catch { } } else { NotificationManager.ShowMessageMassive(LocalisationManager.GetString(OsuString.ChannelListDialog_AlreadyJoined), 1500); } } Update(); }
/// <summary> /// Initializes a new instance of the <see cref="T:System.Object" /> class. /// </summary> /// <exception cref="ArgumentNullException"><paramref name="engine" /> is <see langword="null" />.</exception> public TagHandlerFactory([NotNull] ChatEngine engine) { //- Validate if (engine == null) { throw new ArgumentNullException(nameof(engine)); } //- Set fields _engine = engine; //+ Load types in this assembly that have the HandlesAimlTag attribute RegisterTagHandlersInAppDomain(); }
public override void ExecuteCommand(ChatEngine session, BaseCommandInfo commandInfo) { try { var msg = Tool.SerializeHelp.Deserialize <Message>(commandInfo.Data[0]); session.ChatEvents.OnUserChat(msg); } catch (Exception ex) { throw; } }
public ChatScriptManagerTests() { var chatModel = new ChatModel(); ChatConfiguration config = new ChatConfiguration(); AWSDynamoService awsDynamoService = new AWSDynamoService(config); FlowStepProvider flowStepProvider = new FlowStepProvider(awsDynamoService); var chatEngine = new ChatEngine(null, config, null, awsDynamoService, null, null, null, null, null, null, null, null, flowStepProvider); scriptManager = new ChatScriptManager(chatModel, awsDynamoService, config); scriptManager.Initialize().Wait(); }
internal static void JoinLobby() { if (Joined) { return; } Joined = true; Matches.Clear(); Status = LobbyStatus.Idle; BanchoClient.SendRequest(RequestType.Osu_LobbyJoin, null); ChatEngine.SwapChannel(ChatEngine.AddChannel(@"#lobby")); }
private void EnterChat() { var user = AllUsers.Instance.GetAllUsers().Find(u => u.Login == AccountStatus.Instance.Login); if (user == null) { return; } ChatSettings.Instance.Id = user.ID; if (ChatSettings.Instance.AutoLogin) { ChatEngine.Login(user.ID); } }
static public string LeaveRoom(string roomID) { try { ChatRoom room = ChatEngine.GetRoom(roomID); if (room != null) { room.LeaveRoom(HttpContext.Current.Session["UserName"].ToString()); } } catch (Exception ex) { } return(""); }
static public string SendMessage(string msg, string roomID) { try { ChatRoom room = ChatEngine.GetRoom(roomID); string res = ""; if (room != null) { res = room.SendMessage(msg, HttpContext.Current.Session["UserName"].ToString()); } return(res); } catch (Exception ex) { } return(""); }
/// <summary> /// Disconnects from bancho. /// </summary> internal static void Disconnect(bool resetTimeout) { Authenticated = false; Connected = false; StreamingManager.Spectators.Clear(); StreamingManager.CurrentlySpectating = null; ChatEngine.ClearChannels(); if (resetTimeout) { pingTimeout = PING_TIMEOUT; } sendSequence = 0; ChatEngine.ResetUsers(); ResetReadArray(true); if (client == null || !client.Connected) { return; } try { new RequestGeneric(RequestType.Osu_Exit, null).Send(stream); } catch (Exception e) { Console.WriteLine(e.ToString()); } Requests.Clear(); if (client != null && client.Connected) { client.Close(); } }
protected void Page_Load(object sender, EventArgs e) { if (Session["UserName"] == null) { Response.Redirect("Default.aspx"); } txtMsg.Attributes.Add("onkeypress", "return clickButton(event,'btn')"); if (!IsPostBack) { hdnRoomID.Value = Request.QueryString["rid"]; ChatRoom room = ChatEngine.GetRoom(hdnRoomID.Value); string prevMsgs = room.JoinRoom(Session["UserName"].ToString(), Session["UserName"].ToString()); txt.Text = prevMsgs; foreach (string s in room.GetRoomUsersNames()) { lstMembers.Items.Add(new ListItem(s, s)); } } }
static public string UpdateUser(string roomID) { try { ChatRoom room = ChatEngine.GetRoom(roomID); if (room != null) { string res = ""; if (room != null) { res = room.UpdateUser(HttpContext.Current.Session["UserName"].ToString()); } return(res); } } catch (Exception ex) { } return(""); }
public static void StopSpectating(bool ExitPlayMode = true) { if (GameBase.TourneySpectatorName != null) { GameBase.TourneySpectatorName.Text = string.Empty; } if (ExitPlayMode && (GameBase.Mode == OsuModes.Play || (GameBase.Mode != OsuModes.Menu && GameBase.Tournament))) { InputManager.ReplayMode = false; if (CurrentlySpectating == null) { GameBase.ChangeMode(OsuModes.SelectPlay, true); } else { GameBase.ChangeMode(OsuModes.Menu, true); } } if (CurrentlySpectating != null) { lock (LockReplayScore) { BanchoClient.SendRequest(RequestType.Osu_StopSpectating, null); NotificationManager.ShowMessage("Stopped spectating " + CurrentlySpectating.Name, Color.Tomato, 3000); CurrentlySpectating = null; InputManager.ReplayStreaming = false; } if (ChatEngine.channels.Exists(s => s.Name == "#spectator")) { ChatEngine.RemoveChannel(ChatEngine.channels.Find(s => s.Name == "#spectator"), false, true); } InputManager.ReplayStartTime = 0; } FellowSpectators.Clear(); ReplayQueue.Clear(); GameBase.SetTitle(); }
internal virtual void Display() { if (IsDisplayed) { return; } if (ChatEngine.IsVisible) { ChatEngine.Toggle(true); chatToggle = true; } GameBase.spriteManagerOverlay.RemoveRange(SpriteCollection); for (int i = SpriteCollection.Count - 1; i > -1; i--) { GameBase.spriteManagerOverlay.Add(SpriteCollection[i]); SpriteCollection[i].FadeInFromZero(300); } IsDisplayed = true; }
private pSprite AddLinkSprite(Link l, List <pSprite> linkSprites, Vector2 offset, Vector2 size) { pSprite linkSprite = new pSprite(GameBase.WhitePixel, Fields.TopLeft, Origins.TopLeft, Clocks.Game, messageSprite.Position + offset); linkSprite.InitialPosition = messageSprite.InitialPosition + offset; linkSprite.Depth = messageSprite.Depth - 0.001f; linkSprite.AlwaysDraw = true; linkSprite.Tag = @"link"; linkSprite.InitialColour = new Color(39, 70, 120, 255); linkSprite.Scale = 1.6f; linkSprite.VectorScale = size; linkSprite.HandleInput = true; linkSprite.OnHover += delegate { foreach (pSprite s in linkSprites) { s.FadeColour(Color.LightBlue, 100); } }; linkSprite.OnHoverLost += delegate { foreach (pSprite s in linkSprites) { s.FadeColour(new Color(39, 70, 120, 255), 100); } }; linkSprite.OnClick += delegate { ChatEngine.HandleLink(l.Url); }; linkSprite.ToolTip = @"link: " + l.Url; linkSprite.ClickRequiresConfirmation = true; Sprites.Add(linkSprite); return(linkSprite); }
internal virtual void Close(bool isCancel = false) { if (!IsDisplayed) { return; } foreach (pSprite p in spriteManager.SpriteList) { p.FadeOut(120); p.HandleInput = false; p.AlwaysDraw = false; } if (isCancel && cancelAction != null) { cancelAction(this, null); } if (Closed != null) { Closed(this, null); } if (chatToggle && !AllowChatOverlay) { if (ChatEngine.IsVisible) { ChatEngine.HideChat(); } else { ChatEngine.RestoreLastState(); } } IsDisplayed = false; Dispose(); }
internal void ReceivePresence(bUserPresence presence) { Id = presence.userId; Name = presence.username; Timezone = presence.timezone; //never downgrade from an osu! to non-osu presence if (!IsOsu || presence.isOsu) { IsOsu = presence.isOsu; } CountryCode = presence.countryCode; Location = countryNames[presence.countryCode]; Longitude = presence.longitude; Latitude = presence.latitude; Permission = presence.permission; Rank = presence.rank; if (!StatsLoaded) { PlayMode = presence.playMode; } if (spriteAvatar != null) { LoadAvatarInto(spriteAvatar, spriteAvatar.MaxDimension); } UpdateTextFields(); UpdateColour(); if (!InitialLoadComplete) { ChatEngine.CheckFriend(this); InitialLoadComplete = true; } }
static public string UpdateRoomMembers(string roomID) { try { ChatRoom room = ChatEngine.GetRoom(roomID); if (room != null) { IEnumerable <string> users = room.GetRoomUsersNames(); string res = ""; foreach (string s in users) { res += s + ","; } return(res); } } catch (Exception ex) { } return(""); }
private void FocusLost() { if (ReadOnly) { return; } if (HasFocus) { HasFocus = false; Box.BorderColour = Color.Black; Box.BackgroundColour = new Color(255, 255, 255, 20); Box.refreshTexture(); InputManager.fullTextGameBuffer = Box.Text; InputManager.FullTextGameFocus = false; if (!ChatEngine.IsVisible && chatWasVisible) { ChatEngine.Toggle(true); } } }
protected override void Dispose(bool disposing) { KeyboardHandler.OnKeyPressed -= KeyboardHandler_OnKeyPressed; if (GameBase.Mode != Modes.MatchSetup && GameBase.Mode != Modes.SelectMulti && Lobby.Status != LobbyStatus.Idle && Lobby.Status != LobbyStatus.Play) { OnLeaveGame(null, null); } if (Lobby.Status == LobbyStatus.Play || Lobby.Status == LobbyStatus.Setup) { if (!Lobby.chatOpenOnStart && ChatEngine.IsVisible) { ChatEngine.Toggle(true); } } spriteManager.Dispose(); detailsGameName.Dispose(); content.Unload(); base.Dispose(disposing); }
internal virtual void Close() { if (!IsDisplayed) { return; } foreach (pSprite p in SpriteCollection) { p.FadeOut(120); p.IsClickable = false; p.AlwaysDraw = false; } if (Closed != null) { Closed(this, null); } if (chatToggle) { ChatEngine.Toggle(true); } IsDisplayed = false; }
public override void Initialize() { StreamingManager.StopSpectating(false); content = new ResourceContentManager(GameBase.Instance.Services, ResourcesStore.ResourceManager); spriteManager = new SpriteManager(); BanchoClient.OnConnect += BanchoClient_OnConnect; KeyboardHandler.OnKeyRepeat += KeyboardHandler_OnKeyRepeat; pText headerText = new pText("Multiplayer Lobby", 30, new Vector2(0, 0), 0.955F, true, new Color(255, 255, 255, 255)); spriteManager.Add(headerText); pText headerText2 = new pText("Let's play together!", 16, new Vector2(4, 26), 0.955F, true, new Color(255, 255, 255, 255)); spriteManager.Add(headerText2); pSprite bgf = new pSprite(content.Load <Texture2D>("lobby-background"), FieldTypes.Window, OriginTypes.TopLeft, ClockTypes.Game, Vector2.Zero, 0, true, Color.White); spriteManager.Add(bgf); pAnimation back = new pAnimation(SkinManager.LoadAll("menu-back"), FieldTypes.Window, OriginTypes.TopLeft, ClockTypes.Game, new Vector2(0, 480), 0.8F, true, new Color(255, 255, 255, (byte)(255 * 0.6))); back.SetFramerateFromSkin(); back.OriginPosition = new Vector2(0, 146); back.OnClick += back_OnClick; back.IsClickable = true; back.HoverEffect = new Transformation(TransformationType.Fade, 0.6F, 1, 0, 300); spriteManager.Add(back); pButton pbut = new pButton("New Game", new Vector2(270, 285), new Vector2(350, 30), 0.92f, new Color(99, 139, 228), OnCreateGame); spriteManager.Add(pbut.SpriteCollection); //pbut = new pButton("Join Game", new Vector2(270, 285), new Vector2(140, 30), 0.92f, new Color(99, 139, 228), OnCreateGame); //spriteManager.Add(pbut.SpriteCollection); pbut = new pButton("Back to Menu", new Vector2(10, 285), new Vector2(250, 30), 0.92f, new Color(235, 160, 62), back_OnClick); spriteManager.Add(pbut.SpriteCollection); lobbyUserList = new pText("", 12, new Vector2(560, 65), 1, true, Color.White); lobbyUserList.TextBold = true; spriteManager.Add(lobbyUserList); noMatches = new pText("There are no matches available.\nClick 'New Game' to start a new game!", 20, new Vector2(280, 115), new Vector2(400, 0), 1, true, Color.White, false); noMatches.TextBold = true; noMatches.CurrentColour = Color.TransparentWhite; noMatches.TextAlignment = Alignment.Centre; noMatches.OriginType = OriginTypes.Centre; gameList.spriteManager.Add(noMatches); base.Initialize(); JoinLobby(); LobbyUpdatePending = true; GameBase.LoadComplete(); if (!ChatEngine.IsVisible) { if (ChatEngine.IsFullVisible) { ChatEngine.ToggleFull(); } ChatEngine.Toggle(); } }
public void Send() { ChatEngine.SendMessage("!report " + FormattedReportReason, channel.Name, false); }
public ChatClient() : base(new TcpClient(new IPEndPoint(IPAddress.Parse("127.0.0.1"), int.Parse(ConfigurationManager.AppSettings["port"])))) { _info = new ClientInfo(new Random().Next().ToString()); _chat = new ChatEngine(); }
private void Display() { pDialog dialog = new pDialog(null, false); dialog.spriteManager.HandleOverlayInput = true; dialog.ButtonOffset = new Vector2(50, 60); ChatEngine.RequestUserStats(new List <User>() { User }, true); bool isSelf = User.Name == GameBase.User.Name; dialog.Closed += delegate { ActiveProfiles.Remove(this); }; if (User.IsOsu && !isSelf) { if (GameBase.Mode != OsuModes.Edit && (GameBase.Mode != OsuModes.Play || !GameBase.TestMode)) { dialog.AddOption(User == StreamingManager.CurrentlySpectating ? LocalisationManager.GetString(OsuString.UserProfile_StopSpectating) : LocalisationManager.GetString(OsuString.UserProfile_StartSpectating), Color.YellowGreen, delegate { if (Lobby.Status != LobbyStatus.NotJoined) { NotificationManager.ShowMessage( LocalisationManager.GetString(OsuString.UserProfile_CantSpectate)); return; } if (GameBase.Mode == OsuModes.Play && !InputManager.ReplayMode) { NotificationManager.ShowMessage( LocalisationManager.GetString(OsuString.UserProfile_CantSpectate)); return; } if (User.Name == ConfigManager.sUsername || User == StreamingManager.CurrentlySpectating) { StreamingManager.StopSpectating(true); } else { StreamingManager.StartSpectating(User); } }); } } dialog.AddOption(LocalisationManager.GetString(OsuString.UserProfile_ViewProfile), new Color(58, 110, 165), delegate { GameBase.ProcessStart(User.Id == 0 ? @"https://osu.ppy.sh/wiki/BanchoBot" : String.Format(Urls.USER_PROFILE, User.Id)); }); if (isSelf) { if (GameBase.Mode == OsuModes.Menu && BanchoClient.AllowUserSwitching) { dialog.AddOption(LocalisationManager.GetString(OsuString.UserProfile_SignOut), Color.Orange, delegate { GameBase.Options.PerformLogout(); if (!GameBase.Options.Expanded) { GameBase.ShowLogin(); } }); } dialog.AddOption(LocalisationManager.GetString(OsuString.UserProfile_ChangeAvatar), Color.Orange, delegate { GameBase.ProcessStart(Urls.USER_SET_AVATAR); }); } else { dialog.AddOption(LocalisationManager.GetString(OsuString.UserProfile_StartChat), Color.MediumPurple, delegate { ChatEngine.StartChat(User); }); if (User.IsOsu) { if (MatchSetup.Match != null) { dialog.AddOption(LocalisationManager.GetString(OsuString.UserProfile_Invitetogame), Color.Yellow, delegate { BanchoClient.SendRequest(new Request(RequestType.Osu_Invite, new bInt(User.Id))); NotificationManager.ShowMessageMassive(string.Format(LocalisationManager.GetString(OsuString.ChatEngine_UserInvited), User.Name)); }); } } dialog.AddOption(User.IsFriend ? LocalisationManager.GetString(OsuString.UserProfile_CancelFriendship) : LocalisationManager.GetString(OsuString.UserProfile_AddFriend), Color.Pink, delegate { ChatEngine.ToggleFriend(User, !User.IsFriend); }); if (ShowExtraOptions && User.Id > 0) { dialog.AddOption(LocalisationManager.GetString(OsuString.UserProfile_ReportUser), Color.Red, delegate { UserReportDialog report = new UserReportDialog(User, ChatEngine.activeChannel); GameBase.ShowDialog(report); }); if (ChatEngine.CheckIgnore(User)) { dialog.AddOption(LocalisationManager.GetString(OsuString.UserProfile_UnignoreUser), Color.Gray, delegate { ChatEngine.UnignoreUser(User); }); } else { dialog.AddOption(LocalisationManager.GetString(OsuString.UserProfile_IgnoreUser), Color.Gray, delegate { ChatEngine.IgnoreUser(User); }); } } } dialog.AddOption(LocalisationManager.GetString(OsuString.General_Close), Color.DarkGray, null); if (DisplayedUser.DrawAt(new Vector2(5, 5), true, 0)) { dialog.spriteManager.Add(DisplayedUser.Sprites); } GameBase.ShowDialog(dialog); /*if (User.Id != 0) * { * GameBase.Scheduler.Add(delegate * { * if (!dialog.IsDisplayed) return; * * if (browser == null) * { * GameBase.OnResolutionChange += GameBase_OnResolutionChange; * browser = new pBrowser(null, Vector2.Zero, new Vector2(220, GameBase.WindowManager.Height - 48 * GameBase.WindowManager.Ratio), 0.911f, Color.White); * browser.Disposable = false; * browser.OnLoaded += delegate * { * browser.FadeIn(500); * browser.MoveToRelative(new Vector2(88, 0), 500, EasingTypes.In); * }; * } * * browser.Transformations.Clear(); * browser.CurrentAlpha = 0; * browser.AlwaysDraw = true; * browser.CurrentPosition = new Vector2(-88, 48); * browser.Load(string.Format(Urls.USER_PROFILE_COMPACT, User.Id)); * * dialog.spriteManager.Add(browser); * }, 1000); * }*/ }
internal static void UpdateFrame() { if (GameBase.MenuActive) { return; } MouseHandler.UpdateWindowsMouse(); if (doubleClickTime > 0) { doubleClickTime = (int)Math.Max(0, doubleClickTime - GameBase.ElapsedMilliseconds); } //Initialises the current input/processing loop frame. In the case of 2x replays, up to two frames may be processed in a single game tick. int loopFrame = 0; if (ConfigManager.sMouseSpeed != 1 && GameBase.Mode != Modes.Edit) { //Handle mouse velocity setting. MouseState newState = Mouse.GetState(); if (Game.IsActive && newState.X >= 0 && newState.X < GameBase.WindowWidth && newState.Y >= 0 && newState.Y < GameBase.WindowHeight) { #if newmouse Vector2 newMouseVelocityFloat = new Vector2((float)(mouseVelocityFloat.X + (newState.X - mouseVelocityFloat.X) * ConfigManager.sMouseSpeed), (float)(mouseVelocityFloat.Y + (newState.Y - mouseVelocityFloat.Y) * ConfigManager.sMouseSpeed)); if (mouseVelocityPoint.X != newState.X || mouseVelocityPoint.Y != newState.Y) { mouseVelocityFloat = newMouseVelocityFloat; mouseVelocityPoint = new Point((int)Math.Round(mouseVelocityFloat.X), (int)Math.Round(mouseVelocityFloat.Y)); if (GameBase.WindowRectangle.Contains(mouseVelocityPoint)) { Mouse.SetPosition(mouseVelocityPoint.X, mouseVelocityPoint.Y); } } #else Mouse.SetPosition((int)Math.Round(mouse.X + (newState.X - mouse.X) * ConfigManager.sMouseSpeed), (int)Math.Round(mouse.Y + (newState.Y - mouse.Y) * ConfigManager.sMouseSpeed)); #endif /*MouseHandler.MousePoint.X += (int)((newState.X - mouse.X) * MouseHandler.mouseSpeed); * MouseHandler.MousePoint.Y += (int)((newState.Y - mouse.Y) * MouseHandler.mouseSpeed); * * if (!Player.Playing && !GameBase.graphics.IsFullScreen && ( MouseHandler.MousePoint.X < 0 || MouseHandler.MousePoint.X >= GameBase.WindowWidth || MouseHandler.MousePoint.Y < 0 || MouseHandler.MousePoint.Y >= GameBase.WindowHeight)) * Mouse.SetPosition(MouseHandler.MousePoint.X, MouseHandler.MousePoint.Y); * * mouse = newState;*/ mouse = Mouse.GetState(); MouseHandler.MousePosition.X = mouse.X; MouseHandler.MousePosition.Y = mouse.Y; MouseHandler.MousePoint.X = mouse.X; MouseHandler.MousePoint.Y = mouse.Y; } else { mouse = newState; MouseHandler.MousePosition.X = mouse.X; MouseHandler.MousePosition.Y = mouse.Y; MouseHandler.MousePoint.X = mouse.X; MouseHandler.MousePoint.Y = mouse.Y; } } else { mouse = Mouse.GetState(); MouseHandler.MousePosition.X = mouse.X; MouseHandler.MousePosition.Y = mouse.Y; MouseHandler.MousePoint.X = mouse.X; MouseHandler.MousePoint.Y = mouse.Y; } if (!Player.Playing || !ConfigManager.sMouseDisableButtons) { MouseHandler.mouseLeft = mouse.LeftButton; if (TabletHandler.pendingTabletUpdate) { //Make sure we accept a tablet click even when it is release in under 16ms. MouseHandler.mouseLeft = ButtonState.Pressed; TabletHandler.pendingTabletUpdate = false; } else if (TabletHandler.tabletLeft == ButtonState.Pressed) { MouseHandler.mouseLeft = TabletHandler.tabletLeft; } MouseHandler.mouseRight = mouse.RightButton; MouseHandler.mouseMiddle = mouse.MiddleButton; MouseHandler.mouseBack = mouse.XButton1; if (Game.IsActive && GameBase.Mode != Modes.Edit && GameBase.Mode != Modes.Menu) { if (MouseHandler.mouseBack == ButtonState.Pressed && MouseHandler.mouseBackLast != MouseHandler.mouseBack) { KeyboardHandler.DoKeyPressed(Keys.Escape); } MouseHandler.mouseBackLast = MouseHandler.mouseBack; } } else { MouseHandler.mouseLeft = ButtonState.Released; MouseHandler.mouseRight = ButtonState.Released; } bool runningSlow = false; do { AudioEngine.Update(); lock (StreamingManager.LockReplayScore) { if (ReplayMode && ReplayScore != null && ReplayScore.replay != null) { int count = ReplayScore.replay.Count; if (GameBase.Mode == Modes.Play && Player.currentScore != null && count > 0 && ReplayFrame < count - 2 && (ReplayToEnd || !ReplayStreaming || ReplayScore.replay[count - 1].time - AudioEngine.Time > 1000)) { Buffering = false; /* if (ReplayStreaming && !Player.IsFailed && Player.Paused) * Buffering = false; * else * {*/ if (ReplayFrame < count - 2 && (ReplayScore.replay[ReplayFrame + 1].time <= AudioEngine.Time)) // && (Math.Abs(ReplayScore.replay[ReplayFrame + 1].time - AudioEngine.Time) < 10 || AudioEngine.Time - ReplayScore.replay[ReplayFrame + 1].time > 0)) { ReplayFrame++; ReplayOk = true; } else { ReplayOk = false; } runningSlow = AudioEngine.Time - ReplayScore.replay[ReplayFrame].time > 16 && ReplayOk; //skip unnecessary frames if (runningSlow) { while (ReplayFrame < count - 2 && !ReplayScore.replay[ReplayFrame].mouseLeft && !ReplayScore.replay[ReplayFrame].mouseRight && ReplayScore.replay[ReplayFrame + 1].time <= AudioEngine.Time && ReplayScore.replay[ReplayFrame].mouseLeft == leftButtonLastBool && ReplayScore.replay[ReplayFrame].mouseRight == rightButtonLastBool && ReplayScore.replay[ReplayFrame].buttonState == lastButtonState && !Player.IsSpinning) { Console.WriteLine("replay frame {0} skipped!!!!", ReplayFrame); ReplayFrame++; } } Vector2 pos; if (MouseButtonInstantRelease) { leftButton1i = false; leftButton2i = false; rightButton1i = false; rightButton2i = false; leftButton = ButtonState.Released; rightButton = ButtonState.Released; } if (ReplayOk && (ReplayScore.replay[ReplayFrame].mouseLeft || ReplayScore.replay[ReplayFrame].mouseRight || ReplayScore.replay[ReplayFrame].buttonState != lastButtonState || Player.IsSpinning)) { AudioEngine.Time = ReplayScore.replay[ReplayFrame].time; leftButton1i = (!MouseButtonInstantRelease || !leftButton1) && ReplayScore.replay[ReplayFrame].mouseLeft1; leftButton1 = ReplayScore.replay[ReplayFrame].mouseLeft1; leftButton2i = (!MouseButtonInstantRelease || !leftButton2) && ReplayScore.replay[ReplayFrame].mouseLeft2; leftButton2 = ReplayScore.replay[ReplayFrame].mouseLeft2; rightButton1i = (!MouseButtonInstantRelease || !rightButton1) && ReplayScore.replay[ReplayFrame].mouseRight1; rightButton1 = ReplayScore.replay[ReplayFrame].mouseRight1; rightButton2i = (!MouseButtonInstantRelease || !rightButton2) && ReplayScore.replay[ReplayFrame].mouseRight2; rightButton2 = ReplayScore.replay[ReplayFrame].mouseRight2; leftButton = leftButton1i || leftButton2i ? ButtonState.Pressed : ButtonState.Released; rightButton = rightButton1i || rightButton2i ? ButtonState.Pressed : ButtonState.Released; pos = GameBase.GamefieldToDisplay( new Vector2(ReplayScore.replay[ReplayFrame].mouseX, ReplayScore.replay[ReplayFrame].mouseY)); // *WindowWidth / ReplayScore.resolution; lastButtonState = ReplayScore.replay[ReplayFrame].buttonState; } else if (ReplayScore.replay[ReplayFrame].time == ReplayScore.replay[ReplayFrame + 1].time) { pos = GameBase.GamefieldToDisplay( new Vector2(ReplayScore.replay[ReplayFrame].mouseX, ReplayScore.replay[ReplayFrame].mouseY)); } else if (ReplayScore.replay[ReplayFrame].time >= AudioEngine.Time) { int p1 = Math.Max(0, ReplayFrame - 1); int p2 = ReplayFrame; pos = Vector2.Lerp( GameBase.GamefieldToDisplay( new Vector2(ReplayScore.replay[p1].mouseX, ReplayScore.replay[p1].mouseY)), GameBase.GamefieldToDisplay( new Vector2(ReplayScore.replay[p2].mouseX, ReplayScore.replay[p2].mouseY)), Math.Max(0, ( 1 - (float)(ReplayScore.replay[p2].time - AudioEngine.Time) / (ReplayScore.replay[p2].time - ReplayScore.replay[p1].time)))); if (!MouseButtonInstantRelease) { leftButton = ReplayScore.replay[p2].mouseLeft ? ButtonState.Pressed : ButtonState.Released; rightButton = ReplayScore.replay[p2].mouseRight ? ButtonState.Pressed : ButtonState.Released; } } else { int p1 = ReplayFrame; int p2 = Math.Min(count - 1, ReplayFrame + 1); pos = Vector2.Lerp( GameBase.GamefieldToDisplay( new Vector2(ReplayScore.replay[p1].mouseX, ReplayScore.replay[p1].mouseY)), GameBase.GamefieldToDisplay( new Vector2(ReplayScore.replay[p2].mouseX, ReplayScore.replay[p2].mouseY)), Math.Max(0, 1 - ((float)(ReplayScore.replay[p2].time - AudioEngine.Time) / (ReplayScore.replay[p2].time - ReplayScore.replay[p1].time)))); if (!MouseButtonInstantRelease) { leftButton = ReplayScore.replay[p1].mouseLeft ? ButtonState.Pressed : ButtonState.Released; rightButton = ReplayScore.replay[p1].mouseRight ? ButtonState.Pressed : ButtonState.Released; } } CursorPosition = pos; CursorPoint = new Point((int)CursorPosition.X, (int)CursorPosition.Y); Player.Playing = false; } else if (ReplayStreaming) { Player.Playing = false; if (ReplayToEnd) { if (Player.Paused && !Player.Failed) { Buffering = false; } if (Player.ReplayBufferText != null && Player.Failed) { Player.ReplayBufferText.Text = "User Failed"; } } else /*if (HitObjectManager.hitObjects != null && * AudioEngine.Time >= HitObjectManager.hitObjects[0].StartTime - HitObjectManager.PreEmpt)*/ { Buffering = true; float percent; if (count == 0) { percent = 0; } else { percent = MathHelper.Clamp( (float)(ReplayScore.replay[count - 1].time - AudioEngine.Time) / 10, 0, 100); } if (Player.ReplayBufferText != null) { if (Player.Failed) { Player.ReplayBufferText.Text = "Failed"; } else { Player.ReplayBufferText.Text = string.Format("Buffering {0:0.0}%...", percent); } } } } } } if (!ReplayMode) { //todo: move this to the outer loop? Player.Playing = GameBase.Mode == Modes.Play && AudioEngine.Time >= Player.skipBoundary && !Player.Failed && !Player.Paused && !EventManager.BreakMode && Game.IsActive && !Player.currentScore.pass; if (Player.Playing && !GameBase.graphics.IsFullScreen) { if (Cursor.Clip == cursorOriginalBounds) { Cursor.Clip = GameBase.Form.RectangleToScreen(GameBase.Form.ClientRectangle); } } else if (Cursor.Clip != cursorOriginalBounds) { Cursor.Clip = cursorOriginalBounds; } CursorPosition = MouseHandler.MousePosition; CursorPoint = MouseHandler.MousePoint; leftButton = MouseHandler.mouseLeft; leftButton1i = leftButton == ButtonState.Pressed && !leftButtonLastBool; leftButton1 = leftButton == ButtonState.Pressed; leftButton2i = leftButton == ButtonState.Pressed && !leftButtonLastBool; leftButton2 = leftButton == ButtonState.Pressed; rightButton = MouseHandler.mouseRight; rightButton1i = rightButton == ButtonState.Pressed && !rightButtonLastBool; rightButton1 = rightButton == ButtonState.Pressed; rightButton2i = rightButton == ButtonState.Pressed && !rightButtonLastBool; rightButton2 = rightButton == ButtonState.Pressed; } //Update mouse cursor position, except in editor mode where we use the windows cursor. if (!GameBase.MenuVisible) { if (spriteCursor.IsVisible && GameBase.SixtyFramesPerSecondFrame) { pSprite trail = new pSprite(SkinManager.Load("cursortrail"), FieldTypes.WindowScaleOnly, (SkinManager.Current.CursorCentre ? OriginTypes.Centre : OriginTypes.TopLeft), ClockTypes.Game, CursorPosition, spriteCursor.Depth - 0.001F, false, Color.White); trail.FadeOut(150); trail.CurrentScale = spriteCursor.CurrentScale; if (SkinManager.Current.CursorTrailRotate) { trail.CurrentRotation = spriteCursor.CurrentRotation; } GameBase.spriteManagerOverlay.Add(trail); } spriteCursor.CurrentPosition = CursorPosition; } //Only do actions on the input if the window is active. if (Game.IsActive || ReplayMode) { //Mouse wheel MouseHandler.MouseWheelHandled = false; if (mouse.ScrollWheelValue != scrollWheel) { /*if (ChatEngine.IsVisible) * { * if (mouse.ScrollWheelValue > scrollWheel) * ChatEngine.MouseHandler_OnMouseWheelUp(null, null); * else * ChatEngine.MouseHandler_OnMouseWheelDown(null, null); * } * else * {*/ if (mouse.ScrollWheelValue > scrollWheel) { MouseHandler.DoMouseWheelUp(); } else { MouseHandler.DoMouseWheelDown(); } /*}*/ scrollWheel = mouse.ScrollWheelValue; } try { keyboard = Keyboard.GetState(); } catch (InvalidOperationException) { } if (!ReplayMode) { MouseViaKeyboardControls(); } Keys[] newKeys = (Keys[])keyboard.GetPressedKeys().Clone(); if (pressedKeys != null && !keyboard.IsKeyDown(Keys.Scroll)) { KeyboardHandler.ControlPressed = (keyboard.IsKeyDown(Keys.LeftControl) || keyboard.IsKeyDown(Keys.RightControl)); KeyboardHandler.AltPressed = (keyboard.IsKeyDown(Keys.LeftAlt) || keyboard.IsKeyDown(Keys.RightAlt)); KeyboardHandler.ShiftPressed = (keyboard.IsKeyDown(Keys.LeftShift) || keyboard.IsKeyDown(Keys.RightShift)); for (int i = 0; i < newKeys.Length; i++) { Keys k = newKeys[i]; bool bFound = false; for (int j = 0; j < pressedKeys.Length; j++) { if (k == pressedKeys[j]) { bFound = true; break; } } if (!bFound && GameBase.FadeState != FadeStates.FadeOut) { repeatTickCurrent = -100; BanchoClient.Activity(); GameBase.KeyboardHandler_OnKeyPressed(null, k); if (ChatEngine.IsVisible) { string ks = k.ToString(); if (ks.Length == 2 && ks[0] == 'F' && ks[1] >= '0' && ks[1] <= '9') { KeyboardHandler.DoKeyPressed(k); } else { ChatEngine.GameBase_OnKeyRepeat(null, k, true); } } else if (GameBase.ActiveDialog != null) { GameBase.ActiveDialog.HandleKey(k); } else if (!thisBlockKey) { KeyboardHandler.DoKeyPressed(k); } } } } pressedKeys = newKeys; repeatTickCurrent += GameBase.ElapsedMilliseconds; if (repeatTickCurrent >= repeatTickRate) { repeatTickCurrent -= repeatTickRate; if (pressedKeys != null && !keyboard.IsKeyDown(Keys.Scroll)) { foreach (Keys k in newKeys) { bool bFound = false; foreach (Keys k2 in pressedKeys) { if (k == k2) { bFound = true; break; } } if (ChatEngine.IsVisible) { ChatEngine.GameBase_OnKeyRepeat(null, k, false); } else if (GameBase.ActiveDialog == null && bFound && GameBase.FadeState == FadeStates.Idle && !thisBlockKey) { KeyboardHandler.DoOnKeyRepeat(k); } } } if (leftButton == ButtonState.Pressed && MouseHandler.MouseDown && GameBase.FadeState != FadeStates.FadeOut) { MouseHandler.DoOnClickRepeat(); } } MouseHandler.actualClickRegistered = (MouseHandler.mouseLeft == ButtonState.Pressed && mouseLeftActualPrev != ButtonState.Pressed) || (MouseHandler.mouseRight == ButtonState.Pressed && mouseRightActualPrev != ButtonState.Pressed); if (leftButtonLast != leftButton || rightButtonLast != rightButton) { MouseHandler.LastButton2 = MouseHandler.LastButton; MouseHandler.LastButton = MouseHandler.MouseDownButton; MouseHandler.MouseDownButton = MouseButtons.None; if (leftButton == ButtonState.Pressed) { MouseHandler.MouseDownButton |= MouseButtons.Left; } if (rightButton == ButtonState.Pressed) { MouseHandler.MouseDownButton |= MouseButtons.Right; } } //We don't have a replay click, so lets check for physical mouse clicks. //In the case that there is a replay and actual click the same frame, doOnClick will be called only once (above). if (MouseHandler.actualClickRegistered && ReplayMode && GameBase.FadeState != FadeStates.FadeOut) { bool old = MouseHandler.gamePressedRegistered; MouseHandler.gamePressedRegistered = false; MouseHandler.DoOnClick(); MouseHandler.gamePressedRegistered = old; } leftCond = leftButton == ButtonState.Pressed && leftButtonLast != leftButton; rightCond = rightButton == ButtonState.Pressed && rightButtonLast != rightButton; middleCond = MouseHandler.mouseMiddle == ButtonState.Pressed && mouseMiddlePrev != MouseHandler.mouseMiddle; MouseHandler.gameClickRegistered = false; if (leftCond || rightCond || middleCond) { if (!middleCond) { if (SkinManager.Current.CursorExpand) { spriteCursor.Transformations.RemoveAll( delegate(Transformation tr) { return(tr.Type != TransformationType.Rotation); }); Transformation t = new Transformation(TransformationType.Scale, 1, 1.3F, GameBase.Time, GameBase.Time + 100); t.Easing = EasingTypes.In; spriteCursor.Transformations.Add(t); } MouseHandler.clickPosition = new Vector2(mouse.X, mouse.Y); MouseHandler.gamePressedRegistered = true; MouseHandler.gameClickRegistered = true; if (doubleClickTime > 0 && GameBase.FadeState != FadeStates.FadeOut) { MouseHandler.DoOnDoubleClick(); } } if (GameBase.FadeState != FadeStates.FadeOut) { MouseHandler.DoOnClick(); repeatTickCurrent = 0; doubleClickTime = 250; } } else if (leftButton == ButtonState.Released && rightButton == ButtonState.Released && MouseHandler.gamePressedRegistered) { if (SkinManager.Current.CursorExpand) { spriteCursor.Transformations.RemoveAll( delegate(Transformation tr) { return(tr.Type != TransformationType.Rotation); }); Transformation t = new Transformation(TransformationType.Scale, spriteCursor.CurrentScale, 1, GameBase.Time, GameBase.Time + 100); t.Easing = EasingTypes.In; spriteCursor.Transformations.Add(t); } MouseHandler.gamePressedRegistered = false; MouseHandler.DoOnClickUp(); } if (MouseHandler.mouseLeft == ButtonState.Pressed && GameBase.FadeState != FadeStates.FadeOut) { MouseHandler.MouseDown = true; if (mouse.X != MouseHandler.clickPosition.X || mouse.Y != MouseHandler.clickPosition.Y) { MouseHandler.DoOnDrag(); } } else { MouseHandler.MouseDown = false; if (IsDragging) { MouseHandler.DoOnEndDrag(); } } } else { leftButton = ButtonState.Released; rightButton = ButtonState.Released; } GameBase.Instance.UpdateChildren(); leftButtonLast = leftButton; rightButtonLast = rightButton; leftButtonLastBool = leftButton == ButtonState.Pressed; rightButtonLastBool = rightButton == ButtonState.Pressed; mouseLeftActualPrev = MouseHandler.mouseLeft; mouseRightActualPrev = MouseHandler.mouseRight; mouseMiddlePrev = MouseHandler.mouseMiddle; keyboardLast = keyboard; thisBlockKey = false; } while (ReplayMode && ((ReplayModeFF && loopFrame++ < 1) || (runningSlow && loopFrame++ < 4))); }
public ChatService(ChatEngine engine) { this.engine = engine; }
public SocketServer() { var wssv = new HttpServer(8140); GameEngine gameEngine = new GameEngine(); ChatEngine chatEngine = new ChatEngine(); wssv.AddWebSocketService<GameService>("/game", () => new GameService(gameEngine)); wssv.AddWebSocketService<ChatService>("/chat", () => new ChatService(chatEngine)); wssv.Start(); Console.ReadKey(true); wssv.Stop(); }