public override void AdjustDrawPos(ToClient toDrawPos) { base.AdjustDrawPos(toDrawPos); foreach (LinePoint pt in _points) { pt.DrawPos = toDrawPos(pt.Mm1000Pos); } }
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; } } }
public static void init() { ToServer.init(); ToClient.init(); }
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]); }
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; }
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); } }
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); } }
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); } } }
private void Send(ToClient mess, WebSocket target) { string text = JsonConvert.SerializeObject(mess, Formatting.Indented, new JsonSerializerSettings { DefaultValueHandling = DefaultValueHandling.Ignore }); target.Send(text); }