Пример #1
0
        public SpectateSessionDialog(ServerWindow parent, ISession session)
        {
            TransientFor = parent;

            this.Build();

            this.session = session;
        }
Пример #2
0
        public ReplacePlayerDialog(ServerWindow parent, ISession session, IPlayer player)
        {
            TransientFor = parent;

            this.Build();

            this.session = session;
            this.player = player;
        }
Пример #3
0
        public SessionWindow(ServerWindow parent)
            : base(Gtk.WindowType.Toplevel)
        {
            TransientFor = parent;

            this.Build();
            this.chatSendButton.TooltipMarkup = Catalog.GetString("Sends the message");
            this.startGameButton.TooltipMarkup = Catalog.GetString("Starts the game in this session");
            this.disconnectButton.TooltipMarkup = Catalog.GetString("Disconnects from the session");
            this.endSessionButton.TooltipMarkup = Catalog.GetString("Ends the session");

            listener = new EventListener(this);
            ConnectionManager.SessionEventListener.AddListener((IPlayerSessionEventListener)listener);
            ConnectionManager.SessionEventListener.AddListener((ISpectatorSessionEventListener)listener);
            ConnectionManager.OnGameConnected += () => {
                Gdk.Threads.Enter();
                startGameButton.Sensitive = false;
                Gdk.Threads.Leave();
            };

            ISession session = ConnectionManager.Session;
            IPlayerSessionControl playerControl = ConnectionManager.PlayerSessionControl;
            if(playerControl != null && playerControl.Player.IsCreator)
            {
                if(session.State != SessionState.Playing && session.State != SessionState.Ended)
                    startGameButton.Sensitive = true;
                else
                    startGameButton.Sensitive = false;
                endSessionButton.Sensitive = true;
            }
            else
            {
                startGameButton.Sensitive = false;
                endSessionButton.Sensitive = false;
            }
            Gtk.TextTag playerTag = new Gtk.TextTag("player");
            playerTag.Weight = Pango.Weight.Bold;
            playerTag.Foreground = "blue";

            Gtk.TextTag spectatorTag = new Gtk.TextTag("spectator");
            spectatorTag.Weight = Pango.Weight.Bold;
            spectatorTag.Foreground = "yellow";

            chatView.Buffer.TagTable.Add(playerTag);
            chatView.Buffer.TagTable.Add(spectatorTag);

            sessionInfoWidget.Session = ConnectionManager.Session;
        }
Пример #4
0
        public CreateSessionDialog(ServerWindow parent)
        {
            TransientFor = parent;

            this.Build();
        }
Пример #5
0
        public MainWindow()
            : base(Gtk.WindowType.Toplevel)
        {
            this.Build();

            ConnectionManager.OnServerConnected += () => {
                serverWindow = new ServerWindow(this);
                serverWindow.DeleteEvent += (o, args) => {
                    serverWindowAction.Active = false;
                    args.RetVal = true;
                };
                serverWindow.Show();
                connectAction.Sensitive = false;
                disconnectAction.Sensitive = true;
                serverWindowAction.Sensitive = true;
                serverWindowAction.Active = true;
            };
            ConnectionManager.OnServerDisconnected += () => {
                Gtk.Application.Invoke(delegate {
                    Gdk.Threads.Enter();
                    serverWindow.Destroy();
                    serverWindow = null;
                    connectAction.Sensitive = true;
                    disconnectAction.Sensitive = false;
                    serverWindowAction.Sensitive = false;
                    serverWindowAction.Active = false;
                    Gdk.Threads.Leave();
                });
            };
            ConnectionManager.OnSessionConnected += () => {
                Gtk.Application.Invoke(delegate {
                    Gdk.Threads.Enter();
                    sessionWindow = new SessionWindow(serverWindow);
                    sessionWindow.DeleteEvent += (o, args) => {
                        sessionWindowAction.Active = false;
                        args.RetVal = true;
                    };
                    sessionWindowAction.Sensitive = true;
                    sessionWindowAction.Active = true;
                    serverWindowAction.Active = false;

                    sessionDisconnectAction.Sensitive = true;
                    ISession session = ConnectionManager.Session;
                    IPlayerSessionControl playerControl = ConnectionManager.PlayerSessionControl;
                    if(playerControl != null && playerControl.Player.IsCreator)
                    {
                        if(session.State != SessionState.Playing && session.State != SessionState.Ended)
                            startGameAction.Sensitive = true;
                        else
                            startGameAction.Sensitive = false;
                        endSessionAction.Sensitive = true;
                    }
                    else
                    {
                        startGameAction.Sensitive = false;
                        endSessionAction.Sensitive = false;
                    }
                    Gdk.Threads.Leave();
                });
            };
            ConnectionManager.OnSessionDisconnected += () => {
                Gtk.Application.Invoke(delegate {
                    Gdk.Threads.Enter();
                    sessionWindow.Destroy();
                    sessionWindow = null;
                    sessionWindowAction.Sensitive = false;
                    sessionWindowAction.Active = false;
                    serverWindowAction.Active = true;

                    sessionDisconnectAction.Sensitive = false;
                    startGameAction.Sensitive = false;
                    endSessionAction.Sensitive = false;
                    Gdk.Threads.Leave();
                });
            };
            ConnectionManager.OnGameConnected += () => {
                if(Config.Instance.GetBoolean("Client.AutoHideSWWhilePlaying", true))
                    Gtk.Application.Invoke(delegate {
                        Gdk.Threads.Enter();
                        sessionWindowAction.Active = false;
                        NotifyUrgent();
                        Gdk.Threads.Leave();
                    });
            };
            listener = new EventListener(this);
            ConnectionManager.SessionEventListener.AddListener((IPlayerSessionEventListener)listener);
        }