Manager Of Managers(六)ClientManager

//==========================
// - FileName:      ClientManager.cs         
// - Created:       true.	
// - CreateTime:    2020/06/25 23:46:44	
// - Email:         1670328571@qq.com		
// - Region:        China WUHAN	
// - Description:   管理服务器端的 Socket 连接
//==========================
using ShareProject;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Net.Sockets;
using UnityEngine;

public class ClientManager:BaseManager
{
    private Socket clientSocket;
    //数据存储以及解析
    private Message msg = new Message();
    public ClientManager(GameManager gameManager) : base(gameManager)
    {

    }

    /// <summary>
    /// 建立连接
    /// </summary>
    public override void OnInit()
    {
        base.OnInit();
        clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        try
        {
            //建立连接
            clientSocket.Connect(StringManager.IP, StringManager.PORT);
            Debug.Log("连接服务器成功");
            Start();
        }
        catch (Exception e)
        {
            Debug.LogError("服务器未开启..." + e);
            //Debug.Log("无法连接到服务器端:" + e);
        }
    }


    /// <summary>
    /// 关闭连接
    /// </summary>
    public override void OnDestroy()
    {
        base.OnDestroy();
        //判断是否为 null
        try
        {
            Debug.Log("已关闭与服务器的连接");
            clientSocket.Close();
        }
        catch (Exception e)
        {
            Debug.LogError("无法关闭跟服务器的连接" + e);
        }
    }
    

    /// <summary>
    /// 发送请求
    /// </summary>
    /// <param name="requestCode"></param>
    /// <param name="actionCode"></param>
    /// <param name="data"></param>
    public void SendRequest(RequestCode requestCode, ActionCode actionCode, string data)
    {
        //打包
        byte[] bytes = Message.PackData(requestCode, actionCode, data);
        //发送
        clientSocket.Send(bytes);
    }

    /// <summary>
    /// 开始接收
    /// </summary>
    private void Start()
    {
        //异步消息接收
        clientSocket.BeginReceive(msg.Data, msg.StartIndex, msg.RemainSize, SocketFlags.None, ReceiveCallBack, null);
    }

    /// <summary>
    /// 异步接收
    /// </summary>
    /// <param name="ar"></param>
    private void ReceiveCallBack(IAsyncResult ar)
    {
        try
        {
            if (clientSocket == null || clientSocket.Connected == false)
            {
                return;
            }
            //接收的数据
            int count = clientSocket.EndReceive(ar);
            msg.ReadMessage(count, OnProcessDataCallBack);
            //消息的处理
            //继续监听
            Start();
        }
        catch (Exception e)
        {
            Debug.LogError("与服务器断开连接..." + e);
        }
    }

    /// <summary>
    /// 回调函数
    /// </summary>
    /// <param name="actionCode"></param>
    /// <param name="data"></param>
    private void OnProcessDataCallBack(ActionCode actionCode, string data)
    {
        gameManager.HandleReponse(actionCode, data);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值