본문 바로가기
프로그래밍/C#_MagicOnion

MagicOnion을 이용한 채팅 만들기 3 : 클라이언트

by 뽀도 2024. 8. 9.

MagicOnion을 이용한 채팅 만들기 3 : 클라이언트

MagicOnion/github를 보면클라이언트는 Unity로 구현되어 있다.

Unity로 구현은 나중에 할 예정이라, 일단은 console 먼저 구현하겠다.


1. 솔루션 -> 오른쪽 버튼 -> 새 프로젝트 추가 

 

2. 콘솔 앱 생성, 이름  작성 

나는  MagicOnionChatClient 로 만들었다.

 

3. 추가 정보 

.NET 8.0 만들기 

 

4. 프로젝트 추가 

-  앞서 만들어놓은 Shared 프로젝트를 참조 추가 한다.

 

5. ChatHubReceiver 구현

앞에서 만든 IChatHubReceiver를 구현한 ChatHubReceiver를 만들자.

이 클래스는 서버로 부터 응답 혹은 요청이 왔을때 수신처리 하기 위한 클래스이다. 

 

👩🏼‍💻 ChatHubReceiver.cs

using Shared;

namespace MagicOnionChatClient
{
    public class ChatHubReceiver : IChatHubReceiver
    {
    	// 서버가 보낸 메시지 
        public void OnSendMessage(string message)
        {
            Console.WriteLine($"Server -> client :{message}");
        }

		// join에 대한 응답, connectionId는 서버가 클라이언트가 접속시 발행해주는
        // guid다. 
        public void OnJoin(string connectionId)
        {
            Console.WriteLine($"Join:{connectionId}");
        }
    }
}

 

 

6. Program.cs 구현 

이제 클라이언트 메인 프로그램을 작성해보자. 

// See https://aka.ms/new-console-template for more information
using Grpc.Net.Client;
using MagicOnion.Client;
using MagicOnionChatClient;
using Shared;

Console.WriteLine("Hello, World!");

// 1. 접속하기 위한 주소 및 채널 설정 
var address = "http://localhost:5000";
var channel = GrpcChannel.ForAddress(address);

// 2. 해당 채널에 커넥트 
var hub = await StreamingHubClient.ConnectAsync<IChatHub, IChatHubReceiver>(channel, new ChatHubReceiver());

// 3. 그룹에 조인  
hub.JoinAsync().Wait();

// 4. 메시지 보냄
hub.SendMessageAsync("Hello, MagicOnion!").Wait();

var msg = Console.ReadLine();

 

위의 코드는 크게 4가지 단계로 구분 가능 하다.

hub.JoinAsync(), hub.SendMessageAsync()는   IChatHub에 정의 해놓은 메서드 이다. 

클라이언트는 해당 메서드를 사용해서 서버로 요청을 보낸다. 

 

그러면 그 요청에 대한 응답을 5에서 작성한 ChatHubReceiver로 처리하는 것이다. 


 

채팅 프로그램에 대한 서버, 클라, 공통 모듈 관련 모든 구현이 끝났고

실행해보자, 이때 비쥬얼 스튜디오로 실행시 여러 시작프로젝트로 서버, 클라이언트 둘다 설정해야 한번에 실행 가능하다. 

 

왼쪽은 서버, 오른쪽 두개는 클라이언트인데, 보면 오른쪽 위에 클라이언트는 아래 클라이언트가 접속하고 보낸 메시지를 수신 받아 화면에 표시하고 있다. 

 

MagicOnion으로 하는 간단한 채팅 구현 끝 !! 

 

 

💻 깃 코드 주소 

반응형

댓글