示例#1
0
        private void ElementChanged(object sender, ElementChangingEventArgs e)
        {
            var x     = e.X;
            var y     = e.Y;
            var value = e.Value;

            if (x > 8 || y > 8 || value > 9 || _data[x, y].IsPermanent)
            {
                return;
            }

            _data[x, y].Value = value;

            IMessage message = new ElementChangedMessage(x, y, value);

            BroadcastMessage(message);

            if (SudokuFieldIsFull())
            {
                if (Check())
                {
                    IMessage messageWin = new WinMessage();
                    BroadcastMessage(messageWin);
                }
            }
        }
示例#2
0
 private void ProcessMessage(int messageId)
 {
     if (messageId == ELEMENT_CHANGE_MESSAGE_ID)
     {
         var stream = new NetworkStream(_socket);
         var bytes  = stream.ReadNBytes(ELEMENT_CHANGE_MESSAGE_SIZE);
         var args   = ElementChangingEventArgs.Deserialize(this, bytes);
         ElementChanging?.Invoke(this, args);
     }
 }
示例#3
0
 private void ReportChanging(ElementChangingEventArgs args)
 {
     if (IsSystemEvent(args))
     {
         return;
     }
     else
     {
         using (ExposeReadOnly())
         {
             foreach (var kvp in _changingListeners)
             {
                 if (kvp.Key(args))
                 {
                     kvp.Value(args);
                 }
             }
         }
     }
 }