Example #1
0
 public override void AdjustDrawPos(ToClient toDrawPos)
 {
     base.AdjustDrawPos(toDrawPos);
     foreach (LinePoint pt in _points)
     {
         pt.DrawPos = toDrawPos(pt.Mm1000Pos);
     }
 }
Example #2
0
 private void RequestSignal(ToClient signal)
 {
     lock (this)
     {
         BinaryWriter writer = new BinaryWriter(_Pipe, System.Text.Encoding.Unicode, true);
         try
         {
             writer.Write((Int32)signal);
         }
         catch (Exception e)
         {
             Console.WriteLine(e);
             return;
         }
     }
 }
Example #3
0
 public static void init()
 {
     ToServer.init();
     ToClient.init();
 }
Example #4
0
 private void Send(ToClient mess, byte p)
 {
     if (p == 0 || p == 3)
     {
         foreach (WebSocket el in viewers)
             Send(mess, el);
     }
     if (p == 0)
     {
         for (int i = 0; i < 2; i++)
         {
             if (players[i] != null)
                 Send(mess, players[i]);
         }
     }
     else if (p == 1 || p == 2)
         if (players[p - 1] != null)
             Send(mess, players[p - 1]);
 }
Example #5
0
 private void PhaseChange(PhaseType phaseType, byte p, byte channel = 0)
 {
     phase = phaseType;
     player = p;
     ToClient mes = new ToClient
     {
         action = 1,
         player = p,
         phase = phaseType
     };
     if (phase == PhaseType.Asking)
     {
         mes.agressorx = inask[p - 1].x;
         mes.agressory = inask[p - 1].y;
         mes.targetx = inask[Opponent(p) - 1].x;
         mes.targety = inask[Opponent(p) - 1].y;
     }
     Send(mes, channel);
     if (movepassed && phase != PhaseType.Attack)
         movepassed = false;
     inverted = false;
 }
Example #6
0
 internal void SendState(WebSocket client, byte p)
 {
     ToClient mess = new ToClient();
     mess.action = 3;
     mess.changex = new List<int>();
     mess.changey = new List<int>();
     mess.changefig = new List<int>();
     if (phase != PhaseType.Displacing)
         for (int i = 0; i < 14; i++)
         {
             for (int j = 0; j < 14; j++)
             {
                 Fig fig = field[i, j];
                 if (fig.fig != FigType.Null) {
                     mess.changex.Add(i);
                     mess.changey.Add(j);
                     if (p == 0)
                         mess.changefig.Add((int)fig.fig + fig.player * 100);
                     else {
                         if (fig.player == p) {
                             mess.changefig.Add((int)fig.fig);
                         } else if (fig.player == 0) {
                             mess.changefig.Add((int)FigType.Sinking);
                         } else {
                             mess.changefig.Add((int)FigType.Unknown);
                         }
                     }
                 }
             }
         }
     Send(mess, client);
     PhaseChange(phase, player, p);
     lock (event_log)
     {
         foreach (Event evt in event_log)
             Send(new ToClient
         {
             action = 2,
             log = evt
         }, client);
     }
 }
Example #7
0
 public void ProcessViewerRequest(string text, byte p)
 {
     lock (this_lock) {
         ToClient chat = new ToClient();
         chat.action = 4;
         chat.player = 3;
         chat.message = text;
         Send(chat, 3);
     }
 }
Example #8
0
        public void ProcessRequest(string text, byte p)
        {
            FromClient mess = JsonConvert.DeserializeObject<FromClient>(text);
            lock (this_lock) {
                try {
                    p++;
                    switch (mess.action) {
                    case 0:
                        ToClient chat = new ToClient();
                        chat.action = 4;
                        chat.player = p;
                        chat.message = mess.message;
                        Send(chat, 0);
                        break;
                    case 1:
                        if (mess.phase != phase)
                            throw new IllegalActionException("Это действие невозможно в данный момент");
                        switch (mess.phase) {
                        case PhaseType.Displacing:
                            Displace(mess.field, p);
                            break;
                        case PhaseType.Move:
                            if (mess.pass) {
                                if (player == p) {
                                    movepassed = true;
                                    PhaseChange(PhaseType.Attack, p);
                                }
                            } else if (mess.isshot) {
                                Shot(mess.fromx, mess.fromy, mess.tox, mess.toy, p, mess.isaoe);
                            } else
                                Move(mess.fromx, mess.fromy, mess.tox, mess.toy, p);
                            break;
                        case PhaseType.Attack:
                            if (mess.pass) {
                                if (player == p) {
                                    if (movepassed)
                                        PhaseChange(PhaseType.Move, p);
                                    else {
                                        PhaseChange(PhaseType.Move, Opponent(p));
                                    }
                                }

                            } else
                                Attack(mess.fromx, mess.fromy, mess.tox, mess.toy, p);
                            break;
                        case PhaseType.Asking:
                            AttackAnswering(mess.blockstrength, mess.blocktype, mess.blockx, mess.blocky, p);
                            break;
                        }
                        if (phase != PhaseType.Asking && phase != PhaseType.Displacing)
                            Flush();
                        break;
                    case 3:
                        if (!started)
                            break;
                        Log(new Event
                        {
                            type = EventType.End,
                            player = p,
                            win = false
                        }
                        );
                        Loose(p);
                        break;
                    case 4:
                        if (!started)
                            break;
                        if (player_offered_draw == Opponent(p)) {
                            PhaseChange(PhaseType.Finished, 0);
                            NotifyServer("end", game_id.ToString(), "0");
                            Finish();
                        } else
                            player_offered_draw = p;
                        Log(new Event
                        {
                            type = EventType.End,
                            player = p,
                            win = true
                        }
                        );
                        break;
                    }
                } catch (IllegalActionException ex) {
                    Send(new ToClient
                {
                    action = 4,
                    message = "<span style=\"color: red;\">Действие невозможно: </span>" + ex.Message,
                    player = 0
                }, p);
                }
            }
        }
Example #9
0
 private void Send(ToClient mess, WebSocket target)
 {
     string text = JsonConvert.SerializeObject(mess, Formatting.Indented, new JsonSerializerSettings
     {
         DefaultValueHandling = DefaultValueHandling.Ignore
     });
     target.Send(text);
 }