Browse Source

Finish query images

main
ThePerkinrex 4 years ago
parent
commit
e92980ee97
No known key found for this signature in database GPG Key ID: FD81DE6D75E20917
  1. 43
      server/src/server/game.rs
  2. 60
      unity/Assets/Scripts/Client.cs
  3. 57
      unity/Assets/Scripts/Images.cs
  4. 11
      unity/Assets/Scripts/Images.cs.meta
  5. 1103
      unity/Assets/Scripts/grpc/Game.cs
  6. 140
      unity/Assets/Scripts/grpc/Protocol.cs

43
server/src/server/game.rs

@ -1,4 +1,8 @@
use std::{fs::File, path::Path};
use std::{
collections::{hash_map::Entry, HashMap},
fs::File,
path::{Path, PathBuf},
};
use super::{
protos::game::{game_status::Piles, CardKind, Cards, GameStatus, Image},
@ -23,7 +27,7 @@ use crate::{
use anyhow::{anyhow, Result};
use bytes::{Buf, Bytes};
use libflate::deflate::Encoder;
use tar::Builder;
use tar::{Builder, Header};
pub(super) async fn get_status(
data: &mut ServiceData,
@ -205,6 +209,7 @@ pub(super) async fn get_cards_images(
};
let game = &data.games[game_id as usize];
let mut ar = Builder::new(Encoder::new(Vec::new()));
let mut pathsUsed: HashMap<PathBuf, String> = HashMap::new();
for card_kind in cards.cards {
let (face, back) = game.get_card_paths(&card_kind.kind);
// log::info!("Loading face image [{:?}]", time.elapsed());
@ -226,19 +231,33 @@ pub(super) async fn get_cards_images(
}
if is_newer(&card_kind, &face) {
ar.append_file(
format!("{}/face.png", card_kind.kind),
&mut File::open(face).unwrap(),
)
.unwrap();
let new_path = format!("{}/face.png", card_kind.kind);
if let Entry::Vacant(e) = pathsUsed.entry(face.clone()) {
ar.append_file(&new_path, &mut File::open(&face).unwrap())
.unwrap();
e.insert(new_path);
} else {
let mut header = Header::new_gnu();
header.set_cksum();
let b = pathsUsed.get(&face).unwrap().as_bytes();
header.set_size(b.len() as u64);
ar.append_data(&mut header, format!("{}/face.ref.txt", card_kind.kind), b).unwrap();
}
}
if is_newer(&card_kind, &back) {
ar.append_file(
format!("{}/back.png", card_kind.kind),
&mut File::open(back).unwrap(),
)
.unwrap();
let new_path = format!("{}/back.png", card_kind.kind);
if let Entry::Vacant(e) = pathsUsed.entry(back.clone()) {
ar.append_file(&new_path, &mut File::open(&back).unwrap())
.unwrap();
e.insert(new_path);
} else {
let mut header = Header::new_gnu();
header.set_cksum();
let b = pathsUsed.get(&back).unwrap().as_bytes();
header.set_size(b.len() as u64);
ar.append_data(&mut header, format!("{}/back.ref.txt", card_kind.kind), b).unwrap();
}
}
}
let mut b = Bytes::from(ar.into_inner().unwrap().finish().into_result().unwrap());

60
unity/Assets/Scripts/Client.cs

@ -8,6 +8,7 @@ using Utilities;
using System.Net;
using System;
using Empty = Google.Protobuf.WellKnownTypes.Empty;
using System.IO;
public class Client : MonoBehaviour {
private static ConnectionImpl reference;
@ -49,7 +50,15 @@ public class Client : MonoBehaviour {
private Dictionary<string, Action<Protocol.Names>> returnUsersHandlers = new Dictionary<string, Action<Protocol.Names>>();
private Dictionary<string, Action<Lobby.LobbyStatus>> lobbyStatusHandlers = new Dictionary<string, Action<Lobby.LobbyStatus>>();
private Dictionary<string, Action<Game.Image>> returnCardImageHandlers = new Dictionary<string, Action<Game.Image>>();
private Dictionary<string, Action<Images>> returnCardImagesHandlers = new Dictionary<string, Action<Images>>();
private Dictionary<string, Action<Game.GameStatus>> gameStatusHandlers = new Dictionary<string, Action<Game.GameStatus>>();
private int currentImagesPacketLength = 0;
private int currentImagesPacketIndex = 0;
private MemoryStream currentImages;
public ConcurrentQueue<Protocol.ServerClientPacket> queue;
public void Update() {
@ -120,6 +129,29 @@ public class Client : MonoBehaviour {
}
}
break;
case Protocol.ServerClientPacket.DataOneofCase.ReturnCardsImages: {
if (p.ReturnCardsImages.Setup != null) {
this.currentImagesPacketLength = (int)p.ReturnCardsImages.Setup.Number;
this.currentImagesPacketIndex = 0;
this.currentImages = new MemoryStream();
} else {
if (p.ReturnCardsImages.DataPacket.Id != this.currentImagesPacketIndex)
throw new Exception("images packet id doesn't match expected");
this.currentImages.Write(p.ReturnCardsImages.DataPacket.Data.ToArray(), 0, p.ReturnCardsImages.DataPacket.Data.Length);
this.currentImagesPacketIndex++;
if (this.currentImagesPacketIndex == this.currentImagesPacketLength) {
Images i = new Images(this.currentImages);
this.currentImagesPacketIndex = 0;
var v = new Action<Images>[this.returnCardImagesHandlers.Count];
this.returnCardImagesHandlers.Values.CopyTo(v, 0);
foreach (var n in v) {
n(i);
}
}
}
}
break;
case Protocol.ServerClientPacket.DataOneofCase.GameStatus: {
var v = new Action<Game.GameStatus>[this.gameStatusHandlers.Count];
this.gameStatusHandlers.Values.CopyTo(v, 0);
@ -166,6 +198,10 @@ public class Client : MonoBehaviour {
returnCardImageHandlers.Add(name, handler);
}
public void AddHandler(string name, Action<Images> handler) {
returnCardImagesHandlers.Add(name, handler);
}
public void AddHandler(string name, Action<Game.GameStatus> handler) {
gameStatusHandlers.Add(name, handler);
}
@ -196,6 +232,9 @@ public class Client : MonoBehaviour {
case Protocol.ServerClientPacket.DataOneofCase.ReturnCardImage:
returnCardImageHandlers.Remove(name);
break;
case Protocol.ServerClientPacket.DataOneofCase.ReturnCardsImages:
returnCardImagesHandlers.Remove(name);
break;
case Protocol.ServerClientPacket.DataOneofCase.GameStatus:
gameStatusHandlers.Remove(name);
break;
@ -274,7 +313,7 @@ public class Client : MonoBehaviour {
public List<Lobby.Vote> GetLobbyVotes(uint game) {
var gameVotes = new List<Lobby.Vote>();
if (lobby_status.Get() != null){
if (lobby_status.Get() != null) {
Google.Protobuf.Collections.RepeatedField<Lobby.Vote> votes = lobby_status.Get()?.Votes;
foreach (Lobby.Vote vote in votes) {
if (vote.Game == game) {
@ -331,9 +370,16 @@ public class Client : MonoBehaviour {
conn.SendMessage(new Protocol.ClientServerPacket() { QueryPublicLobbies = new Empty() });
}
public void GetCardImage(string cardKind) {
public void GetCardImage(string cardKind) {
conn.SendMessage(new Protocol.ClientServerPacket() { QueryCardImage = new Game.CardKind { Kind = cardKind } });
}
public void GetCardImages(string cardKind) {
Game.Cards c = new Game.Cards();
c.Cards_.Append(new Game.Cards.Types.Card { Kind = cardKind, Time = new Google.Protobuf.WellKnownTypes.Timestamp { Seconds = 0, Nanos = 0 } });
conn.SendMessage(new Protocol.ClientServerPacket() { QueryCardImages = c });
}
public int GetUserIndex(string user) {
if (game_status.Get() != null) return game_status.Get().Names.IndexOf(new Common.Name { Name_ = user });
else return -1;
@ -344,8 +390,8 @@ public class Client : MonoBehaviour {
return game_status.Get().PlayerPiles[idx].Piles_;
}
return null;
}
public Google.Protobuf.Collections.MapField<string, Game.GameStatus.Types.Pile> GetCommonPiles() {
}
public Google.Protobuf.Collections.MapField<string, Game.GameStatus.Types.Pile> GetCommonPiles() {
if (game_status.Get() != null) return game_status.Get().CommonPiles.Piles_;
else return null;
}
@ -353,7 +399,7 @@ public class Client : MonoBehaviour {
Game.PileKind pileKind = new Game.PileKind() { Owned = (uint)GetUserIndex(user) };
if (isCommonPile) pileKind = new Game.PileKind { Common = new Empty() };
conn.SendMessage(new Protocol.ClientServerPacket() { CallOnClick = new Game.CardId { PileKind = pileKind, CardIndex = new Game.CardIndex { Index = (uint)cardIdx }, PileName = pileName } });
}
}
// public Dictionary<string, Dictionary<string, Game.MessageStatus.Types.Pile>> OnClickCard(string pileName, bool isCommonPile, int cardIdx, string user) {
// Game.PileKind pileKind = new Game.PileKind() { Owned = (uint)GetUserIndex(user) };
@ -365,13 +411,13 @@ public class Client : MonoBehaviour {
conn.SendMessage(new Protocol.ClientServerPacket() { QueryGames = new Empty() });
}
static T runSync<T>(Task<T> task) {
static T runSync<T>(Task<T> task) {
task.Wait();
return task.Result;
}
public void Close() {
conn.SendMessage(new Protocol.ClientServerPacket() {Disconnect = new Empty()});
conn.SendMessage(new Protocol.ClientServerPacket() { Disconnect = new Empty() });
conn.Close();
}
}

57
unity/Assets/Scripts/Images.cs

@ -0,0 +1,57 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Compression;
using System.Text;
public class Images {
private List<byte[]> images = new List<byte[]>();
private Dictionary<string, int> refs = new Dictionary<string, int>();
public Images(Stream s) {
ExtractTar(Decompress(s));
}
private DeflateStream Decompress(Stream s) {
return new DeflateStream(s, CompressionMode.Decompress);
}
private void ExtractTar(Stream stream) {
var buffer = new byte[100];
while (true) {
stream.Read(buffer, 0, 100);
var name = Encoding.ASCII.GetString(buffer).Trim('\0');
if (String.IsNullOrWhiteSpace(name))
break;
stream.Seek(24, SeekOrigin.Current);
stream.Read(buffer, 0, 12);
var size = Convert.ToInt64(Encoding.ASCII.GetString(buffer, 0, 12).Trim(), 8);
stream.Seek(376L, SeekOrigin.Current);
var buf = new byte[size];
stream.Read(buf, 0, buf.Length);
if (name.EndsWith(".ref.txt")) {
string r = Encoding.UTF8.GetString(buf).Trim('\0');
refs.Add(name.Replace(".ref.txt", ".png"), refs[r]);
}else{
int i = images.Count;
images.Add(buf);
refs.Add(name, i);
}
var pos = stream.Position;
var offset = 512 - (pos % 512);
if (offset == 512)
offset = 0;
stream.Seek(offset, SeekOrigin.Current);
}
}
public byte[] GetImage(string name) {
return images[refs[name]];
}
}

11
unity/Assets/Scripts/Images.cs.meta

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 061da33921355adfc826eaeec65052fc
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

1103
unity/Assets/Scripts/grpc/Game.cs

File diff suppressed because it is too large

140
unity/Assets/Scripts/grpc/Protocol.cs

@ -26,7 +26,7 @@ namespace Protocol {
string.Concat(
"Cg5wcm90b2NvbC5wcm90bxIIcHJvdG9jb2waG2dvb2dsZS9wcm90b2J1Zi9l",
"bXB0eS5wcm90bxoMY29tbW9uLnByb3RvGhBjb25uZWN0aW9uLnByb3RvGgts",
"b2JieS5wcm90bxoKZ2FtZS5wcm90byL9BAoSQ2xpZW50U2VydmVyUGFja2V0",
"b2JieS5wcm90bxoKZ2FtZS5wcm90byKlBQoSQ2xpZW50U2VydmVyUGFja2V0",
"EisKCXF1ZXJ5TmFtZRgBIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eUgA",
"Eh8KB2Nvbm5lY3QYAiABKAsyDC5jb21tb24uTmFtZUgAEiwKCmRpc2Nvbm5l",
"Y3QYAyABKAsyFi5nb29nbGUucHJvdG9idWYuRW1wdHlIABIqCglqb2luTG9i",
@ -40,25 +40,27 @@ namespace Protocol {
"ASgLMhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5SAASKAoOcXVlcnlDYXJkSW1h",
"Z2UYDCABKAsyDi5nYW1lLkNhcmRLaW5kSAASIwoLY2FsbE9uQ2xpY2sYDSAB",
"KAsyDC5nYW1lLkNhcmRJZEgAEjEKD3F1ZXJ5R2FtZVN0YXR1cxgOIAEoCzIW",
"Lmdvb2dsZS5wcm90b2J1Zi5FbXB0eUgAQgYKBGRhdGEioQMKElNlcnZlckNs",
"aWVudFBhY2tldBIiCgpyZXR1cm5OYW1lGAEgASgLMgwuY29tbW9uLk5hbWVI",
"ABIrCg1yZXR1cm5Db25uZWN0GAIgASgLMhIuY29ubmVjdGlvbi5Vc2VySURI",
"ABIyChFyZXR1cm5DcmVhdGVMb2JieRgDIAEoCzIVLmNvbm5lY3Rpb24uTG9i",
"YnlDb2RlSAASJgoLcmV0dXJuR2FtZXMYBCABKAsyDy5wcm90b2NvbC5HYW1l",
"c0gAEjMKE3JldHVyblB1YmxpY0xvYmJpZXMYBSABKAsyFC5wcm90b2NvbC5M",
"b2JieUNvZGVzSAASJgoLcmV0dXJuVXNlcnMYBiABKAsyDy5wcm90b2NvbC5O",
"YW1lc0gAEikKC2xvYmJ5U3RhdHVzGAcgASgLMhIubG9iYnkuTG9iYnlTdGF0",
"dXNIABImCg9yZXR1cm5DYXJkSW1hZ2UYCCABKAsyCy5nYW1lLkltYWdlSAAS",
"JgoKZ2FtZVN0YXR1cxgJIAEoCzIQLmdhbWUuR2FtZVN0YXR1c0gAQgYKBGRh",
"dGEiKAoFR2FtZXMSHwoFZ2FtZXMYASADKAsyEC5jb25uZWN0aW9uLkdhbWUi",
"NwoKTG9iYnlDb2RlcxIpCgpsb2JieUNvZGVzGAEgAygLMhUuY29ubmVjdGlv",
"bi5Mb2JieUNvZGUiJAoFTmFtZXMSGwoFbmFtZXMYASADKAsyDC5jb21tb24u",
"TmFtZWIGcHJvdG8z"));
"Lmdvb2dsZS5wcm90b2J1Zi5FbXB0eUgAEiYKD3F1ZXJ5Q2FyZEltYWdlcxgP",
"IAEoCzILLmdhbWUuQ2FyZHNIAEIGCgRkYXRhIswDChJTZXJ2ZXJDbGllbnRQ",
"YWNrZXQSIgoKcmV0dXJuTmFtZRgBIAEoCzIMLmNvbW1vbi5OYW1lSAASKwoN",
"cmV0dXJuQ29ubmVjdBgCIAEoCzISLmNvbm5lY3Rpb24uVXNlcklESAASMgoR",
"cmV0dXJuQ3JlYXRlTG9iYnkYAyABKAsyFS5jb25uZWN0aW9uLkxvYmJ5Q29k",
"ZUgAEiYKC3JldHVybkdhbWVzGAQgASgLMg8ucHJvdG9jb2wuR2FtZXNIABIz",
"ChNyZXR1cm5QdWJsaWNMb2JiaWVzGAUgASgLMhQucHJvdG9jb2wuTG9iYnlD",
"b2Rlc0gAEiYKC3JldHVyblVzZXJzGAYgASgLMg8ucHJvdG9jb2wuTmFtZXNI",
"ABIpCgtsb2JieVN0YXR1cxgHIAEoCzISLmxvYmJ5LkxvYmJ5U3RhdHVzSAAS",
"JgoPcmV0dXJuQ2FyZEltYWdlGAggASgLMgsuZ2FtZS5JbWFnZUgAEikKEXJl",
"dHVybkNhcmRzSW1hZ2VzGAogASgLMgwuZ2FtZS5JbWFnZXNIABImCgpnYW1l",
"U3RhdHVzGAkgASgLMhAuZ2FtZS5HYW1lU3RhdHVzSABCBgoEZGF0YSIoCgVH",
"YW1lcxIfCgVnYW1lcxgBIAMoCzIQLmNvbm5lY3Rpb24uR2FtZSI3CgpMb2Ji",
"eUNvZGVzEikKCmxvYmJ5Q29kZXMYASADKAsyFS5jb25uZWN0aW9uLkxvYmJ5",
"Q29kZSIkCgVOYW1lcxIbCgVuYW1lcxgBIAMoCzIMLmNvbW1vbi5OYW1lYgZw",
"cm90bzM="));
descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
new pbr::FileDescriptor[] { global::Google.Protobuf.WellKnownTypes.EmptyReflection.Descriptor, global::Common.CommonReflection.Descriptor, global::Connection.ConnectionReflection.Descriptor, global::Lobby.LobbyReflection.Descriptor, global::Game.GameReflection.Descriptor, },
new pbr::GeneratedClrTypeInfo(null, null, new pbr::GeneratedClrTypeInfo[] {
new pbr::GeneratedClrTypeInfo(typeof(global::Protocol.ClientServerPacket), global::Protocol.ClientServerPacket.Parser, new[]{ "QueryName", "Connect", "Disconnect", "JoinLobby", "CreateLobby", "QueryGames", "QueryPublicLobbies", "QueryUsers", "Vote", "Ready", "Leave", "QueryCardImage", "CallOnClick", "QueryGameStatus" }, new[]{ "Data" }, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Protocol.ServerClientPacket), global::Protocol.ServerClientPacket.Parser, new[]{ "ReturnName", "ReturnConnect", "ReturnCreateLobby", "ReturnGames", "ReturnPublicLobbies", "ReturnUsers", "LobbyStatus", "ReturnCardImage", "GameStatus" }, new[]{ "Data" }, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Protocol.ClientServerPacket), global::Protocol.ClientServerPacket.Parser, new[]{ "QueryName", "Connect", "Disconnect", "JoinLobby", "CreateLobby", "QueryGames", "QueryPublicLobbies", "QueryUsers", "Vote", "Ready", "Leave", "QueryCardImage", "CallOnClick", "QueryGameStatus", "QueryCardImages" }, new[]{ "Data" }, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Protocol.ServerClientPacket), global::Protocol.ServerClientPacket.Parser, new[]{ "ReturnName", "ReturnConnect", "ReturnCreateLobby", "ReturnGames", "ReturnPublicLobbies", "ReturnUsers", "LobbyStatus", "ReturnCardImage", "ReturnCardsImages", "GameStatus" }, new[]{ "Data" }, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Protocol.Games), global::Protocol.Games.Parser, new[]{ "Games_" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Protocol.LobbyCodes), global::Protocol.LobbyCodes.Parser, new[]{ "LobbyCodes_" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Protocol.Names), global::Protocol.Names.Parser, new[]{ "Names_" }, null, null, null, null)
@ -140,6 +142,9 @@ namespace Protocol {
case DataOneofCase.QueryGameStatus:
QueryGameStatus = other.QueryGameStatus.Clone();
break;
case DataOneofCase.QueryCardImages:
QueryCardImages = other.QueryCardImages.Clone();
break;
}
_unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
@ -313,6 +318,17 @@ namespace Protocol {
}
}
/// <summary>Field number for the "queryCardImages" field.</summary>
public const int QueryCardImagesFieldNumber = 15;
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public global::Game.Cards QueryCardImages {
get { return dataCase_ == DataOneofCase.QueryCardImages ? (global::Game.Cards) data_ : null; }
set {
data_ = value;
dataCase_ = value == null ? DataOneofCase.None : DataOneofCase.QueryCardImages;
}
}
private object data_;
/// <summary>Enum of possible cases for the "data" oneof.</summary>
public enum DataOneofCase {
@ -331,6 +347,7 @@ namespace Protocol {
QueryCardImage = 12,
CallOnClick = 13,
QueryGameStatus = 14,
QueryCardImages = 15,
}
private DataOneofCase dataCase_ = DataOneofCase.None;
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@ -371,6 +388,7 @@ namespace Protocol {
if (!object.Equals(QueryCardImage, other.QueryCardImage)) return false;
if (!object.Equals(CallOnClick, other.CallOnClick)) return false;
if (!object.Equals(QueryGameStatus, other.QueryGameStatus)) return false;
if (!object.Equals(QueryCardImages, other.QueryCardImages)) return false;
if (DataCase != other.DataCase) return false;
return Equals(_unknownFields, other._unknownFields);
}
@ -392,6 +410,7 @@ namespace Protocol {
if (dataCase_ == DataOneofCase.QueryCardImage) hash ^= QueryCardImage.GetHashCode();
if (dataCase_ == DataOneofCase.CallOnClick) hash ^= CallOnClick.GetHashCode();
if (dataCase_ == DataOneofCase.QueryGameStatus) hash ^= QueryGameStatus.GetHashCode();
if (dataCase_ == DataOneofCase.QueryCardImages) hash ^= QueryCardImages.GetHashCode();
hash ^= (int) dataCase_;
if (_unknownFields != null) {
hash ^= _unknownFields.GetHashCode();
@ -465,6 +484,10 @@ namespace Protocol {
output.WriteRawTag(114);
output.WriteMessage(QueryGameStatus);
}
if (dataCase_ == DataOneofCase.QueryCardImages) {
output.WriteRawTag(122);
output.WriteMessage(QueryCardImages);
}
if (_unknownFields != null) {
_unknownFields.WriteTo(output);
}
@ -530,6 +553,10 @@ namespace Protocol {
output.WriteRawTag(114);
output.WriteMessage(QueryGameStatus);
}
if (dataCase_ == DataOneofCase.QueryCardImages) {
output.WriteRawTag(122);
output.WriteMessage(QueryCardImages);
}
if (_unknownFields != null) {
_unknownFields.WriteTo(ref output);
}
@ -581,6 +608,9 @@ namespace Protocol {
if (dataCase_ == DataOneofCase.QueryGameStatus) {
size += 1 + pb::CodedOutputStream.ComputeMessageSize(QueryGameStatus);
}
if (dataCase_ == DataOneofCase.QueryCardImages) {
size += 1 + pb::CodedOutputStream.ComputeMessageSize(QueryCardImages);
}
if (_unknownFields != null) {
size += _unknownFields.CalculateSize();
}
@ -677,6 +707,12 @@ namespace Protocol {
}
QueryGameStatus.MergeFrom(other.QueryGameStatus);
break;
case DataOneofCase.QueryCardImages:
if (QueryCardImages == null) {
QueryCardImages = new global::Game.Cards();
}
QueryCardImages.MergeFrom(other.QueryCardImages);
break;
}
_unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
@ -819,6 +855,15 @@ namespace Protocol {
QueryGameStatus = subBuilder;
break;
}
case 122: {
global::Game.Cards subBuilder = new global::Game.Cards();
if (dataCase_ == DataOneofCase.QueryCardImages) {
subBuilder.MergeFrom(QueryCardImages);
}
input.ReadMessage(subBuilder);
QueryCardImages = subBuilder;
break;
}
}
}
#endif
@ -959,6 +1004,15 @@ namespace Protocol {
QueryGameStatus = subBuilder;
break;
}
case 122: {
global::Game.Cards subBuilder = new global::Game.Cards();
if (dataCase_ == DataOneofCase.QueryCardImages) {
subBuilder.MergeFrom(QueryCardImages);
}
input.ReadMessage(subBuilder);
QueryCardImages = subBuilder;
break;
}
}
}
}
@ -1020,6 +1074,9 @@ namespace Protocol {
case DataOneofCase.ReturnCardImage:
ReturnCardImage = other.ReturnCardImage.Clone();
break;
case DataOneofCase.ReturnCardsImages:
ReturnCardsImages = other.ReturnCardsImages.Clone();
break;
case DataOneofCase.GameStatus:
GameStatus = other.GameStatus.Clone();
break;
@ -1130,6 +1187,17 @@ namespace Protocol {
}
}
/// <summary>Field number for the "returnCardsImages" field.</summary>
public const int ReturnCardsImagesFieldNumber = 10;
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public global::Game.Images ReturnCardsImages {
get { return dataCase_ == DataOneofCase.ReturnCardsImages ? (global::Game.Images) data_ : null; }
set {
data_ = value;
dataCase_ = value == null ? DataOneofCase.None : DataOneofCase.ReturnCardsImages;
}
}
/// <summary>Field number for the "gameStatus" field.</summary>
public const int GameStatusFieldNumber = 9;
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@ -1153,6 +1221,7 @@ namespace Protocol {
ReturnUsers = 6,
LobbyStatus = 7,
ReturnCardImage = 8,
ReturnCardsImages = 10,
GameStatus = 9,
}
private DataOneofCase dataCase_ = DataOneofCase.None;
@ -1188,6 +1257,7 @@ namespace Protocol {
if (!object.Equals(ReturnUsers, other.ReturnUsers)) return false;
if (!object.Equals(LobbyStatus, other.LobbyStatus)) return false;
if (!object.Equals(ReturnCardImage, other.ReturnCardImage)) return false;
if (!object.Equals(ReturnCardsImages, other.ReturnCardsImages)) return false;
if (!object.Equals(GameStatus, other.GameStatus)) return false;
if (DataCase != other.DataCase) return false;
return Equals(_unknownFields, other._unknownFields);
@ -1204,6 +1274,7 @@ namespace Protocol {
if (dataCase_ == DataOneofCase.ReturnUsers) hash ^= ReturnUsers.GetHashCode();
if (dataCase_ == DataOneofCase.LobbyStatus) hash ^= LobbyStatus.GetHashCode();
if (dataCase_ == DataOneofCase.ReturnCardImage) hash ^= ReturnCardImage.GetHashCode();
if (dataCase_ == DataOneofCase.ReturnCardsImages) hash ^= ReturnCardsImages.GetHashCode();
if (dataCase_ == DataOneofCase.GameStatus) hash ^= GameStatus.GetHashCode();
hash ^= (int) dataCase_;
if (_unknownFields != null) {
@ -1258,6 +1329,10 @@ namespace Protocol {
output.WriteRawTag(74);
output.WriteMessage(GameStatus);
}
if (dataCase_ == DataOneofCase.ReturnCardsImages) {
output.WriteRawTag(82);
output.WriteMessage(ReturnCardsImages);
}
if (_unknownFields != null) {
_unknownFields.WriteTo(output);
}
@ -1303,6 +1378,10 @@ namespace Protocol {
output.WriteRawTag(74);
output.WriteMessage(GameStatus);
}
if (dataCase_ == DataOneofCase.ReturnCardsImages) {
output.WriteRawTag(82);
output.WriteMessage(ReturnCardsImages);
}
if (_unknownFields != null) {
_unknownFields.WriteTo(ref output);
}
@ -1336,6 +1415,9 @@ namespace Protocol {
if (dataCase_ == DataOneofCase.ReturnCardImage) {
size += 1 + pb::CodedOutputStream.ComputeMessageSize(ReturnCardImage);
}
if (dataCase_ == DataOneofCase.ReturnCardsImages) {
size += 1 + pb::CodedOutputStream.ComputeMessageSize(ReturnCardsImages);
}
if (dataCase_ == DataOneofCase.GameStatus) {
size += 1 + pb::CodedOutputStream.ComputeMessageSize(GameStatus);
}
@ -1399,6 +1481,12 @@ namespace Protocol {
}
ReturnCardImage.MergeFrom(other.ReturnCardImage);
break;
case DataOneofCase.ReturnCardsImages:
if (ReturnCardsImages == null) {
ReturnCardsImages = new global::Game.Images();
}
ReturnCardsImages.MergeFrom(other.ReturnCardsImages);
break;
case DataOneofCase.GameStatus:
if (GameStatus == null) {
GameStatus = new global::Game.GameStatus();
@ -1502,6 +1590,15 @@ namespace Protocol {
GameStatus = subBuilder;
break;
}
case 82: {
global::Game.Images subBuilder = new global::Game.Images();
if (dataCase_ == DataOneofCase.ReturnCardsImages) {
subBuilder.MergeFrom(ReturnCardsImages);
}
input.ReadMessage(subBuilder);
ReturnCardsImages = subBuilder;
break;
}
}
}
#endif
@ -1597,6 +1694,15 @@ namespace Protocol {
GameStatus = subBuilder;
break;
}
case 82: {
global::Game.Images subBuilder = new global::Game.Images();
if (dataCase_ == DataOneofCase.ReturnCardsImages) {
subBuilder.MergeFrom(ReturnCardsImages);
}
input.ReadMessage(subBuilder);
ReturnCardsImages = subBuilder;
break;
}
}
}
}

Loading…
Cancel
Save