使用不同用户 Unity-Smartfoxserver 连接服务器的问题

Posted

技术标签:

【中文标题】使用不同用户 Unity-Smartfoxserver 连接服务器的问题【英文标题】:Problem with connecting to server using different users Unity-Smartfoxserver 【发布时间】:2020-09-08 20:17:30 【问题描述】:

我正在制作一个简单的记忆游戏。我已经使游戏与 smartfoxserver 一起工作。但是当我尝试构建另一台机器并让它们同时运行时,一个玩家会在另一个玩家登录时退出。你们能帮我解决这个问题吗?这是客户端上的代码。也就是一旦游戏开始,两台机器有没有办法相互连接。例如显示从 Player1 到 Player2 的分数。谢谢。

using Sfs2X;
using Sfs2X.Core;
using Sfs2X.Entities.Data;
using Sfs2X.Requests;
using Sfs2X.Util;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices.ComTypes;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Networking;
using Sfs2X.Requests.MMO;
 public class GameController : MonoBehaviour

public string defaultHost = "127.0.0.1";
public int defaultTcpport = 8888;
public int defaultWsport = 8080;
public string Zonename = "BasicExamples";
public string Username = "guest";
public string Roomname = "The Lobby";

private SmartFox sfs;

void Awake()

    SourceSprites = Resources.LoadAll<Sprite>("Sprite/GameImages");

void Start()

    Login_Click();
    TotalGuess = btnlist.Count / 2;
    GetButton();
    AddListener();
    AddSprites();
    shuffle(GameSprite);
   
 public void Login_Click()
   
    if (sfs == null || !sfs.IsConnected)
    
        sfs = new SmartFox();
        sfs.ThreadSafeMode = true;
        sfs.AddEventListener(SFSEvent.CONNECTION, OnConnection);
        sfs.AddEventListener(SFSEvent.CONNECTION_LOST, OnConnectionLost);
        sfs.AddEventListener(SFSEvent.LOGIN, OnLogin);
        sfs.AddEventListener(SFSEvent.LOGIN_ERROR, OnLoginError);
        sfs.AddEventListener(SFSEvent.ROOM_JOIN, OnJoinRoom);
        sfs.AddEventListener(SFSEvent.ROOM_JOIN_ERROR, OnJoinRoomError);
        sfs.AddEventListener(SFSEvent.EXTENSION_RESPONSE, GetResult);


        ConfigData cfg = new ConfigData();
        cfg.Host = defaultHost;
        cfg.Port = defaultTcpport;
        cfg.Zone = "BasicExamples";
        cfg.Debug = true;
        Debug.LogError("defaultHost " + defaultHost);
        Debug.LogError("defaultTcpport " + defaultTcpport);
        sfs.Connect(cfg);
    

void OnLogin(BaseEvent evt)

    Debug.Log("Login Success");
    sfs.Send(new JoinRoomRequest("The Lobby"));

  void OnJoinRoom(BaseEvent evt)


    Debug.Log("Joined Room"+ evt.Params["room"]);

void OnJoinRoomError(BaseEvent evt)

    Debug.Log("Join Room Error" + evt.Params["errorMessage"]);

void OnLoginError(BaseEvent evt)

    Debug.Log("Login Error"+ evt.Params["errorMessage"]);

void OnConnection(BaseEvent evt)

    if ((bool)evt.Params["success"])
    
        Debug.Log("Connection Success");
        sfs.Send(new LoginRequest(Username, "", Zonename));
    
    else
    
        Debug.Log("Connection Error");
    

void OnConnectionLost(BaseEvent evt)



【问题讨论】:

【参考方案1】:

您的问题是,当您执行 LoginRequest 时,您的所有客户都有相同的用户名。 SFS 会自动断开具有相同用户名的其他用户。 您必须为所有客户创建一个唯一的用户名,以便他们可以连接在一起。 最简单的方法是使用设备 ID 作为用户名。

sfs.Send(new LoginRequest(SystemInfo.deviceUniqueIdentifier, "", Zonename));

希望这会有所帮助。

【讨论】:

以上是关于使用不同用户 Unity-Smartfoxserver 连接服务器的问题的主要内容,如果未能解决你的问题,请参考以下文章

在 .state 中使用 $rootScope 的不同用户角色的不同选项卡

Jmeter使用吞吐量控制器实现不同的用户操纵不同的业务

在不同情况下使用不同的 Hibernate 用户类型

在不同情况下使用不同的 Hibernate 用户类型

如何向免费用户显示不同的页面,向付费用户显示不同的页面

使用 UserDefaults 为不同用户存储数据