void read(Link link, Data data) { if (data.Intern) { var cmd = StringEnum <InternalCommands>(data.Cmds[0]); link.debugCommand(false, link, cmd); if (cmd == InternalCommands.connect) { write(link, true, EnumString(InternalCommands.ok)); lock (link) { link.ID = SGuid.Parse(data.Cmds[1]); link.state = LinkStates.ready; joinClient?.Invoke(link.ID); } debugNotice(this); } if (cmd == InternalCommands.disconnect && link.state == LinkStates.ready) { disconnect(link, StringEnum <LeaveReason>(data.Cmds[1]), data.Cmds[2]); } } else { write(link, true, EnumString(InternalCommands.ok)); foreach (string cmd in data.Cmds) { received(Directive.Parse(cmd)); } } }
void read(Data data) { if (data.Intern) { var cmd = StringEnum <InternalCommands>(data.Cmds[0]); link.debugCommand(false, link, cmd); if (cmd == InternalCommands.ok && link.state == LinkStates.creating) { lock (link) link.state = LinkStates.ready; connected?.Invoke(true); debugNotice(this); } if (cmd == InternalCommands.disconnect && link.state == LinkStates.ready) { _disconnect(StringEnum <LeaveReason>(data.Cmds[1]), data.Cmds[2]); } } else { write(true, EnumString(InternalCommands.ok)); foreach (string cmd in data.Cmds) { received(Directive.Parse(cmd)); } } }