iT邦幫忙

2022 iThome 鐵人賽

0
自我挑戰組

多人連線遊戲背後的原理與實作系列 第 28

Day28 - 程式實作(斷線處理篇)

  • 分享至 

  • xImage
  •  

每當玩家中斷連線時,必須將該玩家的 Slot 清除,以便下個玩家做連線時可以使用該 Slot。伺服器跟失去連線的客戶端要把 TCP/UDP 的Socket 關閉,並清除 stream、Buffer 及遊戲的資料,伺服器在清除遊戲資料時須將執行的 Action 放在 Main Thread 上去執行,以免發生問題,在失去連線的客戶端上也要正確的關閉 TCP Listener 及 UDP Client,伺服器也要發送斷線通知給各個在線玩家,使各個連線中的 Client 也對該名玩家的資料去做移除。

private void Disconnect()
{
    instance.Disconnect();
    stream = null;
    receivedData = null;
    receiveBuffer = null;
    socket = null;
}

private void Disconnect()
{
    if (isConnected)
    {
        isConnected = false;
        tcp.socket.Close();
        udp.socket.Close();
        Debug.Log("Disconnected from server.");
    }
}

在UDP的CLASS裡

private void Disconnect()
{
    instance.Disconnect();
    endPoint = null;
    socket = null;
}

上一篇
Day27 - 程式實作(玩家移動篇三)
下一篇
Day29 - 程式實作(遊戲安全篇)
系列文
多人連線遊戲背後的原理與實作30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言