public void Close() { if (state == PlayState.LOBBY) { lobbyConn.Close(); } else if (state == PlayState.GAME) { gameConn.Close(); } state = PlayState.CLOSE; }
internal async Task Close() { try { await lobbyConn.Close(); } catch (Exception e) { Logger.Error(e.Message); } }
internal async Task Join() { if (state == State.Joining || state == State.Lobby) { return; } state = State.Joining; LobbyInfo lobbyInfo; try { lobbyInfo = await Client.lobbyService.Authorize(); } catch (Exception e) { state = State.Init; throw e; } try { lobbyConn = new LobbyConnection(); await lobbyConn.Connect(Client.AppId, lobbyInfo.Url, Client.GameVersion, Client.UserId, lobbyInfo.SessionToken); await lobbyConn.JoinLobby(); lobbyConn.OnMessage = (cmd, op, body) => { switch (cmd) { case CommandType.Lobby: switch (op) { case OpType.RoomList: HandleRoomListUpdated(body.RoomList); break; default: Logger.Error("unknown msg: {0}/{1} {2}", cmd, op, body); break; } break; case CommandType.Statistic: break; case CommandType.Error: { Logger.Error("error msg: {0}", body); ErrorInfo errorInfo = body.Error.ErrorInfo; Client.OnError?.Invoke(errorInfo.ReasonCode, errorInfo.Detail); } break; default: Logger.Error("unknown msg: {0}/{1} {2}", cmd, op, body); break; } }; state = State.Lobby; } catch (Exception e) { if (lobbyConn != null) { await lobbyConn.Close(); } state = State.Init; throw e; } }