Exemplo n.º 1
0
            internal static TupleListBuilder Create(string prolog)
            {
                var r = new TupleListBuilder();

                r.sql = new StringBuilder(prolog.Length * 2);
                r.sql.Append(prolog);
                return(r);
            }
Exemplo n.º 2
0
        public async Task SavePlayerInfo(PlayerInfo player_info)
        {
            try
            {
                using (var conn = get_conn())
                {
                    var transaction = await conn.BeginTransactionAsync();

                    try
                    {
                        using (var cmd = new MySqlCommand
                        {
                            CommandText = DeleteFriendsOfPlayer,
                            Connection = conn
                        })
                        {
                            cmd.Parameters.AddWithValue("@permanent_id", player_info.permanent_id);
                            await cmd.ExecuteNonQueryAsync();
                        }

                        using (var cmd = new MySqlCommand
                        {
                            CommandText = DeleteIgnoredOfPlayer,
                            Connection = conn
                        })
                        {
                            cmd.Parameters.AddWithValue("@permanent_id", player_info.permanent_id);
                            await cmd.ExecuteNonQueryAsync();
                        }

                        using (var cmd = new MySqlCommand
                        {
                            CommandText = DeleteFriendRequestsOfPlayer,
                            Connection = conn
                        })
                        {
                            cmd.Parameters.AddWithValue("@permanent_id", player_info.permanent_id);
                            await cmd.ExecuteNonQueryAsync();
                        }

                        using (var cmd = new MySqlCommand
                        {
                            Connection = conn
                        })
                        {
                            var builder = TupleListBuilder.Create(InsertFriendsOfPlayerProlog);
                            for (var i = 0; i < player_info.friends.Count; ++i)
                            {
                                var friend = player_info.friends[i];
                                builder.StartTuple();
                                builder.Value(player_info.permanent_id);
                                builder.Join();
                                var friend_permanent_id = friend.PermanentId;
                                builder.Value(friend_permanent_id);
                                builder.EndTuple();

                                if (i != player_info.friends.Count - 1)
                                {
                                    builder.Join();
                                }
                            }

                            cmd.CommandText = builder.ToString();

                            await cmd.ExecuteNonQueryAsync();
                        }

                        using (var cmd = new MySqlCommand
                        {
                            Connection = conn
                        })
                        {
                            var builder = TupleListBuilder.Create(InsertIgnoredOfPlayerProlog);
                            for (var i = 0; i < player_info.ignored.Count; ++i)
                            {
                                var ignored = player_info.ignored[i];
                                builder.StartTuple();
                                builder.Value(player_info.permanent_id);
                                builder.Join();
                                var ignored_permanent_id = ignored.PermanentId;
                                builder.Value(ignored_permanent_id);
                                builder.EndTuple();

                                if (i != player_info.friends.Count - 1)
                                {
                                    builder.Join();
                                }
                            }

                            cmd.CommandText = builder.ToString();

                            await cmd.ExecuteNonQueryAsync();
                        }

                        using (var cmd = new MySqlCommand
                        {
                            Connection = conn
                        })
                        {
                            var builder = TupleListBuilder.Create(InsertFriendRequestsOfPlayerProlog);
                            for (var i = 0; i < player_info.pending_friend_requests_outgoing.Count; ++i)
                            {
                                var friend_requested = player_info.pending_friend_requests_outgoing[i];
                                builder.StartTuple();
                                builder.Value(player_info.permanent_id);
                                builder.Join();
                                var friend_requested_permanent_id = friend_requested.PermanentId;

                                builder.Value(friend_requested_permanent_id);
                                builder.EndTuple();

                                if (i != player_info.friends.Count - 1)
                                {
                                    builder.Join();
                                }
                            }

                            cmd.CommandText = builder.ToString();

                            await cmd.ExecuteNonQueryAsync();
                        }

                        transaction.Commit();
                    } catch (Exception)
                    {
                        transaction.Rollback();
                        throw;
                    }
                }
            } catch (Exception e)
            {
                Log.Exception(e);
            }
        }