예제 #1
0
        private void onCoreStateChanged(JudgeCode code)
        {
            switch (code)
            {
            case JudgeCode.Started:
                isEnd = false;
                onStarted();
                break;

            case JudgeCode.Ended:
                if (string.IsNullOrEmpty(core.WinnerToken))
                {
                    onEndedUIThread(Properties.Resources.TieEnded);
                }
                break;

            case JudgeCode.Active:
                onActive(core.IsHostActive);
                break;

            case JudgeCode.NewWinner:
                string winner = core.WinnerToken == core.HostToken ? hostName : joinName;
                onEndedUIThread(winner + " " + Properties.Resources.WinTheGame);
                break;
            }
        }
예제 #2
0
 private void raiseJudged(string token, JudgeCode code, object extra = null)
 {
     lock (judgeLockHelper)
     {
         OnJudged?.Invoke(token, code, extra);
     }
 }
예제 #3
0
 public void OnStateJudge(JudgeCode code)
 {
     if (IsEnded)
     {
         Useful = false;
     }
 }
예제 #4
0
 public override void OnBasicJudge(string token, JudgeCode code)
 {
     base.OnBasicJudge(token, code);
     if (code == JudgeCode.Active)
     {
         analysis(ActiveToken);
     }
 }
예제 #5
0
 public void OnBasicJudge(string token, JudgeCode code)
 {
     if (code == JudgeCode.Joined && token != HostToken)
     {
         if (string.IsNullOrEmpty(JoinToken))
         {
             JoinToken = token;
         }
     }
 }
예제 #6
0
 public override void OnJudgeInput(string token, JudgeCode code, IntPoint p)
 {
     base.OnJudgeInput(token, code, p);
     if (code == JudgeCode.Input)
     {
         Board?.Dispatcher.Invoke(() => Board.DrawChess(p.X, p.Y, IsHostActive));
     }
     else if (code == JudgeCode.Undo)
     {
         Board?.Dispatcher.Invoke(() => Board.RemoveChess(p.X, p.Y));
     }
 }
예제 #7
0
 private void onStateJudge(JudgeCode code, bool started)
 {
     IsStarted = started;
     IsEnded   = !started;
     if (IsStarted)
     {
         WinnerToken = string.Empty;
     }
     Debug.WriteLine("State " + started);
     raiseStateChange(code);
     resolver.OnStateJudge(code);
 }
예제 #8
0
        private void onJudged(string judgeToken, JudgeCode code, object extra)
        {
            string proxyToken = findCastToken(judgeToken);
            var    data       = new List <object>()
            {
                code
            };

            if (extra != null)
            {
                data.Add(extra);
            }

            BroadcastJudgeMsg(proxyToken, data.ToArray());
        }
예제 #9
0
 public virtual void OnBasicJudge(string token, JudgeCode code)
 {
     if (code == JudgeCode.Joined)
     {
         int boxId = Judges.GetBoxId(token);
         if (token == HostToken)
         {
             hostBoxId = boxId;
         }
         else if (token == JoinToken)
         {
             joinBoxId = boxId;
         }
     }
 }
예제 #10
0
        public void OnJudge(string token, object[] data)
        {
            int size = ProxyEx.ValidSize(data);

            if (size < 1)
            {
                return;
            }
            JudgeCode code = (JudgeCode)data[0];

            switch (code)
            {
            case JudgeCode.Started:
                onStateJudge(code, true);
                break;

            case JudgeCode.Ended:
                onStateJudge(code, false);
                break;

            case JudgeCode.Active:
                ActiveToken = token;
                raiseStateChange(code);
                break;

            case JudgeCode.NewWinner:
                WinnerToken = token;
                raiseStateChange(code);
                break;

            case JudgeCode.Reset:
                raiseStateChange(code);
                resolver.OnStateJudge(code);
                break;
            }
            if (size == 2 && (code == JudgeCode.Input || code == JudgeCode.Undo))
            {
                var      input = (InputAction)data[1];
                IntPoint p     = (IntPoint)input.Data;
                resolver.OnJudgeInput(token, code, p);
            }
            resolver.OnBasicJudge(token, code);
            Debug.WriteLine("[Judge]-[" + code + "] " + token);
        }
예제 #11
0
        public virtual void OnStateJudge(JudgeCode code)
        {
            switch (code)
            {
            case JudgeCode.Reset:
                Useful = true;
                break;

            case JudgeCode.Started:
                if (Board != null)
                {
                    Board.Dispatcher.Invoke(() => Board.ClearChess());
                }
                Useful = true;
                break;

            case JudgeCode.Ended:
                Useful = false;
                break;
            }
        }
예제 #12
0
 public override void OnJudgeInput(string token, JudgeCode code, IntPoint p)
 {
     base.OnJudgeInput(token, code, p);
     Board?.Dispatcher.Invoke(() => Board.DrawChess(p.X, p.Y, IsHostActive));
 }
예제 #13
0
 public void RaiseStateChange(JudgeCode code)
 {
     StateChanged?.Invoke(code);
 }
예제 #14
0
 public void OnJudgeInput(string token, JudgeCode code, IntPoint p)
 {
     board?.Dispatcher.Invoke(() => board.DrawChess(p.X, p.Y, IsHostActive));
 }
예제 #15
0
 public virtual void OnJudgeInput(string token, JudgeCode code, IntPoint p)
 {
 }
예제 #16
0
 private void raiseStateChange(JudgeCode code)
 {
     resolver.RaiseStateChange(code);
 }