ゲームエフェクトデザイナーのブログ | A Real-Time VFX Artist's Blog

About Making Materials on UE, Making Tools with C#, etc

Helix Core(Perforce)の .NET向けAPIの導入方法 ①

Helix Core(旧称 Perforce)」を使ったファイルのバージョン管理の操作を、.NET/C# で制作するWindows Forms Application上で行うための導入についてまとめます。

ツールはサーバー管理者向けのものではなく、クライアント向けを想定しています。

本記事で解説する内容はこちら。


.NET向けAPIの入手

まずは公式サイトから Helix Core API for .NET をダウンロードします。
こちらの記事でも触れていますが、C/C++Python向けのAPIもあります。

 DLしたZipに DLL本体・ドキュメント・ソリューション等が一式入っています。
(今回DLしたのは 64bit OS 向けのものになので、その前提の解説になります)

f:id:moko_03_25:20200901000633p:plain

 解凍すると「lib」フォルダ内に2つのDLLが確認できます。

f:id:moko_03_25:20200901000644p:plain


新規プロジェクトの作成

Windows フォーム アプリケーション(.NET Framework)を選択。

f:id:moko_03_25:20200901002228p:plain

適当なプロジェクト名やパスを設定。

f:id:moko_03_25:20200901002309p:plain


2つのDLLの導入

まずはソリューションエクスプローラーの参照で右クリック‥

f:id:moko_03_25:20200901002648p:plain

参照の追加を選択します。

f:id:moko_03_25:20200901002655p:plain

参照ボタンを押して先ほど解凍したZip内の「p4api.net.dll」のみ読み込みます。
※「p4bridge.dll」は読み込もうとしてもエラーが出て読み込めません

f:id:moko_03_25:20200901003742p:plain

参照内に「p4api」が追加されたのを確認。

f:id:moko_03_25:20200901003825p:plain

メニューの「ビルド>構成マネージャー...」を選択、もしくはツールバーの「Any CPU」が指定されているプルダウンから構成マネージャーを開きます。

f:id:moko_03_25:20200901004119p:plain

ビルド時のプラットフォームを「x64」にする必要があります。
「x64」ではない場合はプルダウンから「新規作成」を選んで‥

f:id:moko_03_25:20200901004259p:plain

x64」が指定されていることを確認してOKします。

f:id:moko_03_25:20200901004306p:plain

開始ボタンを押して一旦ビルドします。

f:id:moko_03_25:20200901003240p:plain

プロジェクト内の bin 直下に「x64」フォルダが生成されています。

f:id:moko_03_25:20200901004420p:plain

Debugフォルダ内に実行ファイルと「p4api.net.dll」が確認できます。
ここに最初にダウンロードしたもう1つのDLL「p4bridge.dll」をコピーします。
※Release Buildに後から変更した場合、入れ忘れにご注意ください

f:id:moko_03_25:20200901004516p:plain


デザイナーでボタンを配置

せっかくGUIのツールにしているのでボタンを1つ配置します。
ボタンを押したら Helix Core Server に接続するというシンプルな内容を実装します。

f:id:moko_03_25:20200901004924p:plain

ボタンをダブルクリックしてクリックイベントを追加しておきます。

f:id:moko_03_25:20200901005034p:plain


ソースコードを記述

公式サイトに記載されているコンソールアプリ向けのコードが参考になります。
https://community.perforce.com/s/article/5523

※コンソールアプリで良いなら、上記の手順に加えてプラットフォームを「x64」に変更し、ソースコードはそのままコピペで動作しました

まずは Using ステートメントを一行追加します。

using Perforce.P4;


次に接続のための「ConnectWS」関数を作成し、接続のための定数を定義します。

サーバーがローカルにあるなら「1666」でも「localhost:1666」でもOK。
ユーザー名とワークスペース名を入力し、パスワードは未設定なら空白でOK。

var P4PORT = "1666";
var P4USER = "";
var P4CLIENT = "";
var P4PASSWD = "";


今回はあくまで動作テストということでサーバーの接続情報はハードコーディングしちゃっていますが、実際にはデザイナー側で使用者がテキストボックスに入力できるようにしたり、設定画面を用意してそこに入力するようにして、ツール終了時に内容を記憶して次回に読み込む実装が必要かと思います。

関数の内容はまた別の公式のドキュメントから最低限、抜き出したものになります。

最後にボタンイベント内で関数を呼び出すよう記述します。


実行

実行してみますが、接続時には成功したかどうかでメッセージ表示するようにしてるので、接続情報が正しい場合と間違っている場合でメッセージが変わるかだけテストしました。

成功時はこちらで‥

f:id:moko_03_25:20200901011941p:plain

失敗時はこちら。

f:id:moko_03_25:20200901011951p:plain

現状はとりあえずサーバーに接続できただけなので中についての解説は割愛して、「とりあえず一応動いた」というソースコードを記載しておきます。

using System;
using System.Windows.Forms;
using Perforce.P4;

namespace Test_P41
{
	public partial class Form1 : Form
	{
		public Form1()
		{
			InitializeComponent();
		}

		static void ConnectWS()
		{
			var P4PORT = "1666";
			var P4USER = "---";
			var P4CLIENT = "---";
			var P4PASSWD = "";

			Server srv = new Server(new ServerAddress(P4PORT));
			Repository p4 = new Repository(srv);

			Connection con = p4.Connection;
			con.UserName = P4USER;
			con.Client = new Client();
			con.Client.Name = P4CLIENT;

			// Connect
			bool connected = con.Connect(null);
			if (connected)
			{
				try
				{
					// Attempt a Login
					Credential cred = con.Login(P4PASSWD);

					MessageBox.Show("Success!");
				}
				catch (Exception ex)
				{
					MessageBox.Show("Error!");
				}
			}
		}

		private void button1_Click(object sender, EventArgs e)
		{
			ConnectWS();
		}
	}
}

 

という訳で以上になります!

引き続き、アセットのチェックアウトとサブミットを試してみたいと思います。
次回の記事はこちら